glmnet/0000755000176200001440000000000013260416321011536 5ustar liggesusersglmnet/inst/0000755000176200001440000000000013251400020012500 5ustar liggesusersglmnet/inst/CITATION0000644000176200001440000000331511532776611013665 0ustar liggesuserscitHeader("To cite glmnet in publications use:") citEntry(entry = "Article", title = "Regularization Paths for Generalized Linear Models via Coordinate Descent", author = personList(as.person("Jerome Friedman"), as.person("Trevor Hastie"), as.person("Robert Tibshirani")), journal = "Journal of Statistical Software", year = "2010", volume = "33", number = "1", pages = "1--22", url = "http://www.jstatsoft.org/v33/i01/", textVersion = paste("Jerome Friedman, Trevor Hastie, Robert Tibshirani (2010).", "Regularization Paths for Generalized Linear Models via Coordinate Descent.", "Journal of Statistical Software, 33(1), 1-22.", "URL http://www.jstatsoft.org/v33/i01/.") ) citEntry(entry = "Article", title = "Regularization Paths for Cox's Proportional Hazards Model via Coordinate Descent", author = personList(as.person("Noah Simon"), as.person("Jerome Friedman"), as.person("Trevor Hastie"), as.person("Rob Tibshirani")), journal = "Journal of Statistical Software", year = "2011", volume = "39", number = "5", pages = "1--13", url = "http://www.jstatsoft.org/v39/i05/", textVersion = paste("Noah Simon, Jerome Friedman, Trevor Hastie, Rob Tibshirani (2011).", "Regularization Paths for Cox's Proportional Hazards Model via Coordinate Descent.", "Journal of Statistical Software, 39(5), 1-13.", "URL http://www.jstatsoft.org/v39/i05/."), header = "If coxnet is used, please also cite:" ) glmnet/inst/doc/0000755000176200001440000000000013251400020013245 5ustar liggesusersglmnet/inst/doc/Coxnet.pdf0000644000176200001440000030153013251400017015210 0ustar liggesusers%PDF-1.5 % 4 0 obj << /Length 2344 /Filter /FlateDecode >> stream xڵYY~ׯ@C^A "J{?yHkǧN;FYQ]]Uѽ?z޹ICkbzB3 3J,Y=To&h6 q_i~Ÿ# _Zo\MWR[:{h~x+c<-ʑgnYR{`e'\m!\VcWm!fdO6l X6ބQ"3A@c8ybdx&"uѼ6ő; x7cߕ8 aќ+! cV%,e|ֲ8Zo_ٞ3ʾg<&VG!~G&كQ<. yh<Բ (EG\mФH<;( |>pEY:^zwȠgiQJMKAmZ-KG|kEEqy% qNVvLq%*g7E(CBQR}xdV >c-C{F  'Zq. nd$e/ 9#\z3RiK8(`V%OQ؜)-3UiՎ77'+K艸M۟w<6f#XdTPq%xZ^%i.e|̼ifS:ļ5gY OGY 8҄ jNir?Ktm5v@RbUȲHGDbt;N@0HX\;Xt 'g d{9CU.%-`Y+EdwORp.GM/9e ᨕ2i;͕Ja1$Kxs]=2|9uMR8(7gr5MiGωLyY"HRI_W 0ꂳZ(K>UbʈLX TIa;es:t^*F MLpFmtdQ4P6LG- uYwWJ&Pa1,FB+Mlw$W ȍ^V̔jBFkPƭa'_Йf~:7bUA<a=NR\KkfX0)3QHX5 `ؐ3!\DљD})pZ)G{LS&yE|&/9SOR*Pt G<9/jyۋHI 7 )o͸1]k^Ђ9f@/E /M Z룜O1Q!Xȓo,U5lNMϏɏvovjdI5{!/wBL(sHU|/!Q1٦ۏ]&ku8%ʽuƥ> 3K`GloKPku#$*uज़Ib@y΅֒U B9n[#ay; EhIn?4.&9u|4b݋RČᓘg|3~7%Ieng3RXt0tj%ƾxޅ(X88L\Wb:#"tIDQ7pƺ %!I2i{ v5t@LE1iO~ Yp:OCl8∔UaDZUBU.b,PT<@ˆr!%\#Z.qNu>MJ ^d[oc2bU,Ux}MÁo{ +Iy+&WMh ^RZqS<>@_HnK>!`^g}^d:'HMXJ.u@xDr5a:汹5n88Xe)M9m]0Dc7#SA9nq>}n;huC/O87 6 usl| Dػ$7I2$.D}YyHMmz/UQMk/"~UUvʐ/# ? ݩ GL4W/Q΋o*`~ Ͻ& OubUc&njЌs+=S=M› endstream endobj 16 0 obj << /Length 1467 /Filter /FlateDecode >> stream x]o6=`*>e@6}Pd%fIem}e+H3t`"ѯ6W/_dYŋBE&Hhql.-^m+haamG;ոV6_R~j4m0I.꟫Ү|MWmGգ  i=Q1Es5[[YC~/\#$bNMC #0BW1BU1pZ-HrX'PZVMjV!>Eʧ=툗CD](M GSP9,P*Ȭe,7R\}M]'cLH~Xљc e@`DSu۱pq@=KIaD$kےLMN;R;cV"c%N`AIrl [F Uol{_R%{4NX-4AE!P/OC;*=)thƤ ;^8%;{{,xɫD᲼]!8&tHj.G#=0D&_aH݌9hs;FЪ12-c%VHE@R TR1WqQ φSIܘ^*eu \%4x׬IFK:p̷G#`M4 &>b4/pKuŜƁbH!qec 3vm'#ry'r5;I{H DV|^mgzXo'[V&)p5 {AfgwE7ndgWS(2j'Z@EڸԘ@fŜlbopgeÎOەUIU]򂃰 JG(>`%ÏCG%(ə ~é#t_aB:)iԤ9NnG~zlR.cyxbXL$FHlBw2~ؚ^HnYg2WI|w\Q_> /ExtGState << >>/ColorSpace << /sRGB 20 0 R >>>> /Length 2601 /Filter /FlateDecode >> stream xZ˲߯%wh߽ denX`# YUӃ1⌽ ~Ufe"˫wWۯommo~y?-N'N`]kjKkJ˛%džJY=Pceݎq+k;;;'&w_&`HXeôDr1mk{|>g]ڴ#tvy{JsH/[h_ˏ}OϟxôEG)qe-_x˿/}Ȇ?_>{'|#&)pw/3m_:,Ԥ5A]ԜдaAkmP = 9pc*z\E{0YF v* :Gq.B\}}Alðq [zy°^) 9cwvQXxY Rv,AnPe!Uy@|5{8d+Lix./'i'盖9deBpRƭtlL `ب&-H#5AQ0ljItevNVk;6W0VE`< Bc;6LCXacìZȤx8E5(DZ}]Ίh+̊PMTK'ExE  %,c¡Z "4fcPD`+rRČwl-&2"D"DMPGG[g0)BV 0l-+Ia{n(BJ6oZ [ a0)Be96WR>ܱ}e0)B:hRtlI"tcB >9/&EA"/&EhAI~(P1 0]:uA}pJ(jz^v ̫+g5]qt}M BkP+sJnv] uSr橯vQ^ph)oyZy3^X:t`IzY2eH=Arʙp;pDZiކ NeFqҕKKbyicdFB_E׊b0Hn*EoگFc?yz- B4G5+o?pW^]oEoZfͻ|M_(>ݙ> 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 30 0 obj << /Length1 1623 /Length2 8639 /Length3 0 /Length 9689 /Filter /FlateDecode >> stream xڍT.ݡKц HBCpRš-^(RSw/s9_뽕Hoff gȣ` ^~I __pǎbC`P1` D<aP @@ *) &(=!vm^ vaQ!sHHqPp!  D8]N]0Ҏ$/՝wxA; nt/ f ?x@pCu-'YO7xNWD@@{ ŋFpPD;! m*՟;qCC\~;ØUvJ0WW0>e z_ yA!P;myC!=qL8??9> S?7 ppp߿pv` v@q`X?O/.>b JwW;a?!@@@H &1BU!`;=\^4s~Z<{.?\#U -pED~hC>^( xh.`6Ą|# 1~g/( >T@TT[/( Ç!`r?|{k 8iC iH*SxeƈW t9gk7KsN53y;̨$8c=; tش&z8]u;j;uFt*["p}YA\EE(`tT 鞬m?p@![ ;Ӿ {gYdq(NC4| t步7PgmxڕX3$5:h7/ ,w* i#?Uyl QEzt#5&^T{?^26aE(IY@miR~{4I/L$tv.cl8L']*jSlSǹc^-W/5US^Bv Mڜϝ B']l;>hG_L.?z&AsڗXВp?:ѧ<2ԡ7c]@Y@>Sczߘe`_F y?11?T5R)2sc<ߒ^ / 6;>k^|Vy;!2r8&}HZ0[BiZrzU8rA%aqxIڗ[fC$1FXq7 V\;JLlj ZVΥes&<nxy uFӺ;dBhYba[?&ں1eKLT)@BBUTݸ6{.d[ P%`FmhN{/danEpD6tt-lH^p"O^]w\: C< x9^FVgejrYtt ,:q_01#*v˚-ʍ#n'b0N3_6ѼJx)ncs.A]Ea'2-h&\,BpgQXϹV6K'4jRv17=/cSo8짹tl^ " Ҏ9J^nHmۂ\ ATCk- ]w}/R .ޢZD|q53AR QG߬MruL*4oY<Ϫ/};AkwAd8#p5bDcA SX^E%fϣ9זn$?*.cTj⧘/:{Q߿mT -t= ;Si^CPgVFrә$~5DCLy!`QO$-X5DT5]a&m^\!<(zUнd3Ҋ]%䐁Jcf`@`92Ay4DD XL)S\Zkj_sobZ-#2AÁ65BE q|݋jP2hd8̐auj" l1ـ/.\C}]J>5wa:1o~և?3S^)ק 'JbA=*YR (4Bb˜M3Yˢ$LLd5//^zi%V*k4\wab߄|6Zl?0zU4sLʢ6{v{D6{3C3mJI@C"QGfެrĕ ^Id~Ubf_[\=܌ |B_*nS:ea<[,/7uM{QUFx~yKAmg N[x4,(&/V/wW| NN=Sf-6.=%WBr6-iķ)mUrL&Ll4av@]E{a52~[]Ò 8Xx))9ٷC\#yA/{ljݳ~xM D@?5 Q:f.ưi~+Vvs|g ]:4*شGTm3@g:Y1gyמ3dS)2^33^:-ZT<35m vaFp$ڋp ,$V$[`|EӁa /z1h]>$Rm ~ɭ>C"Bg+ eqzt[ݔlrCY&HV!&_^$Wp8 A~5hXWMRGcB^p_8k ݖ\^q <;g—}e}ܼfs~PK6OidIRXḁ~/M+5w: 7S?~̟CN[Ն4|q#_Nխ\v.^{`d0#c݇ݗtȉ=9&4QȮB14e%VY =;V[9>Gl8Luf?}`@_Xp  yr|I]Sު0]gҹVqȈ\cꍳ#/} .7p5B*xjth5O *;3/u"(jRPM#A`mFܹOZ3Mn6odPma@ [;̕ %ICacg@=>':@ǚC*~C-#$.r!ayihי.MjBt}c7?)ң;܌3s?иEzpJ=^:s욎a ~`sPڶdqo1y^̀ȼsnux"[wUZˏlGsQ$EmAcJFb j' 4 Fdz_52hg!P jv\${`$U -$fTKesK~}|`Y`ڎvB ^gYXlSV3zs4[yb Wm.~%do6 %pHظe\vh͟?zFMISM J5lLBeƦߩM5qmhg?K_P)[H|ZˏQVHdx65y"20~ߏvpE)< ?8";#䪪p~_z:yY]ii]G4B>}NEQvM/4(PAL)!Ќf3ՀIm] ~k 4*g7Su*Rt^VeױS9`!Q:Mm:^4h=OyLVw L1guxvN(s׷l?,L%㛽M)qv; 8<䵪tu"dƭ9:,^#bXUc%e?h2i?֫dNgUk~8{};\k_]q y O>GߚmY갢ȓf#stg[RAi ݱtZx ɋ8qZ~9WkE#Q( 廞lfiCz(qlۤ[͇~` ^N_0(ǠW̩6C;˛~yEFhmfZij[I*^vύ]m('ǚn˯3נn䏵MLD+>`ږb k~b/6%4''"z%QH8#HY' DNP֜B\>i!c 4sMhISYn@*QxZhOrY^̎^8ne1 R_2jxOz-EY2Y[ʶ.yE$joB"M7D-c;BٹtqOc3fN9vHoScDѐ 9l]B2-\_Gt[1m~3rYcT@eO3Dlw[(l7X**yxt"HM%\rXjr'4AХ|ߠ_Q9T~ZXOҊf>tĬ3zΠFȴl0TDEyc{'GьaT&hѨL*,[u(I%5#GXxPw& ^-Wͷ3Ʉ͕vzߖHdrϋÞv+]ة /]Jȇ +EfEFqzwp?/N(2jjJ'dr,MѦ}Gg/^?W@Zs;Q'o^ٍ0o!AMN^/mO;1#HVx{fE?Vl^bFVG^Z-Y$ϧvپ>I1A,UO1YDJ[8 :튭Fj4ᅺiF|qK(. 7[h*J*_,):.i2<.'Y_v۷ګg9x ¯E暞IE~IMIg%X|;RSC5=<_Q$ۗդН,JOgRlQKoi<=7pS T:ng:"-w}"8BHxLE'4aY5a)YrKSwhn?™{I_$}ʗJ[Ƽbyr0̵xW<6#Ê:T靛-c EwޤF:ዐ4d|:LmSiNlz)1gH ElcQJf+Ãq"-+޳.r)=eg;8'Eb0"G |@A q:1#{ҷ 9G)4^JZuUUdm1^'?* /jCYꨫ+ݸ#;% /K%}= q|Mz{ K9m0ѽSRԼvXש)];p¡5ݖUAzSxL4x+7X}tNu MR2t\7GJr66(KiÈNSlz7s+Lj d/M~,H pz^M>{]jz춈8VtnVξzONkU7BzVc)&c0Hz~6~WWM[#ų(+D:p>7JJYfeޯmeZra0 WͭQaa/Xz:W.2QH|7a=)HUWإrF8μIJ|n_j$M3*_y_"i_s5*GT>Xp$22QæDLē L׸1C:FVhKƿi%}yR Fv:6au7+tij5Kaٶ_Y=26J3*!;PHӶovu]x}I`ћ~~v@I|-Z܋.ZRҧ/%;jOѝa~?g?& ?}jҵ+#5O1lV_vwFgɧz?5vQ ;PgKP[LsN_4y9ŤKgsP/Z^T1iI7Z{ÿH#g٬CozZibK ?p6TmHXL7i$Gﵑ<m ~{O(%._RԯcǯcdELdQT!iMT*H/ֽM;%4%+Ӕ>x2%C:#i0$LplGȬdu`6=[O6V,c^d^ l}"m2\w$ XTa7}6¦!뿡.E!#j%BC8k>W(B3Ҧvj{"R8>D.͛%-3'GJO-5~@p? PucPIɜmdfSP9' :;^a1}N,DzV靁iK(OR9| Kĕ= zy,2h>8X@}NLѴgDkiBDӗߒtܻ7{tAh2vՒ7julL2Sg1<,~4B/ۮO 9].VΜIqk?wtϰGVef?;Ca9@U< Czd *l1 Uewi-Զ\px63E%kvm{]DV^+UZw@_֢޾ ;'W?rk~N:( #]fmb/fNhCX"OˈsSOi{ffܜft(rgvËp*ty̫6ƁD%51*gx awWOho#AڮUl@7cޑ4SKF7bSeFYkLXʉ&2F?κq8J+ ~lb7;V9՚l{%Sj˘ D}Ŏ[!l掩%.lQlv:;7FZҦDS> stream xڍT[5 ]tғ{ҤH !@(IHB/* wPA*E;z}}+k%3g=g=d{h(h!X H @ aAHup8! e4 T kx bR`q) ICD*@GaH8(o4{?n(,))' Cá@u^ P8 _)eX)q"r<O8`0;W߭ pᘿH{' \.p( qGЀ= Y/?JwDpğ`tEApi b7A^C< p5O>rah8 ]~zUvHWW!]  ^7uF =Xp6Q@c7"7DAu^{E!Q6`p{/`0tEP,G;5 ˾>4 `ד1PLMTRBz|B $"~<!XM=;z7Ꟛ=dkVc(z?UVㇸ]f\K{=:a@/BAp-i H/Q{±Pǿdn{\C$w=ePksͿ\aov=T]*=}Bb &>kK S;u$:pݳ?&}ou-Y "t@\m A0@ԿMk U7n஛s`^0()$T:ĩ6ZS`uD'LH`ۧ:nhbFLs/XʩKW8{~zw[PUm݁6~dy3KT%btChnby;>CNr=8%k;tTB"ݱHhV25ЌRX^i|mG2oSkƭ*KX7QtWd=,iw8MfnvE FW|Y8`)Ǎ)}uDَ#LQssK/{xGdAl W3/4" Ʃ^|y+TKpQ=rG/qdOio$>iW\oɉ晨aqD6HPۋ}aFY-:Ylw~*1,?"l5egAҘf|K I.ܱmmА;P?I%+Fubu,L/5!.$97f}9*6O"P&5>Y)xolrwӆZAًWx^ruF 򝑮nS̹H&js24LfD ?J/z܃j=㝝ChSEC [?'q[jhQp>|f Of RkQd cЂnY˝;7B2Q7:.|EMa<) z$,EV\}||5ѤFGbCt„,pҡޕ{tF*G+Zk2n`m,+,[.i 3x'V* ڶ6i!2 ,:+%F_ly&Λm|0AA&ɞiK㬢o`TܛLK(R1A rP7{ți0_VSK]Mz(Z̘5De^AGGfMwzR$?BƉj_JH9nGd:w$4w L=n'msGeE̲-ANrεlf}/Ӫ3:.FLoޙ0sLQPa?KV@eOKМn%W CGcBC PWz`L樚O2GQg'.˴b.37IS `/礪soׇF4ZÎt <&O4ҳetZۧRMkYP Op*Hr+lz,-%{AZ0Y_0?PnDԙ;ݑgޥ8y=Fiȥܦ=XKwiOʦz4n6[ZpT%ƌv;=o?ѺS?K O}%V54"@ڶUdȏ/~&LD78ٷtYF(-o8j:q7+Wq^ڳx#/-z3Scȫ56Pkt!,D} .P'XBTL}{`qQoS-?崟~3X'%PJ3FS,j;.? \x^`[:&eߨB>Y%ℓa .s6mעprZq4hǘyeMZ(Tob +/)D?ER xiRLj|rѧ[}ך waDnԋ/زѱ Y௧yj<=UR׃K|:RW+79 HqQߤhS\#`w1%&$q?ykw HB1O JT¥6-J9ykݏZ'9 `Į*xݱ?#I f/$\}>|{qӮSW}%#`,~v^Yv`?iE䀍J.ΣgWEb?5*-%$ n>@9Uvox`C%ʂeM瓀¾u,Pp3fN4r^W؅f~fdMt/ozfCx$.俏NVV1A>O?ACΆQg?qЎ.[U'+mR$ґ FiX>]Ux_K 1&!یluT5uw%wʽ&S[\ot3?,P՚,#d+f֐+<:402ņ% ?>;EY: M^V !KT}*e;z񱺍CD&ݷVUn'v_]ytE78]Rʧ)2O4 `:-5*C;j]k4T+8 `D_6O@@LXJpw`c,9K}?B uNHH&_R)7P-FQVPJPƀ{ҷܭdαڬuPP4'5C(kmԎ/T Ğ쭋);ĵc"?Q8 5EǑ$ppM~L +^8n'Xbp~ RM_!)W4zLn% 7WJB}s(нm0,FuR>[SV顴QS7ϊuv&) :{^k:GZ&ZFdۚO~d W#+ qgA\F1~bl伈F0}PWX_\> MW_],oP aDRki@f֦3gqq#ZN 7r+0k8gP#*_4؅PQZ;Ցl{iD[*2uNսM 5WO04y gaIu Bh*eqVJK4s1].nBs]0,dPwq8Ulm;6 XeUOִ33"я99,c^S(N/݂xqmrр#EҊ$c>dB^>(ּT(v\U·WM ēF@tEkՎbf@~يK9>9$-I塲ƹ5y{ G)Kr sO\k٫$ q=0EaIec^2o{ֽRL(IifYB>T>۪ ~[,NEܾJ.BW"{ѐT?OJME8t>2B UTZVAu) ; <|c "M;o>֗٧{`[n}q(fg9MՈ s6Ey ,y y>J_m޲͘ܯr5Z.~l]z=" !Zj~Plĥo\Ll{\GyG+T8_Ul.C ry3h`ip?ݣL^ߛi1CvRפ~Pm!F7)s}RR⾸b>e,P{=Sյ)L5d$J"Ix.7wYk:5ev]奕0CǓ@T} VOxKV^gji%=_N( Eξ+ǣP}t6CAqAyPC`F hel IQ(lmx5T&iW7_qfCZ4۠:)Oi!i;4)J1nF坎O3I\RQ em;p\-L23Ꮟ u$^wQ@d,?ϳ2i`9v6i L_#[I'K$yU:`)>Q ?xթNڼ2p: s3]!`-W;rJ<^hcNkGSOyl~4np$ҥYχɭt<|lU}6y&X=x50nHրKQV٭CNm[[CzTGD@]CAgw \ [31|9-THQ't:VHW!Fv}Mn5I_q֍m/Np';}_jIoxN4aݽS9I V$&Jmr__?'%$H!zQOKPDPw_,&lfSuϧ-8|vz|IR­~3TT*|YSH2[bE;&yRW#Ojxk@wJͲ =YUG`СIgCj"ܓaը~]6)گ[uyQYQOZTnЏ" =uibxc⋛xd:! هYgic)>gb\DZĭO Fsf/39# Ӫ6*jJ+rI?RW&+U޸< T?^;,fۧM> 7F\}Ch\Fukx7tvd2aF@v~eU%.`a6R{?FT@W{ELFkmME\s+ юo >H{24e2}}{tҩ(=h#o۹¼MJc6x(ד)Meih RU0׿m)lb O_PM)$$pIC~w@9ݸs#F<M;7_ a=:Q\#s;Mr> stream xڌp.kt2m۶Ķ5$۶Lm;'kYs|jR"eZA[#-#@XVLGJbdT hakaӇLN l`d0q1s108ց bbaHHm,̝>G1%_Ak @hq@_f?Oebkc_WV;脄l, Z&V_C4 6ο(DrPKcj?C`<_KhQ]?_/= h 4okdYP-J7;CLI@Yp'0iuGV`:5NE^$D`]?>gZ}W{/5-?H9r\KWFCؤ_JiT#ufIs2氉haP/ݐgofP& ~PyF1xjm2}X+War!E":LZ,.XXtk) BIZDwȔVea[2ɸ"@ۍ)iBw Ǩjӏ@sa ?4ZkS6L9]E4?k|_Ij}nV/lH%j•Y4֥DDi[ q;At9k r( VlrF?./q̙E C(rDG+rfK/7+0DJ ebYH-T[>rѝUŰ)FЎ6 qޙnߕ a٪=^V Ra֩(".Vx3 kLEȅȺ)Y]igŕTR`I_'kIwQOmSmB+_;~ )<~]!5CiUS fLAFzKf޼*X&mvq:4 !oT_B.S@>i!D[S~\ƫӥ J!z ;–5&h3XkQE:I0'UrSKIic|3G>T[ MY4(emRI rVXjDʩד*ddܼ^u}؂+k|o0w[E$x)F F/w#a젍#?4akLxlHk79k^ edDnfoig#TUaHTz ک;wl7cR ?}y"4{ꋺ}\ +YG,MhO y^Cp*13=x|ʴ4ݪ40e7 axf R4yH/<ÌZR% Sy3m֦v,pl8aGzt,ި#^j'Gc96%;t*lx_t<1%-K, 2}76P*'q$&r:iwLnD2&ӕ;x'>jCB57OgD ݚ9$g~}?1\ַtmK{7濐sŠ`M`JbA26Wd%'3UŜؼC䱻/rOdFp9k H.!bc>& U#RdH'辜8z RQ.5AJe!}RsVRL +J_]_Z5 mĠba"@A8<mcQT(v/|legQ6>@tߕ=|g+ˮ7t$g<ɡMN%eYVvaR_uMܺc"R ժG&.@2bUyh&B M,jC!Cb[_{\C- kF1 QE%08Bkk;&(Ҁx?/`ƌ+`2偣:_5>UH@U;Z-K=hdV: _Ȍyƽ>6Z)O'iAQ6Oxlūû)@,$-cSYewƲtEQa\/GCEFQ@綽ZAsh QY4$0y\e2=pt\:ȉtFȊsHX .mXJF7\H(q ]%;hx['_Q_ $e`[Z,M;eq yJe1¹]igl91 :Wf Ni)/2SJ倸EFkS|v˸t]pP5XE+V0P?g鯶$7o]Q"X5M3r8];S,?]q_z OٶUmd1$;ᠪ3M&mެD56,Le~N*sFr_L æYSBϩD}1Wj8+' (HBPͭ3؊O/T<9 ;hAh]< ш¢jG}qb }S($1S ZQ;\rC3MPzkdL,%V$LhkFy{Yh#cTbk5a: =xbT*w&y!ʤ*urU0J)i/Chg@ O7pbo3ҁ]s |ZȒKNy]Ŕ}d/658G+=*5|g7Rmmdr0a(jMU4{J5l\}M3Z9<3ӅY1Wm| CuپXmeaL&Es|?wL@Ji-qMC7>C$,Le CxzAπeidl樐lBB;sW5>F&c 'n/t|ý%pKVȣr$4+䆉e v!W0g..q%u}O VS]YwpXJţQy,ab aSX|y膡vX郂Dp61K=8<'M4bf֥- 2m3cVR;>&v6GzF37 E$'>m8qf.B%N]6t'kJJp#˞;>%!=|%!C'nu \EU+h*|-7r OD? +j@Il :IW-i~-hQIfտSeIPV&1"RSO?x ='s ;ʀzXZ(t ؽJX/ꧢݏܲ\ʮƌdž+(nher[]'Kct@Q VE{%_U[.3?qg,:;Y3iXp,OFLz0 +Sw}S`!)33I%.%XQi !h+[ɱJý({W %+6ZfXTC~%j&<͂JjdHV5< -J)C1\ϴ#j+Șj(;d4K& 8!>BLai`F ŮmLQ= l කO÷<9_U35r٪, rj0tjW#͠i?wGD@Y,=b!YgGڰBݽ} 5z1Q%dbф-zSoĴ_;%(䦲Sгꪯ/w M͚} Qz~ cD0c #Ckǯ|lK5 ~#Y.E^!6gM R~o;U[ ;6հޏ=E84 -h3.I=_BQ~r*͍̼ؕ'R3A; 1_Nn_]PǔwzDF_0s4o*ĝYӠ #g6F/6Y0V؄?yAQq? \>,MKqAAJ:_3 lhX8^uL]Nj:|:㊎Z6!V*_ : ЖРSnoOpj9(`sJHj캚 5joECHR$[~b)*2n2'"!:ڦEZ5~q7ߟw ؅7j Q~J1vX:̆wN>l`xZ8]5`sT43Ԑ!cJ0 r`X9/|ϻ yB:e&{2 'RVuDj_P3 1|c)˯=oT#[rF+AİQKESffccŲRxz4ךK'Y5t{bX%RrR'eɪg>|)61`G"!J\A'^52$8to  N<.}7eJvl8>.8̾'Q I n*3]aZaTQ CB߶HPAt3(o샛mV ~Y4)s x8&tSͦ{ͫsAЮbX ]~/o.VJg2U+@tt([u _*M::FLݬލ݌@r͒d*c+.a~yd /ں[ֽ^8I; xoirH1{q"d$]B}l"\*2e?6}n/ì`#9O~i+]~/KSr&W)z`tE -^"n':#g,/u%bg9Wq]ZC9JN?>R"䆌4L Q[KT/!S6ʋ}2rp{Λu5e6MLH>z*Ӷ B3OdÛ9^*O/ 'ǯ^YüGLyYU:Υh:oDc\xWj9mhFiD z=ePE$o˯]LxwԴMUFeTF\"M&/[)ġO7C:Sq-Ϫ7K:zB<9ê{z?-[1Q$WQ6{7uܵU>&e\7amkxL>uփzuhɸZba&zxS#~|ʉ;ܯ48|i XmL2eP`p"?+XbAJ$HXrv^&51j$$Ŗ&C,;Ie7 7'2_nV L`smeoTVŽ2e5z(t"7r>~++<$,մ* .+oXk]` rSUHsviq>0ovKR֫NA[rV@ϛA_~PF~8oa6xK;~.MQc Z2cF^(,xj}v4醸D]ZˌSWbI]bkU.6_AOJO^6\y*i!In;WK'螐weT;åTN5cb;՚oReݡ,ԑt 0SAfэ,uAQsr[K1NzN+B<\ swy8ِJ% ܂*- .VbGmΊ$M_ p4՗A~ܷ ŕg*fTۨ2Kee!~ajJhW̪"EҰ_8\]Ra~XS.~wwe^n5fIS3-Je3+{4A vn&Rk*f/k##tKxe@2d+Le Ze2M*=?ۍBjB)nvWbj$;iԴ'~ \o'{ј4_ R:KHܦ`t~ɋYu j+w,'?*v7t($&+7[b9ouD Q|8G,5IFʳgL?!@_bSVItU_w3|$4ژV;FR_"*.DGaQxfڎ*t>nN6G3"b{4HK柋NiC;  I$-3ia?ދ 2Hz*Rzkh޴*I^}GֿlJ,wo FK4힌@j츥kd9Zr"[T"OMZքాkQ,eH'3Y/WhUEң #Xקi\/G>7Tmub0MGZ3mk4Su ҫ欄Ue[|#4gES寃z`dE%'k(nLy $! $@'D];0~ ӽOZfYFgbSC6rHijEh,\[ЌsY'ډA]dg) ͯ;)i ^^ͮ807KؿEֽ.J 5l~l&œݜͷ#1rQQ"Wd}}&Tb9d(WM<Ǐ=b[`׹2]loznSɺb:dsٹsF4$@e<ҫO|<}ƚ˴cK $G+ kwC\Jd*Oߍ# ݩNCv #. )7Ԭe8r86񜬋aT3_vЄ"g9%Ȉh7wrOg$u>F?xw tTYxM0:0M(YP4ȳX{ -x:kЗ'azJV`>``Po HǤͅt2jH>?VSF~;~ujeUajgJ(0ΫֲV4/ ۄ3w#tscPna`{Iyµ] E=7+j vAjÊ=# 7S0nKΑn - R5шi5c7|la!'YPF i*)g٩dsm 2Lye&EASēP4 YNkC.VÌ6Їrاz.xB-9-l4h?}RљLUG5ܳ9US%hWe^DbrIdonxH)iiLQue0w1(o^Plš3a#[RƼU|z-[x: 5jGN\4%kC̥S{P?xTAC2k51ڶa.v.9sе%4]VY=iL`C}eE(ޗu. @>a0=vFGR/`JWkem6Z`[ *#n +R5\?0dgJ{Տ Բ=Lpowg`*5h; Kx[ kJ4uյ!1#Y."@ 4͡c$fhZZ;vцslҷ^An :)44zHDׁo3W#f8'Z5YsQT>*KؖW@$*tОgBrMDkJQLʤsggL"q8é*`b u7/V׆ᘧӡ|l ;>حZ=`eF7)*, "N_w??E t 3.&搧7)%.g4pXѧkIώk$G]Z)?@*xbt \Ĺ"]w4ڱ5Kk4zf~OJR#B3D^O%\_Ku΂0+Z5@+E6g 57^R{P`'_ mX6|!n1&p8nG.M5 Qbd7?5Uٯ wEAޜ qH}E/b*R/WMVO#h2*j`P(c6>TsRls֭eni\n,q0:Rvb]H`ۜt3]k+?M@6.T'6Aly味Ri%T+s8:G/$tRO!D,\f=_wYxuL庻DMxs"Qvƙ05Dv PSLH&T pɈ3z>Ah Zǔ̅rMv7&r7A#v fD[?Ox֎`ȕ*\u 2%W+*pSDD%9P:eEekYQY :]w.Ul['so) AMS Tcg7u"{rzy$u=E]5*xfN=}5DK X8zt/VUd>|VuFU"^ƚV_Tgk=t&<\\xg>>a',]kSR5pAxoAiuLLZw[G@Yoy@v+WEg"s @M3(%pӌƊQR.$c:3M'Ks2b%|,BMd7M`^3&ߔNTr_s4$_g4]BgyT+˜}]/ aEdzR4t'ή =1p?g4rwFmq&.7}%9/Vl6bp2 VѳS;Ty18ˡ dZsv9FRrŽgƕ5Gƭ~5qUJˆ4k{5e\:KJXDT $NivwM?6*rBDz$prHޤudp3vX~tzIDK.Z4dffJtgE:%Bq2WŊ6ΰ:4+fsx%@鱨{3ֵO6tՓDxeZJߛj"a=JvOl"ۑ̝/vrR@e.];AGyq}ݴ`nIq@[i*;jUaE}7RiB针˃| 7jbH'gDy{yJ~`e|(b VԮXՇ!'y&=`Lڻמ}HnBQIOO n,j!kWBAvBĤt ZVvN3$0vwSJ@}>X}{z9XB-s|5$\D'>,GV qNE.a-^oh-rQSY)rU# "χf^Я3cӓl[|.J Sq{ew6LчSTkSMA'pS#:EQBE?mBp9ޒmgC2+I`EdG'a0Xߧa3\ȧh_MvKfDDA8F߳W`.߅"fS7gFKsS.T;/t/n2^6{"qsQ[@qtcE4use x*$]n,tp⦡bWސoʸc%bhryت5;w4)ܒPݒ}*Bj>䂩'? m9Pqq?dLAT"|} R|lUUɷ/lm@ ADmPy!"6HJij[3dBWAL0c$]wZ0XB%isH6󏽝ChD< 5Gp(xr^4CwE\QB39-1E16d8g``4=Ml%bH)umI `ZX^W_lj[x9hnG j-U_sy7) r$"L-Ōs20TN_R [+7B q ci7\֧~7i]! iKS'}TRNU"+Se^KKMr-0#}') Z)"xfbKVX PLIH.@3yQX/+e.3.F :ɼdDwU1ZmWD?a˹Ko$~o^֧ DuR?j][X!#rz4Kkglt|\=;g "M=e_!hHcÎ ($ gd=)ͿRIs_Ҕ=wV{Iulw{}Cj)4~n$o59MQUZg`k" yq)_1SN!u^Mn BB 4K*]18k󣭲ƣvLș@Y`]Q;"g*hÀ RZ%8O٭m~~dYIS2,&-eUkIoB|BoI%4{ e?AзEEr[k/RwT7Eݰxw;CƋ9Q΢V߼D};EFpQֵ܉4i[yA1~Xq>/=Wa7 X98wɑt>J}E 'dz0~/GzYN T.IG@^#S i !X-*@b.:x_bUW/.g[Ysc=}P!%1!Roqk*?%3`-?ђxg)A ]uo]9CB*YGnlMqsuK#^"=wpY0s?Rr9 @L37.ZE6!Qe&+3qHʫRԠաx,} Jx&$hHcxi0&,CvZi\wh YX{kG6bnP_3%_g/To Gx}#7nո戴C `0qZ4['vNuzb?} 9E(v*0@mACgdq:}SQ6~,P,.8~ƔZ a+qn΃uIpZ]&$G.ͺRe%HU=//U5_jz&er۱mc ,t]b:(7 .vۺ*Ξ^H{G m:T^qOo&$>0iZVEW4@xz'-wG+c0_qF*FK_^ʣ6꯷>C`B#Jt|;;罱I6;=5aįH0&n3|Kpn _4Y O D2-;K{a1E5A,lcҶvBm 5e|@$|dn)S94T18> ;+QG;ogX(0̂:n$]vP6N)cNƶZkZ:vb$,n0xpQ2[2a5@@M(TE()Zp.ˑ<5b~hs 7OF$.t\}}bNHK.(XD c VQN꧈u!XF*F6Wd5EB.$G,1 sKdO[ _';ѷ<<*ִ/s@kPΟT3S+=M"9fG=d\B(tH791%mpE_hIbkeE(wS߬uxrsY l@I < > 0Fk'^_a0S$UK k[cxrjF6e͗ZOqvқ{e=˘- $Gu䴗PuQFNuJvI|۵P6} g^F6e_gj9#~GY+?%9ٕdA~+bu*xKLF:? -װrر?_5, 涃P˖=f(xҽ|$ :5ǿ玬&b)@]=է#HUٳr80J9,F '5f4)uԓ"c~wL*sdֿsl1 ʆ/ YrG^e*y Đ9pSKq9=]#L GNٵrppK:?V6ҙx ӕAR⋐/+B!-txU;k3PXuP.vU\Žn ׶h_Njv 2m<>Q3 zHؿ(twEˌF-A^ 5G}6V&=gx UJjVb9Ұ} GCO(%qz>=αO&T-AXkb 1ux3;Bמk) F='cO8P{Jna,I?n¬=>ZX(2ȜGl`q_C%Ce5PєA(f(Eݪ6agTE:aXr@dyx2bW;CYfߌr2pUI! YΧJnc 5 endstream endobj 36 0 obj << /Length1 1752 /Length2 10696 /Length3 0 /Length 11810 /Filter /FlateDecode >> stream xڍP-wwg=$8\A9|7~_^M3{ݻ7f@iG+3; @BIƁHMijnjH 8EM]_m<%G@ ```cp,4u(A@Dj G'/1@gN`e+ ۘJ@M6@Wvuu`e`1upaq[3.@+ o#Dvv+ heBjZ_c{=v~#J+3]|o:z|9~>>/7UTMmɂOw? vZʎC q6n6?ϓW߀VNH/7_̺ο7U*-lWuAVFiO]ۀ.6_3;n:GJ-~o7 6Bd{$nn*Z=a+ 5ZlVߦUAV?qX5W W?Uqƽ> ؿ_ |-!JX rXm_s_Ay>rJ_]_skX]=~-+Ws{R hh.jyW'N;!ہ8;8HqYSlW; GٍUΣ_Ƴqre,|aWmGr9N+ uY<>+33OŶ2$FD8RMy﵏. I1Ǧi|})/evo9y*߁/h'Ybb7e>'q坭ox]𶙹0$ۼ6r#>4z42D[5#H iP#Kv Fװ[QMHں[6xiz͝{Dn3c]8썻X8AQ77 ԵH"16摸Qfq6" 6!t x EƮԪ|.x 5+3% %L^|Sr԰MJ-}*~JlQ<7SvXߟ҈/>}Q) _ΝPx"]lFG jϴ}'aQ6#^#׮0P"/NAu~ Ce+M/-ج9sx?YqCB އ[O\ qjL㣄YTAA,):3\Pm yв])K|Geouz|=%O#&E銌>|Eh%u a[+\MFW𻗔䢳_(U 4<>&N hQxq60OV$JU/QIEg?Q>"*]?\Gl>'X8|kԳV ,!r`t͜>iWqO-U+2uh|@ *A^mcQr8VX*+,a)<&SE۠K%lka}ɯh9e)Ns%ߜ>H/5#s[)<3<86 I7ݵwRk:#4E{%jLR2֐D\ߔ?6#V>/"p8#;5K/ .dNaȟq2kZ3یi~ 1c2 $Ff hڸΝ=Ф Fh9vbcdFFpc~˟ڧ7/be-Jsl U|!;ZJ!Y֔ eY@]foLľ !XMvPC5ޑTb%P:PChvMm9)[&tLE H|ϔX&ӼU"(p\`'Q)>'0B<7܊@p7U#E3AO bÕSK%Z+t?'#+5$WM]GG{6i_%^\IS&=01a>ʘ6hsĎA]Ma~"^:cqyrNX xՒ1dXa)&X&s{/"j=4mDC5GcmޠLԞp;:Kg楴(GxL'F+[{B0+Q„(G tЍ3)I]4,~Ŗ`8,FԽKOyQ>cpk8WJ':haȕmNuMF\w@c$9 #@uXFhR,g~8qq(f@+|88Rn1^0@O+:[#`Ly\8KgYGhAޥp^ԳÿWQ3 ieGlFU}>^ig LZUV˕2nlMb7 +_4@UAB.ܢUNnXmU˧{d(II&ncaUZVR`ZUOG== ğ̏2G',B,L"ŕTBcÙA"k]a )KhFfhfX *R܉(Zk=DscTN9كG$ctJ˪cUF\%L 7q=LdFG&JJ9o:cGj̵DWTl bd3&?4E@P!k-a~f uJT}i/Ra]>"UQnx:m5=m6ᒬ|&7ft[|J-Rf. ?%uEKy]0|`ԏjzch惖 WwUMbR4@6}|;o%qc`CLcb$)+JR]Yɱٺю ,A6DDd05TowA_#j;{va?12=NQ\pZ.fVIq̊8kƜLߠ lO{^ $iN;*dp,1l2DS[ocKr .y%b2]Nh.b)>qΑqq#ZG%Td=J/iR\bU;* I 3}-)6*,RfP.oț9Π/kű)P PR=a} E.%8PE QdWVk-~P*ro3qǝ=bxt6g?890ĭ^K+QeToB$4z(X= U{7<,֣{St#F#p?UP rQئEB^J!%>5s0mnΝE GDr|ܸMw 5Fb5[훣9ִ-]kɰQ~|fH(#W{ܝ٣aW m1!2=X &Bt8XeX!Azώ,e5]d!Հ'"_7Ba]bwt~9Q{pHJ&NsE&ޱ>ϴ9Q8Ɉ_~ ~KW^۰%)\s>uՍ} x.?QYB]VK յآ{Vh8 XF B^*OijU >ZӫX.ss<,`cuniY}#M,1dY<ހN%N,.0[5ke%URք!6ا)MBeE4ݗ%UF[]CtCSQ?"SQ#|n:܋6C[HHԊR]6:+z9]fV3ZfLK"sF,\UDcCb04?'P}[:]K]ceqSфb0hk!#KCb԰v@=-luNge+BaVBvh&i}~aI$ 5gw5Mzj\d{B8şx;T9pM= ݱ6c}Jiu|*yگH"ZNrq[ʏHYⴄZ)(Lx-\*Ea7i$,[/y{9UȎaL;8*aYl]MxPBddPyaJͰ.XKڧwMԛTjYKdzgEЁPW7PzG'M&K*!XJ!~f9dJ^J.We:Qז&$ 'Lo5, tMWjDNٍ%Xڪ-`Cwvbq"|9}]~0H+!DKzt)ḚVc *]8$>Lp*'Py{ &cWN0pd#DZdְ9d֑k"g{%Uͧ2KgR).J`i%6:aD2,keҁ{0_&&EY^97 *.g(2n+2S;%b b\1pֺ q0oIiC>u;H $k G6 k[G01#l$(= 'Vʟ$ğtSz4|?oep*s{SR)1k + 7 ~0RmD?E;yq>6[iz9z[⼲M1L}iŮ^/-(Hud|?$Z^je<" DC!.d]bQXx;xWr3wioitC{~\S'ѪzGSU1@i3K 3:~o?6XAP:@ՓWUC !MԬ̶ņ3c>̎q^}EM]Ԙ;""L4AZclvV+%SPOH{wNR恛w!ʍG B=x6t킞 cyWq ;Bm.s}γ8cKszX _x!no7pȓFطo7NVx#14`Łj6ϸDƊY4u6]1h*_9.I2no# q.4BXе ˯\䌥oHFCe֜fO4l/ḸhSϻu" |s O4.SK^khkO;!2s]$l&JΆVK# mzK{b6 vE0W_EX.܎/u~Wz+|GO/m'?$V[NP\IxoF0k7n6/,oe 6ߍ3$[bTl7=6D+s^+dRhֿmXOԭ#;t&MAKQ?T`.2[˄R:69=``)Iи56C SR!0ipm֙V-h=(oӼX(z3DD&wh̍ùq.$M^c(fPV4g_XTC| n4)tT :yʚ F+ Y9c/оkYip0 VH2Cg $ |(H1 `c&FG gO7p lD2`/R>bzr8BoevPBIy+v?WAMFc&uYXMML"&b~A1=v  ّ1YmEעs fEXW]vJM"2[~{-=@%fQk*S[(etM9]tt|6gBlyfkX2 iRke-n.\Qn87U;'ydQ1~@QUܕ'u <ᵉ'B+ae{-x5*[~ddF_/HOdgWΡ`e|w׍k糓v𝤥Bkj."9r%Pv"n(wLJ0#@JuA_cP]&J*inOMr8p +kY?7 0$:=QfH m,!XXGNKć ~i7!s"j_p]zӕ*[i A#F Cu*3w<[AIR\+&x?މ7_0'Jm5"JYn QY S*OL?NB &Kk4eb“&\[9V`ܵ1~iԃΛ|՜oI_c k@ig[Y+]>e@RMS@n"hNyWjJy0Ey,R9}~"akNT3/ #!S5LDNEY))l<\j;vZg0F 9K~KJ yzϗn4b%#yRk=yI~/9KTeҽkZP˱/| Ȗgku/j)2EB[ފ!d9D s?^(Jq4[:$ 4 0=yĥ(tMt()bǏj #f=?׆.XX6:z{ <˛S>R@FZ&N܂Xl{C+ ʡC~ׅ~ț uf2$:\션SG[pG}|HwA/2GK;. *V vVD= .+5ȡVVfϥ?13[ Jv )PhRfo+ Gf,$uCWҕ"K? @05tJ \??KpFb X];%q+ μXڤy~i5FdF;/G$1FY9Lf#,ymu_2K.^2M<.cNRnj:o"?aui? endstream endobj 38 0 obj << /Length1 1603 /Length2 8829 /Length3 0 /Length 9875 /Filter /FlateDecode >> stream xڍP[-LB-XFq wHp.KNx$̝e}{$UQg5|JANL,|qE5Vn ; %R  4qzI8)B9g+;@@dPdA@G$Jq5zИXyyDm S0@hFS:tr/ K'';>ffWWW&[G&-d P:\f LluƄD а9eW;8/) 6:^^PU(+{6V&lbj 3s ,04q䛸lL> % 0yiM@vNL -2y$Lbk ;9"O4};_'k = &̜5 {g!/&,NNn^Nt3dMndm~b0i2 y8N@/:!@N@ ?/f_@n}X~d"/3?ΗY\VFSR<l,^N7/YTL@WTY9W/SW.?߻A o.%ȋhh= ' 7M[7mb q;EN/WlC" l^Y'=[{ G)LdjXk^2qU,,{,S뗛E\WJM!f7 ``"$6NN*h8^C~(l~ 6ڿ߈l y)_2f@N3?/ 0;P9r_vd{av|i_s4uvpxI(e- h0 1 l%peNeXphsGD[p-icyKJdk|Hsj˃QN w>"DBF ]'{O-?k误:(syTo]{jJFgwTw+K&4#NS~ȜyKH@u>}u==L"GuCo-nJc'>["+ *$99/MLlyOraHr4;=Vc]Tn_/8ӏRuAn]Ͷ!L&z3Gri#,_ã8$ iez18tZI9ԋbL ^]RInG_IM20B8omNJGP|\(z|{n]O-,TJg#ڞ7S 7ʣY#V6X-'jK{fomru#H5[@.ޞKDœ,1c#JfTO@v{dF ɇUop\4fjP"% ;#n|-LՎNm}3i}6jߕuBcUJ3IZOH֢5xMR=&5+"Vx-}[W 6HeaW`f3N]m*T&op$+36q>'yK| CtY`Bxi0H55{v8N)lt:G,ZxƆbr%if~6sFbcj3N-!:k4: _^&;N7WRd]s͛m#ƄDl_U%D |"d+QnԈ8ge{A`oz|w3X%5RKk_,k$o[qL3~ ^<]ZsB\UVcus@zqPb=XMhe &~ǦZUDjjL]iפm{VqfooŘqP\ouniET o,%@u]  "|v-QvتgU0ZAj'G#yɩ 6g-"ۍqrVY|)^zX bb̕XGGi[]0_#=톧Lr 4ԧۿ%8'D\2]?$񻿿,La>yؑBRvCDGwyfnBj6cctqPZo:6r:Dnc?˿U0C0[9!QCR6݇6l[ UULY_u ƅ?V3+f}6f{!,>Ch0δ85V@+]OYD-b1>EPV%yA?BЦnV}n5C77FU{ڝ H Hb=+@{)=ox[[x6gLƮ}Q4V])ä?dG{Bw bWLn50diZ]"A5HfL tXnvuӲCt:SVr@# Fm$wՎ j-9ɥdc^ocI0 :թܳOpN"zl;NV窅GGugc'r=+^ 1aik{ E4 DljLedx,6VZ͓5@o]J>=KZ)n?WcfVЫ 0 $q;5/\Bʍ_\.\'4r647ؤa|e(_|Z(_6BGHyˈMQPJއ5cBɱTZ5ĉDjeK,PNi2TMG;gWMCH8}. Xy?:i[[d%6c!6С [tP~OX ;,zی-TN{p,4m;IsG{VƧ_٦g 9{.Zn`e?` sktzcj<~CoQWFؤ~9"pixKnfCDjyGߺ,ic-%Bvgz1mN+\:k!qv]( HY4]r O9bQBwR*z~N6M󵮻pzBb# ֢a,$#<_cpJM>Y8?EOn\!Mg,IΆUҋN4^1}f+,ea tv}e'ï,|dj\.<-yl;o>@h/5EOsbD]̶o}y 8]L߾*z1tՒi@U]66٩k$肚"D3^CEOصӭ1!˸dnV@> ,Z~R6&2nПqA3uh5%9xӸh 5Xk։5 `1ٚ㏢+ZRa&6İ.pSiǟg{ ?ty3^MنԔIj s=ٌ4P>b˫јL$gYnG'|z~Z#Z>X⇤,p O)C}֣D?ja%$T7]B# $# Hm WoQn +'38!NZYʬ֌gHp}/Y!yP);5EiI_Z g}һfޫȓ@ _|_mCS;W gu2 z[VsH>| f#68L+8R p]\z^Xl1r@A\Ca?(? Ed md O;x6'n>9*>ղek폲P̂I-& ђrJ'kF݉􄵂7jOx5sS^ىYǧ]#j+h 8Zf+1JbDm1Bs/n*oH{em)oםK}M '3Y`J˲J'?l?7ze김hthM¸^ռ.Md鮄F.J{1Q~23KUX] ;g)FSa~ch;$h|ޠq>\<n-kQFĮ~́b5鍷ƶE.&vȵj~%1 X}Xr$ꁢ7RoynW"XMH×/o.=ͅ}I'n=*cL}K0HG2?\ե*lf=V @5$0^OfeN~A'm8mA~lQms۴D3P%gX錓GtU7Z={Ӷt~RdZ?!I\\w! n]kI 鲰J~OChyѫi!̛F$|!zf?XLno?HUiOɞ_ Jn}t2~z8T|2) /En.q_*8-M2+~łzNes/@X[ ߮@Iᇔ%^oU վ|8zq&S̳xgk`DOYX@ś/JsD݊B.Syta+5ۓiBK]EP#TikO)O;OÛiLaзgVS?"Û;1$pdq8MИj eUѐ5!s`%KH,"=ڭ}dMW$,JT\Ki|8k;uMX^Wf>w~u=dv*[dA-7ZajpEаZ}ԾO`x1KIΚȳ}9!Z|UĬGˆ6'ta<|ĩN2r(ak9h1a֐x ߧS0Qf[%-I8[/g/U^ `>WytE%HE4[fYw e'9v}?1qI+4i3C<&2\A|ʟ"k}`*kޠ;EpaH~Mھj:^Uxzիb=?Z?SJ8R !mNe'wh$,iԨO!S2s^Ta,;uW~fYI3L_jɹ?p .)rJ9eAXQ,i,*'**V?#-*v%CQGZ0z%E64j٭#*HqH+,I4î#F|`|lS H T41\O?ؠOY0=-жK!I a$g@Dn@0gENw)k8Mӊ~^ADeTJZ`Rq{rE㳖TA)}zd!iBh6aa}v#,9M9VLZQ臨[(kM:' X;{Tm<0rq V[X_ͪ4\T4U4:d XL >@/\ obվqIW*&k)Onmꢺ]oؑ2¯ k% $P& )MG&A7ض믦8Lkùje?Z0_%QxPcV5w`$5ƈ[ւ8AȸT%liv0KKl&3AA0Z2m.o娢 %BBvGXNBfP% ]StD >qwzEe>ZHqDEwUK&,ߡP@<n"L&m̘4JԉV#Ej_\Ls'EjV4d;o#FaOQֳB+uH=#tmHS6dztMp0J(|z?S^5Z#%$ŏ;l?9bu&,߫s49 `  |?jUT%u.#^`y$N I隬heخ 䏅. !c(2=P{H,h[gbrOWtExε{؂ŊG @}k^ו8RW S=# (N:=1u4D:`CM:!lek3Aņ2Vs.nABYn~+Bi}M/zoߡ(wE!:#LӈCD_hzdlJp!os7Vџl[B|v@U'Q2#|+p NN: I2++z] 'e¸#*bW BtIp?4̀3nHI{k &aAJ觩ۃX%n5olU*l}ki6ݯ.^a)seSSCQ\ii9jC8"č*fat.4hLw]Mw ;Ѵu }wtb":B5&xzFUB'vK:yyV ٩\l&0ZJ+E M ͇ Yvg>=Sp~8?\-.M4W=_Lt ;TAcﱤ3nd~5;@?ܺ@ut_EKTlv7x7m@-G0:jI~VKׄdn']*ZU}]ɖV [(W\c$rp2O$?ŝSP sī@Z8R:uX~æӕB nٯ\2K͈$#*`eP$LYn#S)ᧃDuhEW+g|IϘIHs7w ֮)_=G$iAYGHДRYSRsp%YpK+o.COǀZv)W'ǟpبv y)S QaMsRYeU^7o^ufC2^V ZJjE8\m4T/ke(t ƈʍ =/ Kx7 ܨ-)Hxڲ@,_lDtW0÷ y^ )Hjp򈛥`2cC&U endstream endobj 40 0 obj << /Length1 2083 /Length2 12117 /Length3 0 /Length 13384 /Filter /FlateDecode >> stream xڍveX . "HHw00CЍt !HI(%~~s~^s5=8j ڻrJ@rbkZBh0!NVP{H:A@.0 T jwpp8x9@'(?P'AC1%NV.Lh ! ;@de(\,!vf [ _!,]\@vlP' W,w+K:~ PAi iiJjr`[+33 q4*6`g<6w +AffP;PVdspa AP? de 2U< -zOfNV.lVd6h){$b7VN3=y6Pw{?l+D`"?2 ,0dDև`kkevA.N_+appVf.S=Ɵ01o c#!oF0z4ZBfX9|^^RYٛC "0gO^;2F` <@37rw]mm`dge]]`-6ՁJʹ`k!no67b+gi+X/-vVUS`kf6s c_*l;{8yx '''F*N7l9 `g\}P'ߏ.[7KAv]C/]$ 9l #lGoa!@.X%`-_?]F0 -_>vAş0wXi vMXdV)ֆ'G_v_`'/5D?j̹9#È[Q迦 +LpW0.0R šwŽǿ P?\ N7_`寻۔A 3)`rq w!^'Ѷlʤ6E9əoT-E *!‡QHEH4G '?`R:Ac9vG~+-{LSrG/"9%qTA.3J6HE Dou`Ly}ڃ__M&:%y&Bd0\*OL)[[9o-ZGd3lUDLxGB؉O{= g\SV5{~QW_~?,'VMOʑB!9r/B%gt"-veߋ7]=oJƿ5&C׻L鲂)]waDvBTy6n2ȥ>@%$r7+"3UY֜?^ߒ˩p4X TYײ0}sMh*kCh|T ;EYLyXe67`8,k/YC:c:P%z*Χk腗Z9{BA a8F|zӂA7){nbj={ RhP-ӗ5xj˴$9ŚfpMxM(PO^l%YގVRC]!~-HQY@>7aף<"h=AMğrp,yށրjDn|9# Bux1^}%P "e/{-uV,=5F|'_@ǀoʒvy7pp+^gyv)mVylEwod[J)eE՟gWOvKn}hdnA|IpcRrδ^t2eV?[ثLk$'i/o'}j[)qϒMDyàG Un7\e,Zub@{W{),JQ69ZS96]<Ә9k*0MG!#j?8!wPb(x$vĞcqÂH-sjXvNģh[ 7[> +碶lDc$87ލf^b5n0's4#d!?EX56td0-kMiNXÓGs*(QM3-R |YVɌn;UN~(^ Gi˄ff2Vns=P+LP7KdC# Y_uɾw,Fd6 Zb7pU1u8 q7ބ&] F 4ֳ(r-N֕(:z9uύ~}rɉAXy3Qy8nw{e"u%~[C fmHU/Eo 7'vVeN;CcDirO$;lzO@H4d^cX}X..imrI=$AiH|M{}_ʭ/l-g{Џ3ϛ`f"'&~<3#[ەZ>Z7,QZW9{q[U)}`h0JT IX '?T'Kk@Es.KAeH絸%d.)}u^}.))3*0]ޓ 9hoLtbFdZ)IgA3b^8N8{W|TBj2sIm|"8CdO^B疄>oCǓ'IV ,Df +7k;sq[״ꊚh'GF%]p Қ4z(\4RME㳟 OeLAofFUdӴfUB&b.YuzQd[|)7z븚ߏ?@"Whsy/F}ك] rÔ*ϩBoP5CYC5ZifgАQJ3wEܽ%fɎ?"1tѪ48r2|>˃_.tD/; /(H8uo!r",''ʢ=;_(+7_`Y r~NWDӺ|xwzj`e6KOᘳha.">9 |'_cS{ܐ#46CS_Gn_>:v"9u O[)޼O!&>%qi9mL|7 Y ʑ~rbu';nZeWKwv$6p.#ޢ3Eed Xup}S,P~$$OSiY%hy~PuAV%~vx5lϛhixrVuzS -J:6erCo0g1zŸij&KҸOBIe+7wۼ8RS>P*~}@2sr}1}ruEL|qly&(t1BGH쇧Fe~_!]Gq1Wrc&X |0Ӳa.8bęuV-G۞c슖V@u(1S7#ryu =ʘ! $EpZEX=L:Q$ K0A=-œ58zYn ᲣR㼳 QYoٞr|98Hj;^Dd`<,Wg0G[]ceQh/ -K)x/k^cp{p>b֨Jr X_|w@O9}E, VdɌX  ڼC*$Lԡ`ݏe5pxJlNju#rggv`&}QIx8'E2}ȼ,%n$Gyƺw#Q V`s ۪`?9Z!:OqD&560,L+bK4NY1Gnѱ$Ν "*̿i%@jơ!-gh9T?j;R֫]f,# iE3:͙jq 2,o01g6@i. Nm[Х 0raÅ_hw ǁ(.6UPX"BA^-s ܼ<"Bmn=&ݸeJu,ѕ"GDȢ*\6`d䯼z/,5@/Q׬["R }CT7n6+y}0? mKmemݑOKA4OnOvGJHݠBJb2jyjט-ˁBOU(t+Ȉ5Ζ}{2_v~T$wLq~Հ=?RyfD>^tԚ:Q|;*Ixo!#]j4XUWyl5I5hGr9[sZx΂lÌTXn}&I4bWARPΑ~KBmSM=XB_{K5*HgI\c;FC.sKu-/vk7aJuE 7?X܁>}$Gcڜ*kn̋jh< 0J™} ޣ+66[RIkYH3r6-wRXQ)Ky4y!n{E7y*;6R.B mǰ|ݠףǣÍCqz(."{tx{M|`H/cH.|}v KBu wcT+y.{R=knyvw™M=~iX_G>,T+~աR]jhF9PQ֕M ˽nX.v.k9㷢pHdH}ߧNEGL6b$dG1y|W*q8mT#v+盜Ӧ$-ҵ'ޚW{\FvL5!L,J9_(NxG ||W)Rw.E+۲m}iB8~:@wVם9Ċ#]ސp]lęT\>ϣ{CԺZlE Kt܍F01 l 8>H`KxRsML6e7#laݸ )<`m*\Wg.3_ NQm}lCӍi>%ohUac/9N ׳IKmtJ/'=WN $[bQN/cM!މ MxwnM2&niwCbPcL 38BҬ]AIFF|B`75>6 $z/4^##M wU6*Gax==ӷB?,)h pqׂ&:H~KZOʈg> s$R~pԼ^TQ !ՎR0k(Br3HZ} TH ȓ% 01gݴItֻ[ &a~)ו0 `lL@k*>2DA2т>I, SH%e}{҇8("+Rsӟ/[÷򉭉.'㐈8L@Q R80Ư|$Xx~K@~%gD:p'1F7aU>rbU䰹Y(d-%O`Ge` } c]liܽs=9yGU_QcS1ڽL*sl?iN+>x|qv}V7M֣.E݁Wg5l3+Z"q;}נ-^닁Mn?m}Է5=6[BW]؂,b`RƋ9]yVbS@)1aWmv/4| xzȪnd!!G3FFMkSIVU~iئk~qM0wFB*[s~'+_(t=ʤ|` !^PIrU Fѱ$$q%)ܻhR'B[PTH<ڳH$g-/6$&F8b4K`ύ%eNȲEUK$ 1}rԇZ2 N4Ц߿LZ&֣1_9dE>C٪kDqNgIYV/olR2nBw<=T(KUnzVDK3tݶˣKmRr|#6Uh˧wS"ýz,8v,!cExzUPigzq?WWbJ^/*LQ&PǟI7)/OVI}YL3_(+DysuWҬꨉ _$ϾO.&sx4 *]t6DTjlL{c#~@+lts$NKP/|\S9mNckB8\M7P'+*)fuKiLGBJ$¼R· +i^jŹ쟓xP?)TRݖ[A>Ǯp9knreW6L(ߑv;ayxχ(>"5lPUuhV<6xG e)=Чd6vA>gbQ~!.o(ܕwewUG%x_`SY`s@+6qE|ۡ&sf:Oq38M=<!cYB^hBWY%u]yj!LsV>|^ MKTdSDSƍ}E=P dH/Dm:h^DY^X8IHrk03D90lP0x.M u"eNLzb.!vF쟾Yw!Ir#:]Yӫn!Rى}FXõU#&P}KF&z?zӓN% 5h~ʤIbW<>]뀫;VINįvJܵn$6$+;a82B슪\t7vd L^#35$_nIMP+V~o:#>IkV7 >O JGt_xn7H rgJX5 y̪#k (5u$Wvav+.Iǃdh+c0sO%"Hq6Vm·wQUep%XuM#!\z}ִ@yT\K t!) tq(oӽ IN ! oI$(w">]=jOux'y kv/2)GǩLUnƛ+"pjW}9?žXwQB!ȳ+w# j|x@Q[,6[tqs6pAf r96N*7e5r1)2^txbݾ`3ęr vo1?YFgYJn&ѡZNߙzΦE]@0}rDwhX h301j=Eбh4&U q919"y(쬘+sz$8MLHq\ho_Zp̋q.L̆JE^W~}I$SuYOмA-. endstream endobj 42 0 obj << /Length1 1904 /Length2 12155 /Length3 0 /Length 13346 /Filter /FlateDecode >> stream xڍT--Xc݂4@c;5@. CGf̽{vծ:ϩ:MC,n1@\YZZl66N66d-?vd  /3b!7;;'GW "Y t[Y  2$letv~~^? g9 tٿhhB WJA'd(wa8[3< d-%e vӡ t:/;9% xY)Pu9IVks,+w"@ss# `ہ2J,Lo"tf/?Jds1w;~kde,$! WIA/:@<|,eX9j;@Rq^Lج@n666>N 4f#'o?G#El z@qn ?;!,3/fCc~da;1_vJH@<>\fNN7'/YԀ࿪W%g/ƃ߹T /} oٸ_[~? ?lo\_f@2 K9 z]/ `eF]d 5Yف@j?2}=\^Zev{Eis!^l/ aF M `eq^,!ȿA|V rۂ^JK<V zj7yA;;/kxZ AYK飽=_28eKxxהUУYczuy~ɷy{6CzWҟ*;st8&JwnFk xջ̡2N <ertΏ>1G23,ga:b4%I\pVN_=s(֒W%TS-EzF>#s:6(=\+ԬSkY6TW"1@v2srKCs(caح#W%)OX@|eI=Mo7pLTJ,Aړ~Å#<Ӧ%VCdD uGogsG t>{O6' 44BGWsG~v*FC#BDθRXr:]=&'! T"fI%|}p Fm.l̀Jilͻrӟ"XsƦdPti w( h"X9қj*L}59e94xo2.~ gq'? VyL|v`Z]}_Wj̃b;ue0h\k>Z,xL@׉(<\ёb1vtUK+AA. dk*E VXDw[= \ۉ&dz?F"1ݻ>g]wHMEXyM~D9Pe_>aqW{,nHwb-|8&[Lq>KPF.Yޑw`*J[=\82^x)c4p0jo\= ߧj )}mD8DzWykOOd lN'u5"*x#HC ͆qlmß?!nf8I) uu0MH%&ڒ]ۀ:4j*t1_\f|°dd}ˋܒlBX=%hX;cq5~`˄0"H(*6 [z`;|I8O< dxH}EN,r̫}l~05ЌX EЪ19_u lYg DN Jf"*]PpW$̔jn|4IOʭѬG-[l+<W,t}?+sHXbgaiz*.ED='O9go@>7]~rKZ|HSu2E" QrF m1\bAǾsp)ϖV6op-?58!]$12s؝7Vdp2"?”rm+iUEAo;<1at޽s}S{8Nu+ِitAduϸ!^$1yӇK6ξȄ0K* MO13癏2նU( ݪ6=]?n|clD^u)W^IxwѷXps6x`AĎ/8*C9maRgwyBscW $n 3# d@D%95CI[u=o1'~\vibjzLT7xgX}Ἵ-=, &y6nC?-4j&!j;2k*Y0U3{?tʛxG~"M+5Fz,옵Tv ̑e$훜c_r6m FqNI -ĽkB_$g߇KOlػOIh5`-gapF5 4siP&6nCu =SBۋPx7L:'Y&p!At'cTD :mï">c;zimJoJdfx}L5V|xc)^K/ >"vsh.}k_fZb(ՉS=mRoifK0f~^q0M(&HvZ>d`ZwgUWЉ+C6X3=; kU~ /hs[IUR9"#*d^6If ՂM)ND<2tVLVβLax˦2EF3*e@^-5ݑǓic^cڗR*" lNO)KbD,+Rkq`sAxR-j`gU$>ҧY{UAA9j͔ںhbχ vWĿ2w7e硚C6Vȗ?_;ya<<3# _49? l2M!Zrp  t2Oyu_=,W<[fKZ&xևzg\f=XgCxm#E)tw}>оŏ#G]¡+f<-VF+ۉ;̗.Y㾗L/,(?uޢ*=+&-YLcOcRY;4U<4,S󤲩ai(y׋wYϼ[(|]vc,k0+%HwdŖPM)6 se<4T4!H Hd%{S^=ˊ_C#%A鏷ՠ*fTM1 yإEsBr$[w;jj1i'Ԝ3dGN=!l?{(rƕ`Z62 *7hԡz②3lM#Bw(JJ^E}Lbt"vɞ֔#?5zoxh,D\N]˭U KY )U=‚*[M|lU`f*~ٜC oMF"\oFC-L %=k\Jٖ2YFR2oYOC_dsT$S>fAUƎ4N(lFgS` #0lٝ؎dЙggI -T S2& J:J8JߴlTDfâ*q`MlReEtD1[~aN;JdEzΙܷ盤D*uZI{Wy _y;j^ֲ340h29 ')VC9QZ=9z2ugyV _pF5޴nzwg9&Ii8@Y6^,hvj3 L}9i&v[Aܦ4ؒY%ISR2QPsܝR(A\_g1@8{w<|Oi-4k5_pr$찌2olyd|[PZeٻP_ (ŝ]33f+ uFEޯa]K$2H gGj"5.ڃ{v5C븧nx_-0e3K~Lam 0jY5Nk lr΄"~ԣM=9R?.v e{򴙥{v[/7LKrC0;e -~ I)Wlm|#M|TØH/-lȢ>Y3j,ܗsv``H=Mpʼ]́&1OnR~-K)-3ckc/}(%IE%OISI͔,ϖHLGmdZ`^+Mp=mB΀op'QDGƙ.c>)C-s$0|s;B_tt]V81fTƏt>Mr: E,ޝc5KYt֪RQ2 Lc(!gNu}L`R3/A~SQRa0 D%\2Ǩ}LѶB+(ߛɀviA.eG"e mՅf;fnq@ &JjI,-9ߟ@zxV*(s>0ӢLi6m_4ʨ;E Ӭuoh2y.Zm3F8H?u ]Ft'VJFP5QdW MSAK{H5[%vi^~&Z볖:eIx 316Qd cҴ 9}Kxa\']1>{7?BJˑk a" <&T5ĤkViDiG-&MSO1#7Kl2r3n4tx6sd`&Q!O@s;es>X5Kt;!9(%S|NネP6=p vx8MZnY \W)j2)O[&#UW;сCi4}11`p6!QJa^ɶ&*s~YfOSPS2A2owEHπ|_%ٺ'|JWc|sR{͏=dT}ce(_>uQiVY!۠_K- ,99vfAmTDhQYd~0v#5 pA~M)֩` m&/0+T>"C# /?mJPl])xNؿ&#z[_`c#V-:k|wƌFpc.K0Pid3*vM^ٳ-՛JXi1cTP1,Ig "4c7!u:'*<7O~łLnҒ}AG}SS/&9[*w<PVƄ&im]U<5>!{>Dт',"}Х]U~95Q]@M_e*qU17,ttQ3ȩֆh+_L^_+oKOH|fjp㺉!IK_lIapvzȇ0G: ʜb=|= %f[u"[[΋f^쑩z# b{7&]tF :<әg B2'‰ͨ"|0ΰ s4۾p0[,(W` ܑ1.*oqCl/}Ʊ U{ )_ nuzd'>KٻbTZ > <:%E']s bAH2m>A}х HCtCKhRE.ą<.d~rAG&$H$ggْᕐn|z?M({&ԼğN돏\Ќ3hP@|  >osvi,7]N}'/O5tJGZ?* ?"gpr}f߷&Z׃zY, &a'mmZyS0 (^6$΅7ԙW4렓TQX}(O˱_x[HKKl*ޖ?`F?|@P?Z) f0ra\\hD8|bMpvq^.k"بxcC) ǖmϊ45dĻ _/-Ɓ`;鍸PAR6*Uo$KNO $ؗCGWݡyy>(~50I1R{l("YEd9C^$2R5FtHj؁rOOo^-A%KuR$U~]ԆB^V͹^s^>E) 6$zTe@*yttMZ"ہJm*t.O|lqjʲm&^9IaUH` 7Du4+eg@B]_`j >sr)UV0/_Gw&}wx}j;YiskzWՄ*,/{E K\/0ᔱ1cgP8ib`ya2#pZob̈ ^O5y,,Zds+λ `%ǹYk:"@f3*nYx*oCESYw=FCY3yxtK(-e3i(,0!Gx}|Q\q Ҡ3giڊb>N-zץZ>ov6?ԔcB Y3'X8Dq _'=Rcb{r"O[RZ,P +)z)6'\~>řj;6O{|2n=8ȂOnB?2"ZGtF 3g9y/u; [Ukȋڷͯoy4Jv +Gk,w-;Q{מOQ2|H5gs(ZK"}TmRy*g`5#p`ۣ[yw2W52BWQodR9sTFZ<֌bS,rڅ!,[p06QckNVzɞCt#O05^vluؿ0e`&Q\::p#F]W" ~Pzİu7VhtS[kB%n-\Cn0N_3t>̀y!e֣4{ZI\r2X/@y" |i=Z,/JWЯ8 |w^2ĸsM & ѯ+8[Ƚc-%. &9s}Y(Fj)-axdb{!@nwSbv$a󔎹ӆEs s{"-`im͓0]e3aT+1삫K9NL6&I_1 4p΋%2j;XQm]w #ԇr=2ԑMsr atňNlZv<W6#^% u oJ{51i2nF;a ɶ\C+c>1Ud3|-Z'=Kb#̚0PV5IJs cMS$4݊ڪ;l4IS\F` zΪ'ʏ>5 (sA&м?=kIEYu}8^=kvyUˑܱb[GLY&v^WK!8ٍssX=سy.N pB{\hA[ɁѷAl]Ӑv>,#TJUWc eC)JqD>Ґ-*B^'#5f[m̱fj_o1lkHYuWK< ɣ)SB[MH28ʉ X)`p9 >X茛vyW$e 5G椦SӒs`Y~]dwJ%/7T:n"e2?x/z͌yaIepfMMZyh;!rJkas?M8lR=Әv݅7fqy_enLKsFwEzT!kK+aTbSGne!"PgB ׳h0TysvBRQ%8ۏwylX@?5u1Dhj"0CgYiQ;7ϵ`Dʜc? ڷ[YG%kg}:C7kX-q wy·Ǎ)7޻(Cjr9>g,5G nmEwYuW qjlU.9b`w[%Z^ e{e`4 [¨$6$U ,{+>ZYɳdǏPVN#~C]%>cAy`aAQb>56I ֵtAC.iW+KMV7է.ajT6:/R%N. d;CiJz-F3"^p  DWsi@,,-_lak`|0ݑ>rcՌPx"&7%oVcEu!gb @h<[imR b-4#ӎ~fßO E|GMƨb-l ] oc_= Ңjj_3u❝^_i/úH(g5I5͐2x]Rnj07 ^PlKkEόrd$%"|T:+eh x4߇PpeMdf>MI]Q> "n+D4Co}+.ԢFjLCr3ŖDM 8JbF?O 'V.=k endstream endobj 45 0 obj << /Producer (pdfTeX-1.40.18) /Creator (TeX) /CreationDate (D:20180312152031+11'00') /ModDate (D:20180312152031+11'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017) kpathsea version 6.2.3) >> endobj 12 0 obj << /Type /ObjStm /N 32 /First 236 /Length 2319 /Filter /FlateDecode >> stream xYr8}WqR[;*[&$MqhIԐow(ٚD>M@X$ ä)aLkD`F&fyfdB3<#zR3!q0a Z& L:&0%d20e=jg:q)4ZRiS eOI  Ja' s`dJU23Z#f F's g <ڶJz ; A9WEްkɐa7+OvmPiSO'R(-G{.f 3*]Lfgfl2+U}GqUгmo_,ozA㿥3qZ1]ܝm]}Y/Y9u-)t0@<t䣺jb3}R@7ϊfߗeO;p|Tu]q<͖Mγʖib:,ͪrod`IeI>*D]Լ?/Q~+34]NqZ-gtr\Oqbk+`8ۗpb6VJ&/q $uX`VJliG}A땕(m4 ;tckOw[kJ30f< {#yܹWo 982 .I8lPOĤ%sm"6wQ"2Ȉw Yx%m7haџ|"Պ4ʄF?k;ε~Th )x`I:<7 bڢ_0n=QV$0%|LH+Ea}}cq#; btn#R]*7u! 4p뱍#f=EXQH*ȵTwpB:@N'=qֶڕDxD:E"cu( e7:ht˧ruٖ ~ }! c  3axh oVcyA[|ƴ$AՊJc;x|T x=8zPE9ACZMrhXYP7p_YG l HE̵8O8ӺlW1tF"CHFb^[~E-q68|4eŢH 5VJJqUj/luS4zahvoj2tRz2P^ 3h׮✢S;s M;Nr Upj EtBՅ3P%ttVy.4jmdBk@iwX<⮵k~w$j ^/teڵq nˍTrimW'(!$Fz#IQ-ZٹuV OƫKhpqW.}i:t5~n{. \Sx@r.^xE.sN6Ȏc&pl{vV1I+_Sx >3>%;_7K,pX^t_<෧"y_ sW V$tv;J?[!21<߇O'+|I|kڰ1!-?=޽flige:w c>ϋI>ԆżXo b"*Q!T-A(M %Hۏ Q9`AET1~ Wrn:5G5| 1}P-?:xv ']G΍!ο]|'P|Uvμ?JY~hE1{Ύn}'/χEU7.=&m>fR=w]踎q1n7sv6_7wk[moa׶[v8ڹm^?7\n~o v8UOQK04ZjvM[#X`B)ǽџ endstream endobj 46 0 obj << /Type /XRef /Index [0 47] /Size 47 /W [1 3 1] /Root 44 0 R /Info 45 0 R /ID [<13F44E971E71EB8E5536CB31265A60E1> <13F44E971E71EB8E5536CB31265A60E1>] /Length 141 /Filter /FlateDecode >> stream x9aa?e,HJ9T"TkNz~D"2 K1C1#13\EDgbQUQ Qƾ!"h@,/+&7Wxl]]qꓫk a endstream endobj startxref 98769 %%EOF glmnet/inst/doc/glmnet_beta.pdf0000644000176200001440000213370713251400016016243 0ustar liggesusers%PDF-1.5 % 88 0 obj << /Length 3298 /Filter /FlateDecode >> stream xڽZob?ʨzp IIsg|.szl%_d@qIp8towW{oEI&,v%nZ=^oeD4{xoHElf+29q^iRD]ܹZ摦ϲዌ?H6ebĠ]8};֏8`@DډDSf? ͖gDy4S5] scY N'SOhd?'zax;fg?P [;/zx;1gogx,A;؛JѪFyUJNv?_.H*M4_fԽ)u1܉qqͲ/ %biux ƃSL)=9gEآ!%t)?"bU!Ym""2<8*xVC(z/ Kem;]b{3&6^saؔAɧ ?um4_D;p!o,=8{??p񲈙?vQtk V4j[j'i.!h~CͰVTUjH~"Z7;7=|N('=\0b=[jLnzDש\'9U;HCC mc]?=X]H}XUXwfK|J9^s"M &ȣ0vF)̤ǗciqvͩC)dy.b5MY] )hѴ]cF)R#o4ݹ&3**_')+=މB0QT˝{ﻆh]`.Lkz`vXd9z֥g6S`θ]2u%2g)a}qQ dX4~x=R Q~vuΣޢ]SڕJ8\XKEQ|h |0}]fx+4{}R8XPӌdbJSa=! FxcwHDt`HB K|Jĺ# K"(,a<]  7< 4a椄AY xB>1PQ,etQJHmgO[=1I1eG*dCW)umXmvw5`h_s9U{>gPiƸ^&IS,G[J"_cvȹDBH`(bp "^0F^lwfºFdB9\-zW~ybZ Ll~pP,iS՛W?HP*[SN"\1',yDT̷րDUf`VpLd<1; 5w*eIBd+2aն\Z8dB0 WVH2;_"W'ʳ<`ԛB}]oy: ϸx- Xp?7yr'0Υ?"?(e"pW*Vp~JUx"Y׌)r\b" 3$b+WJ'kf+fp!$^" ɀB8r4uW}KB's-Q0bJtTiN9z%B` dP=%m"*/oXw,n2h|~R+u&Ky57U_ Eh,X8%$^&Cldsqk;QҶՒ> 5gj΃h,ꜢskU{L0ũ2I, aF p kkt"w "##)<> (ΝYDn=ֹgP `@gzH=#%&m+{|᪴"xgja+ 85d3`j0&A \YY}L7( Jv"]gpYrGnwm7)@O@hE]Ak,h UPlǏjm;Ft+supXp0>="S Vq4$np_nwz$;\. Ui/Fwǀ=EL[ 3[.%ḳ wwOo+w۷Z[ԚWCivRNIͺ RcB\DP."ePɜWdt\HGf, d1~ t@zNܝe -~tܛF<~!u?#DO6AK{8Jd h#b&% k(˘%  ]` *cP;SJw46Dz9VtLp_&<ޭ+_:_,>S-5 f|vN2%_ʻîH* dnp]O2Z~5sJ`)L>;7`B#J.~w'w&~vАn+! u|0 aCi3] ')#r[ ^JNwyq6q̲8̻| 'H/fBQ/8ow"zjbB6]3m9;>6; @éޢq4C;n a;'ACOfH?8'> stream xZKܶﯘ/ܪ|Kc;ͺ|rr03rHjwݍnpHjV'T *\ۛ/dhvGYQ4yJq'ֹ;֓ E?)g*?v(t]}h@XnFi`U^QN߭Yppk[Rc::)ŝ{Z;0ZNOK4LL9(;.ꮥVՔ1,M7fsbeᱺᖻ+?14yӢqXoۚWV/2„.2NNgHfG"cR ($!QkܑeV”ΉV8v ,yv=a]y&ڮ: N~y,GxZT"ɣ9On*N.WV| "^ΰ65e_3[h_IP獻 zmc(G PȇE0p Hѱ'4/pP䩌Xvzj՟\ś $wu 4Z ש*+kVۋ,>eY5DM̎J#q L<>ba(Vx:Cf53 S!0 ś|6ֱF[PJl~=q ؽx-NѶޡ7j5si{rb4'g3C t2(P7Ӯ Jc`]<ߚwxjdֵGtLư%7gH u*K]5,u拃GlE;I3q8M]Q`B{8p=cӴ }&+g:[vcU6~F%bL:^c`1 ~7-ri^sG&eBk߻Jf#)}FcAoZT{ u[lG'G6If< Vne ]$V"- 4b%}BM1@e2 H8hLTh^^`0m˧ƮqE0w<|Ɇ_sx~l=WX6"{5Sȼ<CY]4ݠ NG)$g/1Pcߐquuk LB%"4 p 8@+J"~q~7E=b~,',4ނ7yĀm)us܄zQ Ԍ4Vy!r@ɣG[JY=H:*3yb@Fr'gJ3Gr>\m7s>F[{ׁ6Ex(A/sF9,'vBx۔pn=X?<x& byT=2MPzG8L`ذ,ftk.wϜ"G\C}]SM,ˑ'/,A5?l4]+1uȼEF:F'sX|<2. tunfc,;ڪ9M")[=R9.T*OsJy^!5Xxg^ܣ%RfRXرavh_w!܇Bn( on(?fQ)ǒ?tjbtNa󩊁2CXbz  &q́d endstream endobj 127 0 obj << /Length 1260 /Filter /FlateDecode >> stream xVKo6WX7-zhE/]xOel–\IΣC ͢@s7 dE(킶ky+rZu'%$Cfdri([TL$eJ5Žrh$_f7Z̖pMnjZ2[h)٧{}'hQEY Cbp=$ĉ>i\ j`Jv 7z2Ä([͋Ld |QR]Wۇ+3wI','S)lƯպ:@\|KduЙ =4rY^h 7BRXI1fg0DCv2f)e"h NP*zv(bj v6EIĽ rWŸ36rqG:BmpZA}oZ*ZSKv|>Ю@#iP[ˆ~2-QIW(ӲԴC.:hhҫ(c̎6fhj"ڪXKF7;^xf "])fNh EE{?\0biwp<X[i$تa6UUC&ї*-|Qm=f:>]ۍa<! '8 ^Q4]2)EN3Һb4h'ݧTq# :VfY$pf:ͼn] A!2goBj&3np$fcf Mƌ xh!:aT4Zdn0 g!G%Eٷ=Nu8q vl~cmqtUNb"Ҿ`Wf@KF{Xa﫻pZ\o=I!no'l ϔvj|Fr%mELM>߽É>7Hl>L  4Oq}I[GO8ڨ  gF?\Yw_͚n'pcF0;1x; m1g1!(IP,<`<>>btH슔a; ՚vVQq#9PLq#i sh; #TAg0!| ?0t]Cb*uj!>/ProcSet [ /PDF ] >> /Length 36 /Filter /FlateDecode >> stream x+2T0BC]]CS\.}\C|@.ZI endstream endobj 130 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-5-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 131 0 R /BBox [ 0 0 468 324] /Resources << /ProcSet [/PDF/Text] /Font << /F2 132 0 R >> /ExtGState << >> /ColorSpace << /sRGB 133 0 R >> >> /Length 4762 /Filter /FlateDecode >> stream xKqWp( 1."|m k tuǵϮx}}?\uޡ\=ߥ\+xt뿮?7>%!z~_K\"|a޿yO=i\|#%!1hlҝcSuwm'de#\IVZ﴾O7dR*wuL~JNEOSNzxDG֯nmSGQ-7JGW==hM4d{E?xwm;gc.S\SV]wLue"ǫƻˎ}Yv߷ˎ4OprfY0c}ʉxfXmrҽ,-/mߺTv=s,]rt[D^3˅M/>ղ#a鸶?5vr=!)ǿ-~o AOꙖ;^'Ruw=Kϥ^n79/-{_zE.n߿uTUlږwT7[,]'mQ-_g+{ioG~s0];?W 1ܐrŦZ[W,m_\ y'ቜ.<[??oƏ a}w_]r1ݦ/~^k묛.uw_7)L=6ky-BWiҘ^ &ryg9v~' L.G\?<_w({ 1bG6/bmߺ>@IMpR&\3')aRNGvw[~~|}"ǿ}h_!wOW_?|G|W|.JỶ6uwmh]Gh]G:|滎6uwmkk.׃h]Grzw9|滜^廎6]N/u.rz=6]N}.@D%.Dx DM&:ه7@D: ok>YzExS ڠf7я, zDț9z <Qm8N$ځzdNdCND.ÇɬVD:}ÉVpD *2t":B'R0;'RNDNbD ljn"{<YΤ! D$: "o9)N2!ѲpIr/yfզw"rw"rpsN!9BDLA$Mȓ7e,#G uA$lN "r/,M^NjQgSD4 "!"Ω5: @Dp mDDDwNDuwND} "ڜ "nJ@$GD i0DdqQF$.Ȉ~,bCn:E*ÑCe<6DZ٨1]*XQ]xQrq#\Gxjja&0z .nuh;`]uuk},cT Svt  - 93Z00d:fK`.hZ#0D(H`!0D0qE%0 nu>b`nz vD ?T݅"z?K`|FI].^dt t5.(FCj~D|8Pm Eu=YdEt;~?%ַ.gtIt!.0d4]Y]ʣyc.TF1TM]\K3KC]: etVe~2U].Qe2.g;LBeD]]& 2Gte8 LD5Fz de^2FtvO"*"p;N!"͞H("tFHLjBD6cO^@D~ɢ 2"Ad 2#DTOVDƀSD8džADtt#`f43)$t&Úp2986:1oN_D"Ghz&@Lpaم k" !2-^")"0 tW]DT8 l#gǗ Hz'wg*!~pwfUWu)H) "@0B$0EDWB$r~3 "n]H!>!0=q AD wL BtPF?sm O~LMeǡnj9 r4ה\v@p fYlhbjnAc`fFQپ]M9 47l`h12G.XpfcBdp'أ'D+,L]JB還F \ @Fi'̹ %!` ҏ:৿tE7Ce<`L1MtXû{ig@ַV˛mslU? }LbVKl٤Yq i+8? [QpVh+8"慭$ڊLV7T((m[n"[`h+cG"m+"Z?VD~&Z*[-YK@?d&~:C#jykǫ~xկ;l׎W_&i.I/jy":x'ɆH}̜ PNdrxH{TI9Ad>!{Z5 [-uw=񭖊* "M=U:,Z cB=Z-BVT9o_MdƝ=6:ϜkOr7MYoHSocGacO-JsH{`⠏A%9Qat^a !Ct_jQxH}BD{'jy/щ@S!5 5 BMl lÆրql8=jBdk@$1؟GQ]=Dc6H4'Nh9X7#jY@$݇sHF=S` 9<D";"S:w""r ?_XvBʵlqx:. &mRdE9D !7<jqv\:j':.6;.> 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 138 0 obj << /Length 783 /Filter /FlateDecode >> stream xڅKo0 {^IE:lsnm[ҤH'׮y"%7|=aiuvyEfiEXkkg̮_3OR(8p0]}OqEN h -#T BX1X  0*44j`ɹZqPǔ2x4h(l jeHH͆:51ElE+F"'昆Ėk交ʊa0 - 2rlDW`[F|k8ua{q9Pvxn73+i ÏfCJ2mh( %oa4(ZEȬK ) b`4|6/ fϤ5#cuqT5\X1Gc\#B1UA8rl ZU/Ԙ/.i,2`fPѧi-X5Ae.U`Ր1TjZqp(0\(K*TXl[DU?GO1H´lшڧHe`^y:n.~> stream xY[~_!$*kKh&H<4ئ'c˶Yr$ 9liȋ%3ùfLmBh|NqaP⬁5PbL <7TO~?gc=$Z1gSdRf_]/JYyzA19 Ĵ)ҽzf-Fy߮+qU b)MQvݡoܦO7ٱfj'ʻ+Z {VYYnQ:L;EŤdoIc&{K,#CՇf5eM NzQ6W>ƝTU^4>zQXI`.w!U>n A?O=ALxc7 vpmۑy%%d qB$kŠ4 _]VLUwH}j"zjXiz̫U7J$gM^Zݯw}#CXdpM$ܲɓ>T: s?=hxUhqlI ߫:ߠǢgagNTtSt_#GǻbLf D#;Fh{hOKU>#Cִ9uM}V_?YoDOpưҔxSuy޲ uRG+~zr95<ғY*(F1F&*t xD98 662s56i&2Nόaps*#-$\ y>G;9lƨ$Ո)bn Ec!hW1\%YM`6G% +|.3H-kú{Ҫ>(`eg G,q+xqj{ 3 x &;+E/f?Fjm{jctw @F3ϕeh7d__ 'xi^a ̼X.;3[h&>W/T?0x%R jQ"6/#Rq6% Ը2T^qxPRH)n(}Ʊt+%l^xŒ4Ú+`(c#8c),B+Q:7AH9#z^=hIbcs 5'3HaO~$$8@cuSM" |S+oBk F}`t`2dCS-=rp;Xa XM ОPɱ`iq.]Jn{Kz{ ކ=B軽w gC 'X*0RĮbo/gW~E}.* endstream endobj 147 0 obj << /Length 1711 /Filter /FlateDecode >> stream xXKs6WpΔ`Az˝td4!Ɂ` E*$G}w&%YqdLr{]FFIRÕv*zlsO}A46'S]z_'\G)I5<W VFhU披ş PDFr/gBy=C<N =b$_2HK'r]΋lwTP3yG; Zyh(w~:1&8Nɣ66U;Dƙg01O LO?Q2g щ/gsnlށDƷE>I|ڨZ7塚2O 2O)oEw *KϫRT. [_vMݶs4 3 #FBQ2㭸)beud6?vU7G ~Գ#X yA -heOWu mo[M:, Pz%q]|;E,ù݄h#[٠Y ~v ܼ99K)a^7˿- fH)`pmYΑbUye|c G6c]Xe퇖8eD͙!^g.yVn "y֩Cs`A:-)1߸"\Ja#v15Q!@1st8PS~uá@8o5հ4G=1#`*0p9]nC>tHK=?\67='EbP3UzBZXk;\eqMqH~Vh  %S'%~ΆE?ئ12kZa3l\jKz(hR|+kb.pO}vx^'aZ{\]Z pppK_D:v=~z04^nƮe:wKϖV"͵CJ Hx**O':r:wϚmr-Vq>ӧ0*ClߦUMP00rvӺ췺>Cjt|CiX[E$ z?*_j{՟V!z됽"5_Ӈ$;ZoҳsHOAʹg+n`ZkϼWthvJ=aa[F.Ug9.ȊB'eF2yT۠ oL {v2٥wv Io =TdK'0õQǹA %H1J pOMaLГP0o endstream endobj 144 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-10-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 149 0 R /BBox [0 0 439 275] /Resources << /XObject << /Im1 150 0 R >>/ProcSet [ /PDF ] >> /Length 33 /Filter /FlateDecode >> stream x+2T0Bkh˥kT endstream endobj 150 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-10-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 151 0 R /BBox [ 0 0 468 324] /Resources << /ProcSet [/PDF/Text] /Font << /F2 152 0 R >> /ExtGState << >> /ColorSpace << /sRGB 153 0 R >> >> /Length 6557 /Filter /FlateDecode >> stream x\M-qܿ_1K{c~ pqGP K]UMڊd[l63C6|}s_}O7HuoJ}ׇ+]_}o>dp^_ZޮSt}r_Ey{ *[.xx[^k-<-z?o?/%!~꫗]/ޮ_|vMnΧr%W{\?AyWMrʵ]N5TܯVZn_Jc l헜paȏg;9[~~=ux|??8~\yד?Y+P?&χVWXMnX=ʟg[5??߾g?ʜmt/}wњ~Sz6m׷^mG/xMkeE _wS*QOA+uH缷Z} MR 󅞅5xiҝW  G5͚_̬A텫Ƽ_ub55ClVCݯV2k_e5ˈZ3cT ft6j,u okC t,Nxz/ɁĶV]Ϣ u?ha<ܘuޒo؇1UqK(7{o2]rI gő=A7_ByS=m)yy4 'X&tk&ɇl WuAhkUm,.O7hrs{\ʼnOw9fExB_fO\!4[7g ~/ZrQ}CNhI^9߿@zݗG0&ϻ[|( ocq)n߀yX9e\# \6q(${\Dq>FYm`s."E֍|ݣ0kg qx@I o DaXq>I -Gf P8 ¤;ML0qnN5pm"?8`efsm^Ďf0kq)Lb0̡f l0} W.;ظ=:!Xf6w UwX ? oE/>Cuˊ g&9!2i.1qr97R;<=|{aSs a+3FOwu ?>K6w R^,ۈh'w 4)#ȵa.МRGwJmPC~6 R?ÄmkqJ*HR^9ap'$7h>#wGܡW;8+\Ȳ3㾌`,/!;L_" |del`ܴ<wd5o`ܴ"C*cޛ;T]\&Í~k͖L )/ ˋ;<\yQ 䠃(:" G!޿Hp i$AICVK84d-" ; Ґ4EMaD2Ii#@Ґ̂4쀃H" 484d G!s pH2 ; ҠlP#@Ґ Ұ" G!iL84d.IAVAMvcxo i(04xIC.Ұ $ HÊ74 °HÊ7Mߖzs>Y46=hi>4DQY%fmK&bmr?ۺe½|(i>6%3M?sDγ$/sn MTt-|_mm-iw< e)tg a˘2JDFrdfmC̾t/ﶉX}vi%YPn3!4PˆПi?fmtн} ^m\vI;%!Gpq8rFlkPK# KWmJ0Qnu(KзK|wJjݲD=,״tzU6tv\vI[b8Aԑ2Fid>_Ż @hU29/zO7auRE%wk/%b{'NKmJ&ޭt;8}M;Tz{p8Qғ1!蛝D6%%'I ]!*8 h,C.Kg$G|ذx;KЪB1-]佉ߍ}kȻokfm _Cר۳&bmr%n=KSde<>=ZO> WuB>9@h֩d8 ]Σmiwm.fmL_YCדfm"f!=ֳѓlcQRe;͖Sh[የ%.]!*~.go-iwEã/ґyNsը'=L SRZ#Vo(BGAô5O۷Gq, %Q)5ؖZeU zUP5/>׌>z*>ھΓsqj  KzըKjj5o>%5;l6mz<>d,_akMZyRs~m /\Գ=̽Z%`3&[ԌCJ* zShUҥ anގbczQNzO1Hc@#N!k3*HUO Om2ݝo*%:!9%U2rBzX!Z`U)idԍǖm'Vg}Xt* UVeA %U *OJe N[3M_]&Ο#ۨ1zhUYP}VhɊ>%5;l2oGAsvQlC,7w:iA.z56QPIЭ)'za~Ei -JތGQ_aWOϨ>%M;l$QAEbOz[8 ҩze9)d㤗[ IOI[LVM)ϣRO|'%+ZJgT-K/{%Z`UIik_5fT^~&LqB֏j%X=GP V㡗ZW5rTeVMy4uLUAYINf4ZW@bR?'P=Zxc=R.Rzok$ Qn%U:n'` i =ʪ,z9֭.ZuҢCF;lCF5rQm~~=h:JXQ`^(@9=j));[ zQ[)q\82mUVevV#5Ztje[eprFANk_?$˶!cH-#@Q ?G)PUG*JI3NQ(h3 7p\@g^h[ƶ8 /8[ͱ->%M;l$k*ha u[K:c DOzJg;`Q}JzkCUކqFFyn٣J wi =˪UGܾ֣*TP5od޾ v䎄yS: =ʪSg)5;m &FHꚏ* =jĺSҡwcV@I4* 9]vuIҮz+PxB!ͨZw%a̯y< @0 mq+4܉mriCAzuAhu쳞a[|1.(h1ȵ]rV7\CԈ4DvӣUKE-|$7QJU;yʟA,HsAwn2ND쫹QI{Y#0?i 4*dqo^j\ႭGHQP[]y3c[U[l{(Fȕʞ%eAzhUYvOU2KzkCU{{%m򳿷?Sslr >}׼kejjl*x03J ЕuVU2Z2jvM:| \[=?6BֱbR HG5zc_E79MD6n;{':)G)Wa-S<㿮gS_ itg5~71@]#&&\4+BJaH36sGtJAb -߃쟎( S^/Eh㘁tp`'H&,~udqdt0A?H5ǽ ZM2EuwDS|~A͸a[Xlѱ/;l|~QjLm1?']c8튭© urjc{ni70 $ endstream endobj 155 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 159 0 obj << /Length 2712 /Filter /FlateDecode >> stream xڽY[۶~_IJMV q'KfjO;qv~J.ITHɻwvN` |]'oroNʬY%'Y.LrL>~;+Rq -_eXV*uB^Bɘ`KO]bϑ1Og ʨ>/c+^F&gsi0,7Jq]7/#3dOt.^ƭ|7.ɿʳ`'M wͅ(}HE;"?B/z;ǾwkUW;uu_X륛o_ϭU]7m}D /΍v> n۵E[ސd]s5D+)1pYaR^6!$ Ǣںm(Zmې%>""T8"-dwͶO j\·NbpOO^ؾ'WN"x_\XmvjFK-w귫!t%҈`"Ylh>KS$LɤTȡ]»%6E3}+"n3|K*m0\|Y5wgH>؂]i~?x9,+cX)XđvtvS4!J1~8a 'FRlNK?nkSBp?9f]mnUiߜ36O~QjҾL\e~l `FBEzNR)ÄHClTHբ`*W`ˑ>(6 A4`.rccn(vl%G l_ƒ}1離0wXzw8Ud=AO$2SPSmr?qG}?\MT"7Fkp,vk׌iƲf?˴d(kH;Q:pZCQKPjʴ)S*hc׳=/e区?p2ԁOڵqstIma6' ڍ @UݮkpGn{tyUb#x!=Ԫ6P.HlLmw#ȽvXOz,a9I۾P(`( ՝ c:l)b<)&a숦{Sh5nz ëm3 hKƭ#]UQfHO_h`nþjOW_]!l`XtuD\םODnS?_~jJߏ=s;#5E]·neeL6A0'[Խ[&'Nsm YONQX#i䫞Q%sb;:>-Ȫ6@KN weB3xkDW_T!T"zwBlBuTZՎƞODz>Ɠu(Y1y_ h %J'I6s8ЎUsDEg` ϲ E¼5  zC @HXۖbu-l͜j̪n.%;"lz/M`?|qg[W䃫x+e~"cB%%7f 49,=k< ""Pż8ˠD.NXrh't8-Y:e0Q9ގNH-3@B 0[4t͸q3&Tl*'~Mp b_+n!#AV?xT *JPjFa:q' |^ixlʋۙF9^'|+J9F%=kX㖓XӜHW;%3ψ5RB? $*%R- Xwl*δXM/)؁}L ՇOy"!d|\VIu/ G^@ LD&7>树Dd2 Vs nyf9G*2.wyV1t,j|†3I$&E-<:Fb"x+D|`>Y uO<ߚKt3v)cbe$7ZBTq^H>ɈTT=o% FIzm7u NR,t*g`WgT$&&5S2':Vϟ'PT1fdG! #'a1]1 a8%(SS" qZȂ4UbREjYǏL,W{W=NGF͊Yԣ8  2"eJػvZ8Rإ]Uݔr|<#7"wSY;n%INHg"s-^سMc=z|x}9Xɴ<&ObjJCDׄCsa#KmNOPȖK7^W}wЃz6<3չ̘9sn$jń稫+D4@~5{ endstream endobj 168 0 obj << /Length 4537 /Filter /FlateDecode >> stream x[[o丱~_@@Fl"w0l&H,]y`nIwˑk{o?U$uV{gf΋[x)"MW] ~+Kzu}DWlU("_]W?WduEW^\ g] n7T-wU/]z p7rO.nr]}B¨ڬ=uF?\`o|W?MZǦ(,ۮڋ{Yػ\8Z{ d'J30}L|ͅhVWH+}G{bhb!ق 2)"?^t:%a:Hi +`>;|JL)4p r9(KG<%?_=HZN: f)+ qr;_m19 P8^_1gxFߌ7/| -Z1)E@TV4Uq+ESzj̯h6ϾaCqø҃FC>Ìu"h2뷼)oC-~ Rʌ mwv.Tپv 2]h?n'f^uwuW݊w6b_nc¶].GBtowC٥o xڔUH(tj y40tJzM60%N*PпD^{h2B_z}}Bj<,,z>S?׸`T6C0PD="0.=sʶz[Yp5ݞVi8h ax.0ԿZ愓73* 40;4iėH gFgKSĨpd){PnkY} }WՇˎ-e ~Ƕ |aHˆ,W^_~Fm/A ܭBuԥ h}tBקVjDJdpX#IiIr:ap&Ŗ("dP% ҶCMC]v R}ž@GN#$gcfzTAq~)rau RZ=m0XsB'~q2D9o-e NDs[9E'톜N'!~&h`4cgPCmڷ~K@a .,n 4 njBI0C 3'ӡles%PlaB& -)<Ӟx7}x@]R[Ymyd*lXw5t([D,PgY#.ز.|x049JI0?b X!Aj9Q[!-DP2,OF BW9jrzIaݜ؅)!|M[?tF+ cTq@Z׀k.)#`:0G,a >ݵr[v !S 36NȔ#_4h>Q镀l[Aͅh F*ٽɾx\&LC:C)Xu %% 687>|n0uQ 3< EdRw z"{&Vʲåor!;E[9('%p>0 ]DʐDۅ`AR"tn)\8 vl'Ng&L|;9(4"$CYɺ~4=P8td1 QgBoN.dz˦vQd FD 3_x{ϱ2b蓛 "& |4őX33_3!@Œ~v& CK-Ǽ ' !2qR '*Hg]p3XNIy4x\Q,^ig}sf-q:T|[@pȼa 6eۂB2Ɔ 6bA7I}{n!QbwN[ngu0wCr8uV&$1.ṒbPWvw]a;|T.$r!g j!@ɧF| o@׃oouW{ ሳЛ]ܠ~ZԄZtQ\Z3C8px.X7=LSncD<U՚Jƹq4 ~~ ? U{TԾpt7-Zj1sPwT Ob2uT^&녟t_LX*K,g_4Zp2>s1U}]ėY O%.x`z|O[C Ga L"P%Nyn%*Ad(Ÿ5a* ǾRAjU4_ Z?0lvcoGgdQShE v,S4N{5Yƶ,gSz%toH2!-I sz.?GHJ{ OO)d?ˍ?ly?Rg4BϧϧJgFgP"7S0N)l?Qbxg%;) 14 UU endstream endobj 174 0 obj << /Length 1997 /Filter /FlateDecode >> stream xڥX[~_!$("c.  M[6i Yr$yf"$O(;߹49$4ww,)HahhF :y%/lU4lW)IIg:K!_[H" XXVP;2} 2)>s>2:ABe&hZdk~ ""b(b"7 dt1oIn@4ߺ]P3Rūx-J~O29QJ$GTySSnx~#q/U4aHO}ݹ2~M5:d^DMB*N7m5cׯnK=>=D׵&\x/G-2}>n'ǖTFH:]?Gl`~"jc1K(oeg/KМI EzrKrSmW5; u.hIxς㮼D\ҧ N?oTNHr)s[l#H[r2I!Ĭ?+BEڸx,#Y>psi/E H~91U0~S$.\Iu;k,nnwQH7K?т;?'SqnrĨw.s >/ProcSet [ /PDF ] >> /Length 36 /Filter /FlateDecode >> stream x+2T0BC]]CS\.}\C|@.ZI endstream endobj 177 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-16-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 178 0 R /BBox [ 0 0 468 324] /Resources << /ProcSet [/PDF/Text] /Font << /F2 179 0 R >> /ExtGState << >> /ColorSpace << /sRGB 180 0 R >> >> /Length 1873 /Filter /FlateDecode >> stream xYMoU7ݿ_e[P[ JH]T]P>*Tgl}xztl go]5輭Ci6b]!mՀ6t25T2al@@\C @Ly(@ljcH`col#?EaSll3h4^ GO8[G_Vj}BߌP3ui"87q-p;fsW{QWj!{vub~WPO?7/+ @6ť^\>|}}0`8?86[`w~ltbg_ٚ/F uԌ1jl+Yj U{ַppF=EB^E8v~k=uxgx}J4IŠ _('N!G|3>yٸqfO%,4G4^)>W<^|٫og,E?eb6XfcXea6XfcYeb1Xfc-cXzLc!/% *r8<% /JUT`k5Kn:a.Kدkփ_ zOa~EU/"u/R6,ORmZK5JK6Z)-9BެkWZ*ч sU`)ɚ%,!v\ |u$KPj#Pk^gTe\ת ?3N62.n3.rvق'Kh0:0/a 4Ke[R?X*T+2X*ldlI%܂}3i(t02_NsCf^2pv*صT$mƍumPmMmYN:ֳtR? KXjG%$ʷ*"U~ Cuko+~\ۢS\&Q^ BtT$}ƆO)33pnZ@& S@A! ! iXn_Wtli#ϛ4k1ò{;3/}N"'sox]s^ Ũ}Xp{%K˔Rd ZIX^x-Au8錣r)*b @mZjTZB'ZK1ɕʋILcR*1Isl ceE\Qm>SPMN؀onks ~iE|bܫu5x>![r1|V.Q@0`xT/Tt}祂m~D7o> stream xY[s~طXm }53ص#[Y0II@( Ĵͤ3b8{=K83L fy&`3%5)cLK|vLDČ?Yz3 [G~&Sd%!?<_') <.: MiUL$߬MY.8\AZ( h:7{Do=!g5{cr4r9pgOu&?E9Lˆ?~ _y!]xxUx8z][5Ked HpjR\X :h G+/վECL{)|-4@ʣ u66'_\%p2'Ew Rkj}4z;qWM}^Fk&) @)A#@^@LG6\o:{'o\`HJǴ` /xL~|?Yd%˧&0IW(A|a8"ʝ4ޮb;A lqB׎^J ˼c>3o0s|4k\sTK> 2Fw|NJ"X ߗErœ/NXx~WJ1 ԕjNwp+tG=@TDny@ט {76ãp=}MOnzR= ä|:)}P$N>C>W9lhE+*ș\ 7X#7@E(viD6F^ryKq~N{zND5^p$AL,_"/:eO^'P8ωb'sZV TxiS9#d)>ϓҘ \l&K*nZO6OO6%YZ/IL\cmZgI<ȓbͭ/=jKd;f߲(U !o@5 Y>y_E+xᰀUe|q20d:_: p'%ɧ2 I HTY*,A;LೣQ.L븜G"O?ILpjIN|J;{]Z)+ûO̯Zj-jҋrK**khPA Mzlv'`[If; &`K>4tq^O㲓kkΚCX F;#SG`}'԰FE[oWJV7VӸ9zav5bhq|snkI=-keqf; 肑ﯦ::'jM^ZSg?_ji endstream endobj 182 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 187 0 obj << /Length 2017 /Filter /FlateDecode >> stream xYK۸ϯ`y7UTƃ a[N%3={HĄg}Fȑ7N4nP2ZF2Fon^QiKu-")KNF*t))ɢu>s3yi25ƟV&Z8u3Xզ ˏUUe90߭}ټ )[BYkK1&I߭v2{̎Ha[Cr/?B暍WĩMܷ6K͋*z&=qW V5YW+Re}^pKr1{ק1^iJ8*40zvDo6gXni8pZ-4ti$.'Yϓ o..<6cǾ -(RȽ 'ثl{&S@52uWJp7&9ePV Zy~4fGfU|7}=0\*te0qUI *6@I0VR)-2ϰy`Y7v3xzWRv>2mϺ[&gOzXNj¿؜ Q(xy).9o.4pMr[@TqEgt*LPx tG$}$8Tgp <ܨ U2 Э+QtIr-V̊\۱M싀q#z9 x[.üȥ,22*E ('46'5 cBA# \] zsv uR@HFZpfVt  6m62EK`}:,8 '.%HzvyՔ̈́FYm]e5BpWBٰ :x~9a=24C{ \(H%4Mb P0MNJz?3f`wVdtvA&Cr^.]R {CxAq3(;&5oSEӊ sR5P]-> PąDQŨMym>'+s͛Uc,E=5jc_d+9Pn89J]}Q.Pk_)qKUm=ܰPUݯ7k΄?s (NзjTt]0:sr1J|߫,x}eu՘O6tNNj-;k(PCQ*/n{$!nl%YzueV(:6p,_v]+c|A^̃}1c U_>>݁L_B=iFE< .?㧲ƿ3>aO}Nxz'{Z|6:qu-ƾZq ZPqQ(B&x)?mu* CW./G$G)kê2ڍ\vQ۞;)]Rf?,1.$qxGEP\\ej,Tr)&95GkGo} u_LJ? endstream endobj 184 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-17-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 189 0 R /BBox [0 0 435 276] /Resources << /XObject << /Im1 190 0 R >>/ProcSet [ /PDF ] >> /Length 36 /Filter /FlateDecode >> stream x+2T0BC]]CS\.}\C|@.ZI endstream endobj 190 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-17-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 191 0 R /BBox [ 0 0 468 324] /Resources << /ProcSet [/PDF/Text] /Font << /F2 192 0 R >> /ExtGState << >> /ColorSpace << /sRGB 193 0 R >> >> /Length 1871 /Filter /FlateDecode >> stream xZMoU7ݿ_%Yz[(TBj%H] ()( ?3&h|3sڀz@Ww/G6NES6&QAQ}:S׿D==mQ_՟WQow^wwt_&8QV]Y ESP!&mup"k'Dό=jWyc/}<0l vc,8Ďm~ '?fѺ^bYCxo4Q8bЀc9n +u''m7LN)Z6PT"R=#u~p0FEMKIf;~ DyEhƔ NQ@s }B1I'yW8qvrb h1(RS 7pB\㩂DwHr·?lPe9 Ot0+U[kYsrBD&5^գ矎Wdz#oNԳ~xs~u:yqKFP4Tyݻםmgl-3u܌mjlWc&&p16-=46T)p㸇/ %"}x[cN_wRh+MMxAS*Kk(R.)%׿X Ei5b䇠*Jfٌ$H^$d%%DLk(*_$k?ߟ[EF@w^Ҕj),ȧE4C[omk&nIķir=Mos`~Gio.%2@~v&eqW%MI|T\?jvUS{c +qcvhf9mb+Be$ZmsT{ `.7 dDAusvO'om RqA4/m\0+W#qz6x\qS\Y[lg"[sՓk07S/9o:lyX_FXpӻeA(7zz*'8ڭO%QKy١ƛ83փy8Kshڼ6=âۆF'pc-%vUO島VAq1[;ح6͚lUʀ%v0 ¡ l endstream endobj 195 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 198 0 obj << /Length 2567 /Filter /FlateDecode >> stream xYsܶ_q::"A!Ğ4i'uE$GLl)}XG'Jg73}u.bnVEx%d |Rr.F2G7MeDl(%3j61"Mw*YLO3ưӳEdF6G'y נCaӍ~wH)nC6j- hv8{6@Bgb"up$|]uQ;@GUkzPٟ>WYL8_<`S9$ ?Tmƍ8{0|׺9x!HFtDO5ۗj>*A Cpg<*: G 3|pA#&1\N i-^P3 QTPNSף1E$z?O;6579 Tћ^w/[Q?S}˪0f *d_-zb0(ES3yYVv 6zmUPEஅޞQ|a!L}Wyw wĉµF(Q* >Ō8 fc\N>t՝0N~Z4w\T d,#r wWzi7s) /8~dCde!Zngg'hhumяGwq6TBi+B{pژ8u?ͣm^WGL_+Tg |<)zf`O9] )$Ii!-qEV]wQNƃG;9AMOXWh:\jq)H@m W Ҙڈ.;HFIu_Ϳꡩׯǫ$d&<0"@VTXuzb B8#)y \6u3+ +! G+ǰzg+)]i5M߽s Ơ.(.#,a'bLWs5(e!P;ϖ{LES{3g+\Ep`w僷}\4i(O9)c_(̈~Eƕ!H"A |ҐHU*pjW]{OX""=3L@0yGzаJJb~)cxHo& , (N$. $.X|aX?u6O{ )`6Z\,XSbk)pI0Gvjg!GbgO,n-UmPADÑ gtl'f Q\{.k!2ҥm60H}i2b`$\?4y+}Fy(twv\&!aI X~hwٶMumo@}WS~ll[d8 ݺSnl+@ Y eR?t8n x]Vb[[ܚye)Se̮kf[4'(I9-$^+-]θODkMuo~Anqzq␾͛[u|0[ }{V¿Ho1iz<42xGọ# M>h{T.%I@ %,fP${lFMJ2HlY]5|3[˯G~[5ox * }/B4q endstream endobj 202 0 obj << /Length 1824 /Filter /FlateDecode >> stream xr68=P `fzhӤ$@QFJAYeZr؝^],v"~;aK"%t))f*:Fgj6*ј1˥͹j '~.eDUl{.e P& zR`4Laĕ9ɺ-"EemaN:VG% jowzqz鈀2pD" L`q8\1OHhThv]l NxH8$L8"z̧u^/@KmOL"i {k>sk$AԷcbH A-'nL+bGR$fgo6>++SԡWtxΊǤ$@4,uv4Ta+@tTߢr^{`")Ҧ/5JN",Щdm?16m%Ȥthr0c!*!sQx5 g]}ilBi{0&%vC^<"a:1#b@IBE~,biBXu~{/;k,e0n Nf:S $~'O K"T#8гd6Swq[T"89p#4ެ E6%4uLJ5^{r@0Vi.fщy >68uE",EW Nb 5VCWIs`Hr@gxhz=d꧳ **(H\K/%CrKS,+պɗ0Maϗ{̸]2|[j̴LW~Y,ݴ@pU!4%ӥh{}I-j `Z͸Eday|zH8/Gef٪Y#DAJ3ۡiKӡ$(neUi5F1ؒo97-'N,,/u^ Q?i\O@5gA4ptA#kȚχ*ߜ훵Mג([5'P%ʓu榼6=&THy^.@1]vWn; 6^2PwKb.q$}C<X[nL"uV6&Qq H$g[XOl4AxxVI ,{$ްn ȃ"3kyf;;!C_7y[VS?3Ur6|> stream xZ͓6`왵V6ԙXmf0w6x1I''vVv~`br G9y7}t6Oѫ9O)q߁͜sޡwz $?Iz蕒0JOzN<R_"]׌~[]םAjtFi4Ktke:YBEh6gMU2w3*!0v4O;-Uu P Kjθ]37b%\1q@$HO0=]Ǻ2paBJᄛng zpr,'*yj ˙qS! jׯ{Hh Me5w r%݇c+ ̏$Fr$=i:aAcu!ϙhOб#Np\TOh0$k4JT*q?&AxGe}֗3vˮ״28'\ dd!~xV&U)1az}/loi)HE9{7-' +|1ꓕ}x"`}`{(R{6Gn1fbm@! عI9-.&B]qZ4UZ-]٠M `f!4kFEm jK}@ öwqǐQ k2 4" <ʇ2F#6 O{~9V6Z'Az=`JO&ZcOuOYl@f>4OIP:i$-s90os7ES=P*#+Ur#/ TٮuJv d}.7 ]lY;cQ`WV=v]}iduJG..u<_eWo.SIX+kei]\ xLYQ2 .D[R:HC:N0ۚpwMVuG*)g֌j PSzlW 2_V _sIHMl!D ϡf۰Asl}UXW/jE6Z[y橊o%SE ]Cb*(bI8ֱJm Չ|gkhrT᡹5gWZ?0ب+GGHc!&nS;g(55|Aُe\^z}ǀu_cOslҫZU|aGG|y䚔b0,sCmi /#z endstream endobj 204 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-28-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 212 0 R /BBox [0 0 441 284] /Resources << /XObject << /Im1 213 0 R >>/ProcSet [ /PDF ] >> /Length 36 /Filter /FlateDecode >> stream x+2T0BC]c]Cc\.}\C|@.Z endstream endobj 213 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-28-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 214 0 R /BBox [ 0 0 468 324] /Resources << /ProcSet [/PDF/Text] /Font << /F2 215 0 R >> /ExtGState << >> /ColorSpace << /sRGB 216 0 R >> >> /Length 31521 /Filter /FlateDecode >> stream xKnr6_ vx'Ԇ$AbЖcY|.E[Rwyнbz"?o-u/?_o~_wUJ_IV1w_sy|{OV ȗW?_WW&^^>o[dw٥P@ַndo?پ͂g| ʷt ^u''xP jÏ^ַO-xv|嗒ַ' x1|{kǿrz?+i?W?ox2s[?/?oGܟlw}k~7ƻ=\} _wc=0A -?7bw;w xm=ge opm~=%̛!o1z[`Leҥ=AMG|[b = xߢ_}2GU0\u=Rgj>Mp4O,4jsb2\oEOQGǨ\wzn?{TEpax>X xwFK%̻L oók౟g7׭ p6()#{="W {uXbk0}:Cwqup˴Уf+?jg{䢷85d2o[hj{(z>|ggj7=2~gM_m.ػwa;{ yڎwC|NI}PKy b+dEpnҋ?>1ݻػEw> |_l7 74Y*I 7Q l05WksqPz2ؽ/X0|'7Hڿ0ؽW^'j=r${pl1zkEc8sGۿ{ =݂;`a8: |ۄ/MrEޟ%y4줄y?H[\NJ=.cb'%B.ɣc'%lb~$0{NϾb]NJrܒ5L|I;)a oH+c'%QoNJ=^ɫݒyo×Ѱ< v_O~וnNJ=aݒNJ=aޒGNJrQfGx͞ >[XIn]G^ =_.ݒGnBlkLG7#d~$0{Tj{!y k~K ycS%m3rK7کUZ%֜?bNѽZFz\Q6yH Sf԰rM7 ۮ{E%6K nH[o+$#y ord~$+qK54(lX0{4J!yLZKp$c\GHrb>Yatx_uI ;ArJ"AErKAkIIZŪ䱠#Z81O>oH AI)ydh)y<ܡ߶w$ $ < $ X Q7 KF[ˑ<<)yLjòJdA#AӖ1rO J AS@໅pJNwsmd2 oɃ<,yq$AɃ6#y6JqyPHCmGm,y\6IM2%!ëq<$y4}<.$6[ ߮]8wőg<] (Z~]b+^|/jޠ@-}O AaDW|ޮ瀱?L O 8Y @ɷ| {[YWn1B O7ianlڎ*\n؛s/D{4|읢ݲ`ʍ?Rco_16 ‹/|{-_o7 cp5?ٴuoz16s [k*Նm[ޖ!?'+NB nL46 ě/~LlL%#2\@fߴ0ݫNݖ]q ؜xeڛopz"Ïp!#Gj8} pЎwq_Zr~>斱6{#q\‾+.b ni[ڶY^|kI8_a[J:Z =ʅ?+[ Z؀[s [k[fm@xbx6F{knŗhoonX OЉx.߾[=.{knŗho]Q􎹥m  } !5;Z:y/ =7拴|{-fP-f=<̧1{=6~ hޚ[x%ڛozeuY*< RM[m—{snŗho{8OðE'd_Wp3& 2m@>ԲM#hsR ˴7ZK]^Bc(Lt=q 8cVڛo>|HÜm1 88{[>ʁM{|r~6X#<6DoH2)y緵pmkaO'z 6xe=ޚ[qt>Z:Kz'|3N'F1 a ˡm[wk)?M.ű0JTnH_o"ܹaI#u_.pʇW"%Q-ͷحK*>5ΏXKG=h#~3?) -|?Z"#ޱH;tr|'dp|h#=[wxdWs ho:+2 -f%L9Nx; D"x~n}p}s /Hi3-s[>̈Y>ORɌ&Y6.,[thdǓbs hojM))@퐤N })Yyh#AdÝΗtRk|vynO*Ro%nyãyɩ%Zh#gnw-as2{‹/|k-)4%12e=uRy>I#f>?sCvH =7)ΟM})'[MqrJ>@IB8{{ZQ,[aRф|>2@ M-OKk[g[X<)ho(c)-%: e{# |'w ZDk؀>87nh a]m=ŹR̦iϡ41OKxCa 57Z/Zt8\n@( 81'v-pS|j[~n] )O.`"8*Y,"N*ix?'W|⌑9 6ͫ=7񄚱o6&+9=W?Q q|4]gbP:x!gU>vLtK$OO4l$'Wt'8<)v?bFR YĆn^žT: ʌ ;DKAWn@jÈj5b='t7b?S4 N8ݣ"ÌM@ #N1b`I쩂Q?y%=t& 0`f т 8ľ$h})c1|4/kLAB}3Lg%]Ⴭ_ XqCWُFcfPڻgLD_>-tm9s{JO^7N]=x^ү/[9įGl~Q"OP@&Y=&bƾsCʝ >-OU$U<^u\S~]żt(c[Vg˨]?j#$PZ)eQCwCcͫǪCvZ_=>VwV/XmLfr5џLWo{WmьjKPT_AZcfAEb?ǻlM=Zfe |܃cTV'qwrvzNEНʭʭiQt>ڭُ_Z+[ Zk<%[p;տLWd__Ͳ=%.s|/Lm02ܛˈ„K@qûYWQQ}Ѓp[ {pu ?O3ȴWa8o{ <`͂wQU|Zt}j01`y07'9&.޷p1#9gj$jc= gaϮ ȂKKעJ<.Pw+w1gM=T%tX0x%QbٝpGIQ)(rUW5bAeJ]mrJ}GgqZ GQ}rX0=w7{Vt2ﶎL |ZGs\HN x?zjGڧ3P-G;BjGIڣ(QUϔ)Kw+'+fnS oZ ~ 7*Swt)H1la\P-uWFR,,0eUjy(RiAX+=pwzP1(RK;* TN߱>_C~&՗Xhb^2W4/Z˴pqi[xG Gǻ(;{LKM)*r/Y~(.\ZZu_=jcwLEcsݡLUhT6e¢YPVG1VO`#/f8l~%m?2L(JېaP)T0{ ia]̷ 3-4LفV#8 d%?k@<2G7 ueTJd򱾀")d V|awd{Z 3]dSs+N\28^2Lq!Ti8u+;z?ڝ'fG>,I9&rH.)ڭ&R82LWb~$<~ǤWnDdwL6뻯 ӢB8}uca1نj$Z˫i 3M%caU=10-:?ޏ\$;L $wly1~ǢG֕ kRQlGoHym;CB8 "ǻψ=u[fGe÷ Cˑan;Lu -ԏ sa(rd#v#v0P02 .G0ahw92m Cˑan;L=v[0ahw92m Cˑan; e] sa$4 H,`2e Y9dÄ tߗeC*02 .G09<$\v0LG= t`C05Ηu0&/a2L=(;(0C0a}0&Gv0c󚉐a.;tM|!\v[0Dr!\v8za.;d 沲te0W\Ciڐa.;L³a2Lg GP>mv[0a~ -[0ӱ2eQ2e~Ҽea/ ìx-\vw,[0.; dq0cvK03[0aT'7dS"72e %\vqa.;LDqn0:~0靷 vaTu7dsQ[,-H< srب2̱XQސa.;;z[qWF&]- Ag<~.P;)8CPrj`Ícn{? +i%e֢ -}v!L+; &Zںwq_Z moX\-QxL61WMP:s-)1K7ZKkc .݂pjPZ)ܓ#!byu5W4o+h;"o=K|{-t¼b㵨5B:)l9x\E0vp7D-S)l1)ho[7Z%i`tzNξт/h{͉1K7^ jm3hZZOq䆳;cփopaVPu8rj-;Z8.H_Z2]p[u3ntB߽qE+(;e?ZPRߴ 4qʾ|oW^Zd;eßw|BiZqb>] &QƋ/|{-EkJ#yBy>"tݙeڶ39c$ߘ[7^KAV!-4) 5#" nP5WVvoo籣f-ͷ[<^ E-_6p#܃w<~0RpWKjA[~ %yNA{$:wy\n 0pp؊@$|93srղcD[$$|m|po:wL1yc>x#hR_ Ǝbnŗho w/I_WOI:K :L+;7Z`چcbo-ͷג!,婀>};,; cփ}@ (* pBYb1K7\ Ls,@o?ZW]-SQ _xZO~M{>F'^ DXh0L\ٻ]_e1:;h.-н;L-[Zdm=ZZ`މ 5yct3J>J. jM ;M6|k),C^Zr6;kbw-!mԒkx$ZԂp{<y>u,Q(ZAN0\!*s _}-ho kQڝc)hu~]~+CD[d--4Q*>EZˌ0:r@ &/Ne08b؛PXӮ\-l\WXHMt~D▹U#8}'w9cF:cuyn#7^Ku .׉ؒi{“Uh{w4|MJ@z ZHo1vs[p|{-hג]u=@,_W ,1_*\+) ыm!1v s ]7ZˈpQ/WZtJ?!Qc/pm@iwsZ\Ec7/17֟Z"2"u6:5Us`os~Jesm V-|p ڛo%BnA(DaQc>?3vzZZR:&P]-|p ڛo%nR~VwX_s?Q8x<{\b¯ٴ( |%Xz‹/|{-fZ ȻZ:Q8cփ_͝JSɴ( |9'Cͷ#ڲe|'y(1GM=(F -|WB#-rM>+E[y(P1/WLrqzkiS9yn{n?T S7\r5Uc-k $c^幅o>KA{p6q !BGujWAc|J hASТ֕6ss */?&9܂w0*8y1H{C u ;|17拴|{-\Kߋ[ ^59r{#-5F@т7hQ8Ǝ"\SY ڛo-ZG wd:2 Zd9E(aRvGZ5AD!Mܷl1WV|n-RET-1vcnS|{-₫Aw+ (%J&$A[Ez~h%-[7Z6YJ@qNZgtƘ=5[ܴ0SK1vtN7^L2[:Q1(1?WEIeۛM9Ǝ1)hoڙ֑݂ 8ReLbJk魖皖:>:>8ͷגl+$3_^ |QAۜj[i:68ͷ֒g3^ʘ/r| ش%N-ۇbZDQ:&pi?Zf$>$ V܏(=W u_uM..v-|p ڛoT;ZCh'{I|w@QjٚiqQ;]6Obў|z%z%hJ]~lʹ4w-|p ڛo%YLN+lu|IgW'J;i[S4m汛'kZҴtwsG`'I|O]P:O 6Ǝۘ[iMr~tkZ`rJ3ߴ^ ^ ڀ]m걛czcn5I|{-ղPYxzeףw." hQ-=Ǝb1՗k"uaղ;-`^XK^Jm@NIxz-|& ڛo) zyV^-1=OTo<.[>l[Ɂ%롥Oc"FKOa-Reo"ϴ^E# Xm@pףH}eZ~XͷҬE*jٙ?O^ʘoX~Zm@ÏyƎ1-JZXKbU|+5J?fr/ɴ(vcG-[lM7ZzERe=z%x+c-z%QÝKҌCdri?ZfhZ\Kǘ=OdڴJ;+ǡ"ƪ13'*}ޘeBTnԿ~?q[^W_UtxUoʗ[MuOMpUY%y,'&Rn>ф؅Uc !96 < 3_KDmpEA[ ogDhCEbM-m|Wz˘w.SDaOt3:'v_¦`Y WzZ o-K}{~V?}a|s{G37]wew3[uEw*K>i `=q&j9~Ku2 Dxw(pzf:җgC~M,#Cߢ:dtL`a&y;4u@:ttL%ĒHSQ+KQGF\(ɛwUF\1)/($Vv=o,[nt/r+|u0T<x]{U xwЯ9~;0ස*d_9L`̷oD}AD ?2E~Rt%N-ЉrB]yT(gz߻S~xy7%;]&;޺~wT-L}r],#JO;'厔}+?=oU̽n?3\B#̛'l~zXdA%rC݁o5`Rpi4.W~zvhN0}v@о%?5vۇ2mmwJOX̌vX[r$w*}ݕZ0tg2s@phۡA[w&~7n3Dt: Hxqu\p.Kܗ\+s+ ^;o-;&FZL_G +_x \-`Za @ݑ"׿ fWx?A9)Nj@^A|/:{氚v-A=;tVMpNwriQo?r?q"-~ڹ% o X,F7w8? J@MU\Ciz%WyPgeuB X?@\L+e˵yN*wֹFhGUYH$k yᯱsM$?uK4;xs^w68iicj檍1ciX79 v5x mKzU rXD^_ǫ%͚ ՊT} H>A.B7OXw` UWn? Aյ^aخUoБ$BY<{o BfhTHW,ch7 G:0o.N>[K+8~+H: D5 T)DTw yc["%cZȗZMn51o=leNpR4& EߚCh@p5'غ敲V&0ohuo*M`P7~Cx.}cX'֭p @Mp(8&=DUa _eGҥsaS[*J(֑%O/5w[;l^܊t3X[yIphV=̓-p=t"8t~) @ ǃ]<}avǤQ\qPPBT7rhؒ&\Hq:dạTԔL@`"F47oaK{~ίUأ p9D04a|4ba<@M04@PΖ`h@ c\pq8KA60ڥQ  d@k1p4 h cO#Qӥ `hϥ= c]8#h c^ j|(e1@F:F;eI5Q@rEH:LGAL f65tA1@X$dc dmuq4ĥ->,!h C:F=H,!{&i HKH:FG{O8qB1@4ϣ@Q44DяψZ@&cԣP<on6}; ͘HQ?H_шsO d@'dc фc̽BV'SIti tbr|?vi@ #ۣP=n4:0BqԎ۝QthQ4q{3s{*̠Xq2ow?Hٸ=M#jq)#kBT3n7F҄3d\^ Zq;1&lÇ5!4 ɧAq(rip4 :,B+BFZq/0T VJq;/QY >A_E]Lܞ Q$E[LMHj )עɍ*bP q,?G@E(ǂ=: htPp+ ?*.vW@k{"[މPng4:'Ba|uvU@[k"S]PnGGHHQUp)%PI.KAnn/t%BG8R@GX*J:8OD:#\^ tKp{)#-:@D:B'RPGG_:奀@D:#\^ tKp{)#-:@D:TY:B#RPGz#\^ uRHGȲ IG8N It㥠x[tYBuKaHpy)#XpI藰py)#/aRPGІ,x)# *E*2 Št㥠SHG8^ D:Bx)#4.%x)#4:#/um:|KAWpY^ %x)#TZK!`p*K5SGG8^`pE3f'x)fJaK!(x)#(S:RPG(YE:RPG(#/EtR! \XӲ'CUèCg ڀTQZ\c׈‹/|3>z GWNlAI2$y8ͷRbL`nAE4KA<_{CVvolKi豫kSZ GnĴ":ƮsoH29Bshkl.`垯??Lk(n`<㱣6x-Z7^Mmob yٴyE Ơյbn ڛoqqn`\ǖ– yEVPs%hM6-}m-|ZA{pN~-Gt Tք<ߘ{VPsh8M!cJ1kͷג:h0[:~%. >ILzv h،Mk@cl[x%ڛoP[*;QAw<#A+T)~kiԇ[mUsN 7O6VPTW%-| ͭķRepZڒARTLtAX HU?[i f]\4Xsͷג9Bsղe]+:?.&ڀҊ']$C!]s [k~"Dт;y&kWm}EMwMA]-`1-rcl@쭹?ne}:[P}CҮ |:;_5TϮ-d5-/bzt1kևT:ZP iH]5Ae? EТY]\W3~xZQ0 xtkW;>YVqoC+cI!Тgw7^Kw\E v<39!@z惉VPuhdZyzZ]vQ"wX#xqj;SD+-M! {J1kͷגBЧW5W~|L+6cBCs‹/|k->􎝖-9t5la =P5j)´p#9jM"^ˤ>T¦ʣ~F|+6-o~F*!ElW97-ͷ2+݂7$}*=_g|ODr?Jn@Lcz^|kiԇnŠwkOvJh jgעTdu d‹/|{-PZkhO+Wqa (Xy+ķYc88ͷג8Bۅ[(di aL1& apK(cZNc -|ZA{󭵴 [ Fh#$COJAk( {$ LL'<,"^$kɅ%CBhN.0'h PO˖I,[3lf d-!nx۠ބb^\qHK|T}ZAu% B;xFbBخU^}~)uZU&NZϱy5z/Ym@,:!7t+v.Nll"Awe=ـn*%Ff}\[$ߙX/Z@OܯosiI|̈́5h2B_˥䖂落G;s錧д8KE]5:8QtZCM8 ӽpSǭ&%[lWDBO V f+XDlяၐ]ğ7An6pږF}s KnHwj'q5BF:+c}):VRQ0Ѩ#g),ū.%|xYdpͤKM C;΀j@x:;c՜’]}\H?IZ(%W!"metFHBj_JttDikB&\!CSXW_pj@vfć=<[De6#8tG:DWgk?$VܐSCSC;\b v%YNLaۢPCS?!ۣx5SūO qN dxUDev!FtJl'j@uQѨ99)l@wjmTb7e.hScj !L$=j Ӧ܈QZB7\EV)!d -t/$TB -j=oҜƂ],jGȰaS HH62e0E؆b@Q7M_+E㽪 0sNcɞ.^~F د8'PI'*%𓚎 3&B๋͈Šݼ܁t4Q= ٰg 骁9DM:7՜’x5(wF.j@逜ɽN+6&cQtFj, H:d{_܈_OqGiFbS 3#إ4!q=(ը-3),ūه q"WCgeD/z>T+<ء,t @7hXҨ9%7x525@Ԡ_5eX+ŸDc+It {2+p܈'P* 3,:c5?sت<(aTC/ʖ5MRs&׽zU:V95аz1A+dd[\b`p5ЪFv̮v)!ͫG]煪?>aiH,DD v;FЕs;Z?y5݉0:a1pg1"r)̵ >*аVEuiJ7Q:#7D ׫eLd }"tf|!ϠbQGx4%*jk[j}yNm،DG`v ]w&9^,GT &EN.4cqU`TweCA׸lCš=W <5(9b!؊zTF#e&NJSX'FJEA jUxGllF5Fz^|7 _mZkJZlz( )Ȟ[Ǹ;x,BuD(+B}XZ-IR=educR>Ǹ1rLG ^ FaZ %YJ$ A@U$"(OWPN10ճ/(+B J63oY Sn׿"B780L Fi"%{8쿇GL4=J\r[r f!eІ#fxqMUya9ӞPTFj&\%?rK`Der (p1Α+p.T[_9K[m}ܥ)O|'t՞wHdY[{D{Ig6M6,߬=Es7Ua@mndGAh)M$GJ<;n4Us9*" xAF.f{rY&7ULv-pp4^ޣk*L⸪0'YY*9`*K7xZQ<4"\đ\b:#yˏKsrԛT^+;r#N4r:5q4ˀ]U\&vxqU+.*Axڹ".i5|Gq`pJ= CpY s+cx|fz[ p Pa!vb* ޳p ?U4{9"??q|D^P 2r4%!R'u I@4h\E; ӗ8n*L/;`(=*Qy?cHriX~e6Y⹶E**IO( nkT) ߚaL&MWgc)ք3OO'=E 抳 RrwN/]m1Xo&k8jEsg69Eu8 Iŗtߚa>]50xeq]*Jh.47xq6P+B^ExEC^L94~+.E>(Ϊ?흱za֑; iZGG:.Ĕ>ǰHՁӻwݒ:nꚈ^w.?AHA\5!"8ԦGeΏ#/Miu]Ew,UG5p \#d:i4qU6߿؝u"=W6'vI]`m2Q0{*)Ixs+^YfQ]~TrЄ.u?y!?韩-Ze!Cs U­^Y} Rai ZA٥ܲiA 76B|sskUej-j=5=c1 y>0ӵ|h-lтzM)3=Bj< _XDZCGZX\1<2t’'}e@~WjXleJW L{^ +?GmyNaBAwj⮕VTM@}D D%~#7e9%7x5.ǫ j ,LG BnA֨5܈UghkYTÃDRKetVx܀~[ШЕs +HwjǞ|8%Ԁ.-3`]W9Ox4>:] J<}5d>E%>ߡxSXr#W8B Ncԫ Dk,Q7MutJ]1Y3x4S5xrRtS/U'#5EG`Z2]Q+$Vܐ3ۈXoZB/Su/mN@#B xҦ+u4js KnHwjqDśW iVAX@pX"t !̣f;[d_ul-!_E7uLD=)ȡRl` J]1td$K0Q2Mq"E0OTF]iqM dQ |X^> E֫M=OV`݀vntB"l4*ٯrS* [;aݔ\Ѱnkص;U#]}|(*j@k7uPeLWSXrCWw%uvRo{r</eP59%7x59ce݀Z@u"}"(P`":G(J tn9N8)l tb괋-R{Z l tM6ZtG͎ĊrAW,run\:*ot"2 .Ш)X),7Q>E(\SEwӞ.ŕ#Eܐ&i'’]}^FS"#$rKnD)v*!57d#B&k6SXr#WO8 msudhXGc4]Wcؐh:Tun=FtbS(w ?u 㳈BtJEjNE܀K{lӜfۇ6ͫٷEF!JnI:Ov xR-(":Q b3fKC#yNa>?y5M*jsO.>n@2KC4MQPOiĚmQu;74T82<Mv^i֨2x+ffeKCJQU'[dtŒ_wC)L$HAG t.H6]6OjNb n^TVmj2-9CI=؜P86N5FeP{9J't7f"G \#v3AݪOD3pͩ'Ґ5h) Fx5E9kMg6'5YEg: 0.ofǪen폅N`ɤ)̞&L 3n@e:$k.^>wUwϽ&1@Is9My'}Q7YBevmJpū٧Qu(J`9& q9їG~o,Wt0]6O `W) FxF <%;k iҜ%& q9).PٸZreTvĊݼ}6ײĜ+,II?ұd}eQ_Sء ШL:6vx//6~ |N < ?;ة<`8??;S ڻμv4C~1mq Ďr x_OvGzvpxwcaNPz xx^3F{yךZjt"O=ŷxp"ZtM+ vw%[v& VQ6zb˨Uw_?O׿4Tk/o~}Tb2zf MW?(zqN w7R>ĸYL+($9$561)Gcb1ɗio^`䖝K ˄2츸Yxxfo0V xlB͹7k(-M^Ȟow]MZCIIR2I-"^K%v R[ ~Genb0vKAԳi3>9[WNZ /kjѹ;t-? k kA52veYwanl-Oq5<$ϼ*~tCkiRե0CMk'.ִ&eb) /[s2NEͼ%Vn\*f:XI=jb='t7f^50 7Q$y؆bP"A Ylc6FMV =FtfZ8 ;ᚌ': DXg0ʮl@^-4*vŜVe#Vp0U<Ȓ޷ f>3|9%7xuRrhKN1eaX oj,^V 8g`j1[zvI!ͫg:nwvTۙ<4v(Kmݼ}*sid\BHWp>]*:'R )ǃYlӣ+sKnDwj!cj; /1 Duv̬SP5icSXr#WgKBax폫/tA RxNc*;@405HE^Ls+nj$>1*هfSL $uf76fΆqҁM"\s Kn +cū +PH:cw1<ӗ5v`)撿 ]tǘ+[:Nip6Jx blD'7Փ2DS,2#=ڮh5ku~b5,6|:v$ oOU=sBGpu{Wz{FT4='V%ǬZ칤 N6 *-MXW!puV|AՄhH)۵.`6ۍlv4tW960F!rTBЅr쪩!jMdi]؁˚#1H쐗@L#.Qg bĎ#m-V-RMEFyV"KR8@Fip":3B\(%2\5_pltjVO?<8(4\h6rA‡y9]40=ZaދCR%4D[И y2Dg-x ^H֍^]l P݈ꢵĞFt==vql.+o⮩((jYzBꦯY ;dOK MIr S7O^j*Z$A^y[B~2#Yyhue[evBF[_AH0֪~&'V=bMA \bSH6?+=hq,A˒WM!B5߭Xן=ȂTR7ɦ(W?K$ɓ=} Z55VX[cUò9(M1d5EGΣqe'rP>< KꕝU =X [=hP0|%] =h{y]v<9{YԊ9?Z-oZrYRq+M&)~{Z/RxWy$ ꖄ Z%j4c!F9յ5]MHmߚd<Oa<Kj*:$Gރ c-DbZ*p! a=]F՝dyU;û!jYKQ,J v =]¸+9(REUZJTSQ`ZuPRrM=]M.!QSg2:^55O1>u#1HdOȞ>#;OFt;2>Y^5|7[ܟC}ty $] ={y[GT-ٜ*/asUSUSQj +M+5/$=ҧ( ߽"UA ӪW1HbLnzH  =ݨ&{yMisKyܔiջeSMEbsJbŘT~uEbȶ@̅jz{0bL*GMV1dThb5.Fs44`C$wJ'3Ff?T~)8wCVMEӏhUd+ƚOd+;1…f{ySi+KyԄ5SME{~Ŋ199P =Y#èR5aZ*TSѤ#!=X,Vќ/}u[$ƥ$s ]0d/rKu+Ï&Bü1>9*:-RdO[NdOUA +k (jU++1j'Ata\ŘOlLZ5H=X '2>>=ݵTBl #ȣQkT~)/Dz7=VKDƊ5H Y ГU4u/_j2Z|>'VßҷTkU/Sĸb0 d%R\WT>iGL-] E;XѸ79(\S^6&,xSME j㔃ʯH ^ \4=5ec|l 4{Z+ƲkH ^ \D+Uh#0zcɨДxcG1fky\$U ГO35Q1U䚊v#A:ŘvEbȶ@̅F&*My<ת\5xc|?!1Ѷ2^)|_+/ӨW>WBf45L>9Ҿ"#ME &+x0Ҕ1~&BüP t@u$edK v+Γ"/cօNKjQރ}"#W3|;nWzi?1I>f]h=X '2M>mιMՃ슨bbˈlL?7T4 x|b=_JGGXFwz㼙m,aӷME'>'c׎ ~pU'SNދU 9/訿֍ӧO0GB5ݘˡ<v.yW;ouMEV%9 Ca9ؗ`Bd.tFq([ΣQ#w<4YT`]ڞQx Ӎwxk(n4GHE!oUD^f]Ǒ1C 6ӣB(xʓ.&8cr޹^~5%X Fr,(g9ŻMWlO<\wNv+&DZWEMG OyV X ǑA-7ӐB>y4fpN奚x JYG[A8x-h2\ Pkh3k4jGR5b>Vz ~Zn--š(.:A*xZh4dThb59 ͻS;c>wGO"ÅpVy2ZW Zyrzk*J45ݝR;h `ۯݘ<CfSeMEF}cqf)}oLhIÅE9^y4J<K| 12q}Avi2\N yW]SM 14]ϥbMG OyVO>`XmL<Yp<"Σٗcn!I,_=XDmI!Q|bw(E т#Xc!7* (k**4{^Z£gj Ǧ.ԛqɘ2cPeZɱj*iK4{~v>hMtMoi`ɽeP)]82P`t3K;yy U|b^f1B*L/rӋGcj6y,-IT4['+Q(8hS *yd8<x8qME;OW&m@A.FdО-]ڴf#7jM^9jn 45m~wKPB5B0oBcDtc@;p<1P5-/"jdikZ𑓤C­)T[Dy4PDMj vrMFy/Vßxsts`J2X(㈙\tOTK䨔eMȪ>^Z1q;99y/+Q#?0vMA('Py#cw!OUb'-Ū9*wD-b52:ULY%;PYdHFI(ǒ(Tc<Ÿ7 )80|/7z%Cz=V+[jN >ae;*U8v른)WV^9CSiGz~(1)2ߨuyx?~_FS4*+1+W>ODyO^Z> 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 222 0 obj << /Length 1944 /Filter /FlateDecode >> stream xXݏ6߿BE ?%E_kHiJrۿ3ml}$r8q84v~땀'DVLk8ٺz+WKQdB6Vq`Evٛލz%+CxE^Onw4#}ML7+Eo'kiswzzԺ'XƑHSO;|DuяԼGaw:T>3s &z_s`"LE K?Pi铘B"fB(Z+g+-7u?J η=@Q aț{hS~g@|h3*m53FP\D" z L)yȵRRT1 FkD~f'MQnp`$o FB\@^=}yV Oz|ljKVvkzLu[GTѐWy7D7PͶI. ׭|)o),X̩`U ⟮vر58.Y09Sš D=oie%4 A9Gݡ2 n# igM>{){{WSpf seDVLtstCBs6HXJ*rιm*[#5X:#WAlM#͂rwmwG/}`i<GFxSy(jpY?$|kQ0]24(,-==cA{{]P',m <̖B*i`*B%3f3y P lȆ% ψe)V T3861ӌ7:r䎀]rߧQ4Ō+'4*d3t! Ԅ/2ǖf7@ĎІk\:6_ 54e}w!8{nx1XYY:'j9w ZWF7|qqK॔ 0)q \ں:>F7ϛSM=2.-K-!uAI \'aZ uN8FÍqF"Zf)%Y[ҺW|26I #7@WҨ9첧~ᙫ]X >/ProcSet [ /PDF ] >> /Length 36 /Filter /FlateDecode >> stream x+2T0BC]]CS\.}\C|@.ZI endstream endobj 228 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-29-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 229 0 R /BBox [ 0 0 468 324] /Resources << /ProcSet [/PDF/Text] /Font << /F2 230 0 R >> /ExtGState << >> /ColorSpace << /sRGB 231 0 R >> >> /Length 3680 /Filter /FlateDecode >> stream x\͎S>x!6Fb aٰ nv7Vdw 9dMUw#?}y|qr\,W?tϚ_9~xWgB8g}A{_w_}}w|wtpsڑB9k;~YR>{eYˑJE]dz{͂ZMX ֗+k|vޞKb }us^39^xA+I/?i<> Ͽy7w5M7}hwޡ՘Co~T޷}_{[<GexT2?&kcykLW5+ZΒ] z{'v.qb`6>I]q~\sb> g{ݼ{,Gv="*C ӈt/wWHM\[07XL&kJ 3NEG? G/?x[-44?owW6R|M9Xs,ϱ(U9XcQ|E9Xªs,ϱ(>S9x*>Sϱ(>nR|Eϱ(>S9x*>S|\x*?S]1n_4슏q__.ǘR|i,J/ҰCw8W|swǸFW|[vXWT1_e+8&W|7W|St7qu7p8gW|39!%|L.C$sbuHtp`iDʕo4 I\Y"U|!]ov8K|>R_#>ti=Di cj 2e@K\E%iZJ<%6gi fZ DЊ0e Z2ww n[ +?|/{_[\ ^G7? O?:BXx_^GO&#-PԏB~=_}sй@t9_ endstream endobj 233 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 237 0 obj << /Length 1640 /Filter /FlateDecode >> stream xڵWK6r!EZG(P4qCצmup%j_CH+)Ni/=~<: 8f`[^\?]|xZ cT,@0R4ؔEf [C}SxG"r֡)3{lz ׋$uMnx8Jv;[o"uCbqog!ZkH"f8kޙbIW<09;RL_-e^DixǡuS24`彶y]!uC,:6]uPS9>̵_kln!x9wu錓 k;+CW֫{:)x"1nnE3(5ɬ1Qt"{﵄"h / 4:+mMcYY$t^ՁIG{@XDQ*}l 2D ]Ӛ%j eg;婸swgHudbq, nw:Vam!Cl^]ƒc1Ut6Jd"xuY7UKejKr5EZ#  XElq7q lU58,g7+$c9e!!A)!ο>}Y?^Ihs`A;Fo̬4{ R,p-ҹ­ANa ~j8r]nh{*^}LWL6.Џ8acFYИ`@j tP횄&YJjE2"zT'̔xexlßT bUxZ"0XoH+Vh.msia}sL>/ProcSet [ /PDF ] >> /Length 36 /Filter /FlateDecode >> stream x+2T0BC]]CS\.}\C|@.ZI endstream endobj 241 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-30-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 242 0 R /BBox [ 0 0 468 324] /Resources << /ProcSet [/PDF/Text] /Font << /F2 243 0 R >> /ExtGState << >> /ColorSpace << /sRGB 244 0 R >> >> /Length 5210 /Filter /FlateDecode >> stream xKƕ+r)-#bkal@1Q0H [ߟ8']%eB>$IF|<̷/n/O=^q}{oz7}Sn/?ko{n?OS n$Mri{=o{F|G9}1)ݳ|<۽Yn%{K,i[eW>~(答F)U+zI"g/r2C/ZjMlxLCwf*YUd(nzXr>Uug)Ǹ}MS':Zҋ-Z~\Ҳ^eէ^(է)r~rϦ|awMy?nǓd۷wWQL{^*?^friڏ7^drJ1=B~ۉrjϫ/wv6?}rZzU˅:Z~XM7ܮ!Dj_Ga&÷?l=d`'?#w~㞛k1=u>yx+ڶu${Jщz$ӏoTxAwlp2}V@dw/}JYO1w ܟ:鮳ߟ .W߿|ۛon8|2>Mp!~IۧcG~y׬W{}s|>|*= K/۹?u IvPu>˶mUsAsAհ{fM>4=4=dl|8hלBȘfyZHJF!!"1dCFHH|1)s&#dZ1ezr0dLUe(׹QC62ӹ! ! CF~>e*!dm!CF6g2e3d;d}գlFlCƜ"d=b(\6#T1dm!CF}E/C<[ E[ɐQ̛:RیPfj2L1c2d}fjyE!dE .&2CCƌ CF9oF>.?ňWK홏# GTG9|ġ;Cok8.P=CZ) >>B}͙|Dј&hHG3i0ӟyG -| _Dqzwә|>dİ'7!MQr@3>]7<:Otށ rx@ K  :Cy4=0#'+@\<.@RX8Ph<` C8> w`",!<_X``KrYlk|N9D-qlu@MP*"ݠ&|/>E:(| ^e^س^ܓ^y*KW&6U龥vǞ[\Ҧʶg>ѷy2X(M(oXeN ,0}`P ͧmfS2[Z mɉ W6@W`N(Jh䲖l``&mh2+Z.i(S &6@gj`@昡 C A RFu BʰR*mL.jB^B z >P!UXy Ϻ xL{ I aƈr<]>&f=շ~x C>R^dD# 1!#0BN )GAF <MqW8#S`h #[2B|% #xё#8Ȉ. 2B1k,K>Bdf#0B4|3B|aʁ=eF.)[2b !#5İxPM_I5Ց#TG!hr>◞r߻K1`#2FQڣ(G \>"?+]f#2c D_0#}|DzVLHy2刲J9&GrLL"嘘RD1)J9&irLV1mefզ\fDE#D2ͻ C2 O.F{-F99agabDxv1#^@"q1ynt1iň)'=ё_ # AoMF[O2G2<#p#6FLtx-FL 2ϭňyIL>#KnɈ;8# G1Ɉ9JFvFKR$!}%2Bu]C>t,KD/ӱ,!]b|c X#4X#3X##Vba/%^}O#*dJe|F:09JgI2BddJ%g5g"pFtLg*|ޠ:7mX8FhW #Ѿň؈`>dD#$s_@F18##.F0BF i/FL'ƈ> 1>BW 0eΈ[A~./BuӼx(o;"k$0z7 0ї F2Bt -PSX5t:sm [2`DC]bβ sX5:6I50B|0BuyG6Gg^U3lgH~}^ePk#^#r5L&z#?+o@>" G uHQ"x:y19c2bbNʼ\yF\"T #5:EFLUsD~c G6ɟNydāեdD=.os"#}7d\jdDH2B[_ۜwr Hh;###X'#gP.Y`WTl]+#]QQX+ʆb]ͮ&zʝWNq^zez3AO "jD"ɹ0X7u! 2vE`TH_D-Ϫ Fe` Z&ޘQl BDHa x T=E٦PO>m^eHC:wV*ԐƸ\sE)(5YY߱^N3:Dt-gА3@Wrip#3}$3H%'A 8@kB6f M Խ f΀k txJݸBuY>8]3 F>:ΠyΠ gv@3@tᴢ,*Z)a5C#zp*=Td=TyFnj *t  4:8 :Ž8,vTn5.R3 c uk3f昅\Ȯfbfְ2"50bU#w7ڈjf{8V5XLa^2  ˆŽZxhj&uD;z@ՊJf6xJ+#~ƌ߷kKd_8.`r3bбBtąqFh" F#d$6#be!%gemcL#FV*^OdD{_!AFT;ȈNI2/$X`7q\Xn/l,$_bz/Ĝ)g%BňXa-Dq-lGB:V3E#TT^ɮm]Q_+`b```544qK^X:Χň|QXɨ?%V3OT+0"s ݫdq\m Q^PV*&:/V2dIdW`dsU*PZ $ ^ny=GLLsw c8ח5+)|;^uחW}|}|-qyK'KjҮ⾶H}x8k kj$耲7}tH)c߇ǔVwqTX}xTi6|Y=b=?e endstream endobj 246 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 250 0 obj << /Length 1082 /Filter /FlateDecode >> stream xڽWKo6W,O=9fۢn Fc!zx%%PC98q  83dXp/ x@)EAV..~/zGAJHDz0&*CQ% >&vJCHFIaH-p,*dw-8ȻDEirs]xʔP)A~nKNeŀe"%?.wy!ͫG,_\\1#*V4I=o%U8NfY]8^7WszydD>OL0LnpnpȻƍmi2G%&=0np(ptyZ va`B!SF}cM_R 3SL r "VѢ4vwvXիqPC@$8騃ce067KK>zj2G'ȄtU,A? " ~ rh;AtQzN&y7Ix:O`M+}}o/Ms9`\Av S N[N$UQ=q i}nڷ{iXULY,sjsc R1I-^$}G }eFmg{.!!N$O!jAi1lΊ=/f>/ProcSet [ /PDF ] >> /Length 36 /Filter /FlateDecode >> stream x+2T0BC]]CS\.}\C|@.ZI endstream endobj 254 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-31-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 255 0 R /BBox [ 0 0 468 324] /Resources << /ProcSet [/PDF/Text] /Font << /F2 256 0 R >> /ExtGState << >> /ColorSpace << /sRGB 257 0 R >> >> /Length 3187 /Filter /FlateDecode >> stream xˎSRZC[ N!1h,  a+@^?XUdD5ā#:Ux8QҙZ?qijo?럾83p/mop/7\7#|r8c7G3{MtRq:ճF8[p&ck<ǏtmM_:ә>.;kZor4G:":x=ޜ~F>>%F$>qBt6~އ.,n1 :u1 `pc|x>tØ1u]g~ <&x><Igo:!ϗxXrgx:k:Ne"#~l|ȿX9lGi#?LԉomONSb9{i꒧ns3MyXOi_q^@l^wOl7`&k*D%]FkrSKtrվν39U6d^%lƪi k!\N݉_>V 2xj;:XO^,K/LG0} 'W?x~r'8ăF^yݫ^DY" frp_,!,Qě%[,Q%J~r2%Ƒ{["K%gHCY"<!Uo8vg0!9Kđ5:KțDy!rSt%ejr1,t91K}Dsߖ(nޖ(%3Y"Ԝ% Y"ҝ%NA,A%AKDKYD18K-N-ˑ%Y"AfX{K]DDY"ܝ%b]%bMs]3;c3a(չ+J5+Fu*+Fu lh6L]uTe[sTs(ičFѨdϨY՘ly8y2:UGWd SGH7#ɀ(Ѓ˱-83T}ӌޟ~_apPIU& Y2Mqϲ(*Đe 2#`h/d _: otHQ& )d =p!ʓ[T7T6$+e[%Ȳ Xȹ*m^YƍkKheipb@Jz'LTgTI[M&k۷jC* ͐ܢLw .FJ.NO0t+. `ḍ`hi`\e<`64g M& m({w8) 5 ]03\f ̟I.3>!ُ.5 ^* Yy!5 Q?.j 5A\5jLpTYT㱓4bUO5_iAjKQ ؚñ 3XF]mQݫD8G5B_z`ìXgRfTwʨaBR ݽϘʨfm5tFhJ5l`zhgTIP 3Fjm5 GJR=f7ny[.hͨjjլۤ:>"V#vQ݃Ũ,ɌQ oKjelIRE5ap()ՄΞɠRM蜹v*\.Y&RǩTl}q2!Y&$QMx樦Յ Մd?M5!T` jʚ(Ք-rUʅjbHPMVoVxR͵&ٟJ5q=lY~PM?7լ qSSZPMŒWuvus2k TI57լլu`RZ&լ? tI5edKTyAgvuuz걩fl &юjQ=u;:KXdmXԡXnZXXݣ8BR2XU{׬>YvCs1q2/|^ۿW endstream endobj 259 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 262 0 obj << /Length 2227 /Filter /FlateDecode >> stream xڥY[۶~_!IFWxMzA{pZVɿNjlҖm, g0yMMyB%2*7P_fw7WUeSfݼzCDU"{0\,X•$P>5yUT2.xWLߙ??~5O{΋o6n?f:̓m}ʰB#ܚ2m:x%hǢ3[8H+0knVb LT"5oz2I!h+Nr%I}!fr~3F~֯:x'|Ocp~ouwگ;˵( s¥J2NIUn|hf#dsԝzR2MqlXA*mtg}T7 8q 5EpT7޸gWӜPY%kl?=_45Wx((Wo}*<k` ~3fQ'[N8R>fRi}mu=U̺͞|@Fku*\Xyáu; 3{XHǀԦ<eA7n34quyM-q3OSXۃ칙v!A/"v`[r1hlA.!6!wUH1=K;o]rb!%1d%PR4cpŌk^;}ky0Jf}2 :77f̍ x,B*9BG 'pp6o3D|Rj cmjaRZmkkg}ŸV*u%HY N~>0PUf)M]I&+{Rr4Tx~@#e#t˜J%vv%aDxp45#4I8kOҨyEE@HqRTb& RruUdAiU4-xr(K Pնn : *R"a9F膎dI82³%'H"yi&?ᰍE, 0*Q^9*ImREXUFd"dgQ-'%@1zfKTh׳cpJ)$Ps J"}XM 4v,xc7-imYFa%P_`KB"Cf a\dKIG͛I* +f  .0TU O^,oYXO "neO򗕥|Q 6BUrphGI~<`x ێé"dpե ƑlZVLD'E$ f2Mmp\jX2'Ky\v%/3D8' ֐[0P랳;_ !ʛB_,aN 1o lvVB^KB܋KWmZv}L}+U,i=Z/+ #YruoU"ɋ\}}+<7V]sUE8r_bt }Omgd}0];nYcC%jMZhoTCxz۔%m~Xض(T=fe?17X#SUC"/6"wpanHo ]QM^Ǫ!Kj]6e\@ף0W^qC܈EؿAyFӶqmM|9lkS?UQQ PĔlqQee~L:y@{:BLGi"Ehms?@sL.|Q)Ce︿z_Z=IrCg 3'^2K0q%5VN@ȝ9|oOt:!i kG7-#"@/h endstream endobj 247 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-32-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 265 0 R /BBox [0 0 425 307] /Resources << /XObject << /Im1 266 0 R >>/ProcSet [ /PDF ] >> /Length 35 /Filter /FlateDecode >> stream x+2T0BC]K]3\.}\C|@.U6 endstream endobj 266 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-32-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 267 0 R /BBox [ 0 0 468 324] /Resources << /ProcSet [/PDF/Text] /Font << /F2 268 0 R >> /ExtGState << >> /ColorSpace << /sRGB 269 0 R >> >> /Length 3257 /Filter /FlateDecode >> stream xK+z)-!dZHG"P, KAsլɊ 8>nNN;o/~|u#mTE~wǯ//iO)m_w[~ ϗ޹<ˤd?⮱4^GХ-^}o%6e;۱45{=tkُ|+({QϽGͶSxh4޷=43.{%^}?9$iSt;?6~;?=$ioc|c>Uch=}07~_4n]:2=tG3^CTY~И6֍uqc4tL{-ff]d|y=27Y~4 } э_us-&z?&Φ yϮC6EkgwϱV?n/o.jf?̷_6a}MO]ϛ o` 0-nj/cc{xܞ؆)_=M4{Q|4Vbӟ.wO`g]s n{xC[k^Ox#p%ʟq`r !`yS J9X4d%΋["8Xh)`J,Qɼ.KDӮ%V`iqKDEC[",%4n0yre_ (cJDX72ZB-Y,LD},QwK ZD2n0K{DLF `,Q:xo]ZoFK,tJò,Q:-Z"hlfB%,t:KhGDDD:_fjcZ,k:%buH>rA#PmF٩1jbF٩fbCҩ&3rNu6TnJj^)P#TcdqNuJk(s$"uӬGk:oPMNk[|51-jtsFW͓վjjYF5H&&vayQMCRMJZ5|*ՄiHp=b1hTTtJ5e/)ˢ:I+D լc TS6TC#P ="J4%Rͯ9=R= T.U/{aը>"=RjffH5H5tTnBu#Vc0.yUH/jk.Us%BLȅՕ+ՒE5i)ԪrrQM^5s@5CcQ0KgT^\E5a:;ոMcQ͞6S7kn\xʁj,VF5` ֨!VrQڂɖcլG8>n0g6N.E5_@\ۨ!W&毕jhJtoTs<szlU[G5@5F5SN/TZR͚qBmv3e> j1Sgc|ctjv<5Pͱ/jmWT#VF,ϩζjK̢SMQ͹~QkTf¨&jFQMVQMQ ި.E꒵TC#W1l%TXP]Xjo@5W #5 Ԩ.ځ?5y@5tY40vȦTCH53SZ|2G8d=#ե{L!fM9j#jvjZt8dmY{|/VqkyGK{^}j˫ּcpqx8QZ^=byՀŎ5:G7)8pZOӔBQ汖Wse/ֵǰ%P:VƤ٫E5kյ`uaY^(QլNu<ʋjڬQ?챨c3׵Y1蹨f=cԵTTIV:^yՖA8XcL'kQ==/6[Wyϼyu1yfx^݌*b5>YFnWc5yr8 X^̫UcTՔNdYDNqjI۟j,YdT!Vy54EN+%AqGZ&śfͰ5͌{yLm3f;fVv;v {Sn+Mq6W endstream endobj 271 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 275 0 obj << /Length 1956 /Filter /FlateDecode >> stream xXK6  `A; e[X[r$y{M,7H.H>U_ ''?EK6JvG&NH" „$ [,s`N@Γݿ`w˻wT& M(`,ɇ)BP~3cI0f#*5Af`{.3]o2oݠs4?=y{CIlC6o4EV~H3{wO.=+q'5"glAz`iug Tew?s?lwn^ձ-`-J!taK%E 'S#$,h,6!̚1*>_q5K5u.h&eݪ\I폻ldGv 2F#"r sDbkHk [\9Hgm͐A5mVz]7aTPl9N&͟V Q?l+{8}Wie|WlwY;cW#_. At5I! +D/"N@*lzVH Kih]L#NOZO "ӥY|A~ |SE3Rv翿G AXy?n& 2l2 2zz!߻ofyeͅƻf'wG MpيYKȂEPxD!Øz˙fiDrÐY#frUM}m3/gMa驹q4dWpj,SX9+{?[I}|I$kC9񊘏 ٙصט˔\2K^Mz>g[)/Ϋ쳇|?FHk_Xf:& 1G*߼3Ea0+eiCuA$}jFx69rpSB mH3:*u\ꪩ׶lZ٠^6#2%8(>)}9+5*Yds~e|̑TBC``ڮe.L@]JJb(_RΥ@BܨH37" :wPvR1V9¥S:̬<y:A}jRp_,,8IIQ1u$zVE|&\")sٲGa ׂmxS0S7*ُuv+wG`xjڼn,FeXy6  >xj2Í zȍmCJ/?uv+aq "o|82~N,M7a>b*4ݶT6{螽ScwWl 4vQqVo0d:_d+O)*F0_\v!;Sm )ؕ:֕ !A_O١Xc#و_o\R lko)⒍o,L) ]{c#_iivCP?:h)LɀjKMmf9h'X!}>{H`^fKxl5u̗[ڑ#j[G J}kyG|iIKg >Ȧ~'>/ProcSet [ /PDF ] >> /Length 33 /Filter /FlateDecode >> stream x+2T0Bkh˥kT endstream endobj 278 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-35-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 279 0 R /BBox [ 0 0 468 324] /Resources << /ProcSet [/PDF/Text] /Font << /F2 280 0 R >> /ExtGState << >> /ColorSpace << /sRGB 281 0 R >> >> /Length 7468 /Filter /FlateDecode >> stream x]ˮ$uWR\܊ 0D$<"2O]{##yATWWUVVTydO/~ˣgj>[{k>+?{ywx?}_Kϔ#.zwSwY?wU3={}|̏? lQ9gex8u=\~r[Kk<[~d^g1s)׳Gg醋m zV\ (,a/'|kNKOaOƷv+v}2o?xEƷp~9fEomMOSqyv} D˾V7p{V͎7V0foe)X$'Zz/22Њ}^.<2m)s>oo>EWnne|K3=oe|z et.{f?ש^vLzked}gӉG˗r?>x6UG0l>I{óa{ó*vyx.w_/1=o/bx|{'6Kg<_~яg/z_WYsΣ ;fflnGoyTͰsyU#7,"9~&/y:ϾL Suy9l^h  aow_Yl/)+q;`.o`Fa]<ȓ-O {g6B,{gw!GE߷}U}^4}]UQNޭ1}Ipb7Mٯ ,U-"g(}~~=~,Ə_=~Eh$@wq [hւ@38lņ*4S{ y,(Dz(rp(Tb%Mގ""c0EG!ʁq9QQdQ((ԑ(HQQ\8LGa:" 1PQMq8,ʢGU(T(wG&#pGU(Eq(Lo(P╏Ȣjp~Ev1Q(qގB/8 pv##Pq1spqQ(vBB;wvq"(eDbsp([B;wPqv m:0X0xmGОwv=oʕ9nC 4;nC'6tz;mC'6tj;ИmC'yq^է9hm6`VdS?6'Nis:sBBdn$f3A\H%Ne$dBU-D"cz]bW?$0=Pa%W= KZ %3 <ZXPrXq2xKeZARFZg\!0@H<R<c vc)c .RB x?a,0qK<%RXc)l7O_88`3j$QMnU6nTe qŭ 9qqrGtŕ8*6-Wys:89LNU<#8᜚Ǒc6M?8N8E)y8}&g8yʣZ '݂P Fצp5ljSvuq:+pJ8$q_!۝"8nq'9Ns_W8}q-K2T3e#:rB.K;[p\Pa8,q;S9涜:$/9)4rYܢx':" AS<uDZq L8N8pSiV0OPǽy668 Pڧp O\Jw*'S aɸ?@k 'lD  @p"KH+:ʀ/< b$8"x[e$)X<@WB~\B  햬W|EW nQı'Co 8y@pW{ 6AV$d:NHp 8$8ő*L "J;'xEZz  Nq )"BS|܁*^ 8 WT\qi4%n1qʤʤ9+rXa>4gqvx8|8YF#E2i6T&eb{Tsr[rTsBdhAv½<S$;}"٭HNvFZifgǪ [AeRB%+4)c-$NLҗELJGPyT& v$ 2)A2)u5*9**@*ҝ#EeRAe`̡2I# !#uLʤ4PʤJ$T& ^.G0N;lT&%V&i^:dg8V&%1PJ?V&%V:2Iq=dg3Na;yy`LJx/2IޟIasQHN.P(!YZ{ 9cmY zRXmY (ܖB{[։0-B9*-kv˱-kb;R?-ݱ^y,kN-k(TX֛au=7eDzK!ɠկhY ۲DؖRVr+kLDi.\pUiS~PEneZ'c{:mSMe [Aayk|5d p7\ ,:3G;\gpk|'((c7bbn1va:bvJ;cKvC;WvZ]YluS\m]GQح.=;}FawGapb^vc5z:pbA-$('ݚsa=XmUIj:!Ӻ i2z#ۺ`-a[!vh[ǍT:EztM`k[:޾:}Y)mo1Llߊ&[=*Q}+釾5#OJZ<,}kh߾3)ݜT@oOuz+q7eMŨ譀IoeRcT5Gӷ&÷&HV@oߚ7oB[3v :oͷhKŨZmZJo-ѷBlߊ"[ [ zRQ[KGV$2[QJZLZ\Vҷƈy&0[hrPY- g T[&ha@PtNS `NΠ8W00ȅB @- 0@- 90&- - <0 7Z k°𼡅aμFQ%WWBًd/Md2(ƜRbU^z#{%yWۋPV0^)߫D:w;Cf;CFN d{3d3da3[ #lga;Cvi&N?"{U=PzOq7s ,{q>[%S1B:fZk|4n<5gΨѥ4c ,W8MH3FM(B4=a/Yݤ.ithRU(f U$fLliQKi) RҬp=HRݥ٦4gH3=L=ܦGr+!y[AGM S)&L<1&LǔBa_ȭ4D@n5$„.ȭVM'@Anz5z5gR>@ne3gE 08"w0ef6<_tCB8HnFUK g -P] >K\7|u>K`QYbQ4l҅z/YBۋ2pN/:Y/:ۋbEٯO/:Y /E!]S%.LE׽%+a1E^EIKXL^ty^^/czQtыD/ſ||j듫Nu:YHYh̋vvd"/:x3/za yы]ȋ3a@oLuV]Փ/o kQ:0 T{jB*WSǿ5\MU6oZ1Cj0B O:촆.{+7jMDpV{2Yj@25 (5 j@j9t*M Zcѯͷd"tw 5 ],E a ꩨYd5 ր,-րpրXk@Pk@¬YxdquUԀ :k@od 'k@ntgНCw>/ܩ+76i?BM0vmN-)g9e +;ٸi9fS)hN/A aU4XlfL3 smN+iEi#01}~se@Lќ)}99U~9] V}U}"Ueݫ>Xμcoh.攉S3Ds`hNWr9M\1 4Ѽœ2@sʴ.) R9}XдomiN1?9EG6U 044МJs}4hNJhN cS|SOi*0(9{̶ @lk1^,.EZurlj4aYҚ&a)dwJaR ):=,R \ ѳFZ˓YQ5[-qc'4OZۅ;R 1VI)`eA֦5.5DZc,i ̝R@N))dwJL))4gwJaM؃UjS `Ja@1S leJ1R,EJ0b?PŔgJ4PȔ`J/~Ak M¯{pIxAk[-S%!Q* ] Ř=sC*cnBz!62!)3'[vmuZ AWM=A+.v FW{n9Xzn5.QA7 \AI݆DS'nt mA7M1膵B-5=ZB} @ֽd9[J 4njw7=n xUB_n)'cO|_뚖8(W.4 a{1w?0t~GѧPp_=mmńǷگm{;Tj_x+|Ǟm8zZ9z{Czr֏6|"w΁x$®|U<vzŞ[o_=kmW$k]_=xV-gz.qW]8LB__J endstream endobj 283 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 288 0 obj << /Length 1482 /Filter /FlateDecode >> stream xWr6+8IԌ MbE3m2h$ F,6萴{@)?I^X ^ED7+_mV篹 1?](ePF"z|ƈQjMRh|։Loyu"t|¶w%hSfsCyB%gƭ Fqtn%)^ \q"\k*̣$]@Pipl:@ӭsBR}"]N)p!XƉ[3 e&&3"}5᎛A'm+zJ2 :)`fsP(fH#4D24Pٗ 0eWvڃU57gqYݩaߕeRTMy!*j׍GoM5hS!~RuNŐmND"<4#eM>t{DĻPoxSq\hDC]]1x|Dix iwיre6}@u3][~[}m)6VEn"JJ! q]6m?,@&, AJWTO&@U˛gaU%H $nxh`?eW "N补|㩟6ϫpmeJ"6+;ȄYbWFo|4>m]5G".$BSɧY_0j1篵 SBSl EbOlp=bߗ3g7fDYNwkb!Y &;1HH :8}qƗ1,5 Df¾ur뵽B6P5>b쩹ǻO^w .< QsǷ{̆9>Հ,rJƘD şr[ @o|4xPXm,[ǯ~ߺx]mY^,})qUFȝMԽ;х$G}@2Þ3q49;;>3aCz ^,rbY6Ra1s7MFD6!c@LQ"'Mux8)4#)N[$_J)σ ա9VW{l`} '6Y]0ϸ"1bliەgnG?>o8?['B$?p6OÅBGJsB }]ɫkF`qq/frTc 'U2XA+Tnmh…;ȸ?ִ=87Ȼ^NtHO>J]y^1{zݧwc2mmCF11z$!IJ=&RE6ղu\9Uc5KD_9}+*.:6BRDk&DԿsy endstream endobj 284 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-38-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 291 0 R /BBox [0 0 439 275] /Resources << /XObject << /Im1 292 0 R >>/ProcSet [ /PDF ] >> /Length 33 /Filter /FlateDecode >> stream x+2T0Bkh˥kT endstream endobj 292 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-38-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 293 0 R /BBox [ 0 0 468 324] /Resources << /ProcSet [/PDF/Text] /Font << /F2 294 0 R >> /ExtGState << >> /ColorSpace << /sRGB 295 0 R >> >> /Length 7581 /Filter /FlateDecode >> stream x]KfqϯK{|?2F,,@p˰ ?sNl[q<,E/_";>~]~?/^!/qq{}ÿϯ׿>DKCQ_K%'AeYg_?_W_#뿮u[zwoWN1'(߮WV+o-1ڭ˭ϖgWJu}݁.ghԑƼ=bW[N2nKNsXwWG(3ӫV'_UyghY!R;v ]>CWv [\‡ZkԔdZ}mEޓ+Y$+Űf?|ow?J_q5YFO?mܕmZ~SR~z뚴mp8+'Mϫg"R(W3kKA: a%5k>)WBtF3E}r#R3X\' GxfWKV=g.Ny:J!:W:RLSֶcUkP-MvK@ kJeԪj ;H%"jtxEOcHl}s;2#5LۦfI ᖥPrƴEp3[# 1WX=X(_-Cv {祵` DViUeu!b/KsfEWWܫ!',b9}6f9/9OɣueP\}M3 $drmj@".bB]EPeXYr)_ 2M^}DC$is3E%i&OO{T@vj-cr|{J S\rrې䑯7<)_d9>Ȫwr?N\ߏ7TPddQ!'|.}Z} >+۔L1yn_C@󴟓gتQ?F\WM'\rٿ4[39l<&GDGP4z9ٖ "}eӰ%䨿`=ʳ6~о"mjB0:Yb}D!cq!.9` ÷"| 6 RR[&ɪ٧l4YRR[AcYDk[H-[JjK˚;֭&66Afx{۰S4Aom,)u vMz+6ψfdSхަM-Vz+6f jFh"aڅު `L67z%(8M5- 5JE3EnuZ Wf`-unhbj-uZFsL~}ކ}*D^Z꠷%)Mz6Eyuk XE3EBK6mQM-ްS|[\&j+Iʋo $״V:٦$ņokXQF`-t[$Ył'Wl~IyĂڽҚ6ls61b[.ĥÈްe6o#uFgہoζnm77:|oormv9lζ.m77:|ootv;l;r v|#|FFgہoζnm7Ȗrv|sym÷&rovootmv0׶ztK&.9q׶ztmCF_ۆnЭs;t\onvޚ BAF_ہn&e]7B7t;7A7t\onʡq vz+U|Azt^@VWqChn .[r5*>n-WQ.Y ]7B7t\k] .9's8;t\oE _k;r5HKt\onSCVA.[r55&dn-Azq irvޒ כC _]7B7t;7A7t\onvނd ]n .[S`|;t\onv\k]!qIkҬRֆ| iQ3y I*趥,9Y_r(Y-ZKڄ>͉6& ߭Ni*cI}DjBoy)hBLMNپΚNޤevm_Z5+7`W]oH4Z 4:6&0\ytBޞnt leuu¦7a5ʰpbyafqBL-ͭ[SA1ʖ\vI[uYo5-Zo\F̀U*}Oa| :Zf; @QleuuY{0ܤ7G}HAX@ޖÛuE!oߺ>SletoYVqULlݜj+Z꼶@my&M=mߺ;e{.:G7Li/VkR :b\m)ٺL l]`A1ʖ\vI[uXq u$BeP =X g!-jBL-Nb]wyeMEwv{]*[S 52;R-P@#tBL-Nafwޠ>-m%(V3 >%P#0R,-/uE!oغ͊ybj-mbф<"2us}A4+/["P(o!:|uE!om6;oPL%]ҽDʵi6<v&Zb36A}%([r%nեj>̯< -hTun|v"n'vKDvG3pz8WT'e]6/e3-Fw]/[v`_ږb z$/[΀"t IY&zn>@6~iN VRΈpKO,SRZ#V7?>+Flр28C!ХpH{芁ùU] _wb $,V~"PPSǥS$#vMŀzTeJJkwG<$ @]m0Y ,–DH( &ƈ8Y^NnoOt )e/hl.vf^R`ZϭɍŲҊ6Hdrd\OrY\YFzn>X_6ߌ@9ֆT6 iՕ@LZF ݷI!5һl~KtC:va]wPAAA&-x@z"']QH }E%UvۘmWH~N?9y-E 5\MOt?Н`Y:GU3b$ߋUQF@vi!8\ly_eJ:4{[|8$..FID r})xN[ z$=jas]|2%5һlx0W"RTD5 ![7a00PGw*RYCV7nGci#ɋ8>纩ܯvnoH;H=I ֪OR*SҢ84]O¹}mX>M|H/"}R,RYCV7 nɠ}Y]z#=|1dFWV8UoAՇkoOks%tiq86qW}LIi.[iERjt&@ 6Wꬉ4[҉hF3x!=LtMWt! zegsTt="8"8O߸"IYQz28-8#Aa_WЂm\ꉈrFE)Pu片UP\4 ,") +$UݶQ32߲yB. X" .NRE n,'֐]@3X> 9YYw q=^l$OM*kwӣEL*);,R>s!<X }Ny$y*l ;R~_({,l )e(&?uFF}-l[sU%+\quLIi n[ v;nKxşUr0]ZuVbzz_gʞ+ )e+͟t(n;5#zO(4hjݶ'm{lm7izlWLSu)JL 6ݝ6jE0مxzn<L4Npv^Rʢ6P粏-rOŢYz5},8 , Ntࡕr;/lA~^t&d!~KхҷN4bɇ1s?~)KeQFs'sIn:E8-.X]@,[粏#H5RmZ9}l iS4ndvVq^GJP5me,:ewi'aW[s@y QζtwPq^ls>6P,ya燡Zy>[GڝARm>[;ckڍ'=Y}8>AVۭ MNS~)BvdzskEc_ֱ =g?{+o?7T 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 301 0 obj << /Length 3246 /Filter /FlateDecode >> stream xZKϯ`9k#o\n8fRNGHt(Q&]}"(Hs@ MV M^PO_q0F2xrF &_&;Weە۹0jX5Eۖ>}tLsKT]dt*H.[/fַlV4rYTO}[ҍm973x O[=vYm1>[]rWv.}jKN:nc!@x?(ޢEjҘM&<o 776Gk7W7QuY2I& |h G;#h8jn^Dep@h_NTwvPT?o᫡Z*u,4i/ys6}so~ 3״?u@a,^Dd.( ػ5 kW,򭫕l wMu籮w% ە[X7Xpjr&jԛc 09 `N"KCJ.FQD0 K z~/k3k$Y sƵBe2Ka7.`˜qi8^ѬCu8V=&s/}Vo3Vig栤)2f{׮ɷ-BMMli^a` X,ηic=l5D6ʟW^ը,*seJWUډ; zmm/!Td{՜$@1hN"V)L&4ZILǥˋ3>oӘ9mya:'`e\FuLT>0@wL'!gR(bC(5PJ5FTzRjeSaʓRsSDA)Њ1XЁ{jR;gYD2ڊCo!+} !%I`J1gd:|pW]wu$QMILTSds)MѡRNO T61uF 4=Ρ4#I<3a|lIvh!CO@^. sI#t;ギ9ZؔA '請1)B.%i(W0T #h2Œy0Q(3Bͩ^,D4`Xxs.*!(D>D>Dq࿼QiY$)d 1ggDi98*iZ>sgsRpB:Q}! %KQwjU5Xb[4,2{asS^ 5fq7W$Z8𵪚uPv?P(+?bctu7LwYW@pmwGڙ=NWo9}^wy(& /_B5=mѹ;d' 2FCm쫼).Ek^;~nor{+T6I핈Uh#>N[oO }lr8U=):aso 2CdMx-d~^,=7,L L'.?0eUr]?Zy[ukjP+E{{.-} P80LlYno<]g:%=;W:粪mwo뿓RlCsvs{?wŰvz?c6e0ivMJzp!ld]ԛ %Pϻ YV75+L7ܫ7᪠AG/tnqiO3M> stream xڽXKs6Wp Ց`@ӒLs@` PoQ/g Ǽ{RJB)}{uog,bpqpCCZ+Y^+; (k۝|zMZ>r g!tnk@yQ6sI2%on/M۱жnʶ94v=;>8k9CB#*P|ۜP]*ǀ$JukORuwR40cȓvך\Ɠ3s{O$ Ck[g`n]7!}5Ua'ᮔ{\gŽ~xڐB'͡'P.[)"3Fv|)fR{~C`Bl^!WuK Ho̶o聭Ov,y^8~zV!O%=x(EuFG%M#\ c]UM~>I4M2M[ۂ ʽ հ0wb endstream endobj 298 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-42-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 307 0 R /BBox [0 0 435 276] /Resources << /XObject << /Im1 308 0 R >>/ProcSet [ /PDF ] >> /Length 36 /Filter /FlateDecode >> stream x+2T0BC]]CS\.}\C|@.ZI endstream endobj 308 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-42-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 309 0 R /BBox [ 0 0 468 324] /Resources << /ProcSet [/PDF/Text] /Font << /F2 310 0 R >> /ExtGState << >> /ColorSpace << /sRGB 311 0 R >> >> /Length 12191 /Filter /FlateDecode >> stream x}M-q4/-$HH42"+|eiD&鮨Ȉ̌_?ן_uW㭧W_x?O^?BxOï~ ~_Cz_qoJ?}-5N'X]N[-gϷ֊[|DMp/i}P]\x/o}4g}_孻8֦ˉz6zY[W9=Gxk琸K^?~BO2%m>رߺ~y}>[;.{߱8mY^˼_>x;!?ӎoQuwϼX~lr!%nΩWߢ q߯+n}3x]v\gXvNJ)rV~XvŽӾƾ-%^1 PK\H\9YӺ1rqw&k8n,y}A4C^_x > r?NC>ߺ~;xSby>V byOIm N1NIJ1^_$2EƐ'#8,;ׅ8%qL;SZ/%q_cj\Ҏ<8)eRw3c9vlǛ?K(zU@D?~8Zde]s9_qz85?9|go4>lYuvgϖUjYrÏil^~(@_8X9;܈q~ ;~>+kKİůg>zvU>Y}rZ+>rZ?~s<JJ,1 zҦ,y/?TǵmI/?^wG~_?~-oo~_[^ !_w_|o_Ҽ?1_~qmq{)ua~1V<=X9z Êkqa~x>a{?DY?<짋k??x68PC? ٦:0kXúGuamg+fۯ?L+AU Z ?xf?A/FB:!iU?6H%?8A;limSG8! >!۸R~R > r7H9>6i=|b/iia-ʑ:ZưWy X^E{ֈDž?a-S󇵌Cu|EPܦ?ǶZ,y:a,:]ui'- 4@ 44t SEĒNMoBK:5}h-n@cq8Xk^-TXҩMI:UٴS$%% y&& ,Th3Te.uѱSENYtzZ҉ ĤaZuhyXT=)&hE#AEAc'ht$=+n4Vb{6ӊsvѸh4ӊO:P@iŚAiɁF\ݨ4$ဆĺ"Ը"hH&H:X=$6 L:$N-&Iғt'VآOi'Z$hҩN+.yW|ҩ$*?$*? K:IhD. +qdGXtc[e\q`G~ϵ7t8E7 WD79?БiŅ~L"*hX_g4p 4fv 4~)uoFU F@MoQ4SiQ 4.EYr&2N@#+hd} 44 H#hD 4"QF@#jf@#554f~ kѻ6 +V&hd(hȢXh8{h]w6+hȢhh40AcL},ŁZԆW*@C9 E5T24ךсƊug X @EAC@c]&(zEa8!qa@c=`Xdv %Q W*V fvC՝6@c !Q*vbLIAcX4$A@Y"hDzR(JZFW*V2<: h,搃|4$oG;dyO&hoLc 4ʓ@r@Mdn0}S8a.ц!h0&ht] 4 IhhtAcKc G 4d0h4ةhJi4,d 2Li40#2 4i4dMċL42?cXiT0FOQq4*@L+3hLshȦg8АMOw)4d4hHACn@ShACbڛ(/oKhl-1OAc]=3a hAC@Cb42]%љhHhpHАإvFw2&weL4:@Cb.1.=c. R.Y~.ѓMACb=0{XVM&XS=L>=n7(h4hM_otAN@MgQ45(j <HhdJY4<@D%x4V ЈF@@ۘi`gLc ]FAMLӘفFCN1 MĠL#FtƖ\4SMc ;c2 0 4rdLEUShEYAcOO$% #4N۠8а9@#W,Z y\Ty)RX;B c9 8F7h2XY=X0z[$4NJNӈ5=XyX-2G牊11]1I)hv^ A#WXQ =] \OXL5^slzsdւM b|r=.p"6E\E1b ŠI3,Ͱ\hƀ4F:Ҍm=i!͘T%h&E袍]tZ .Z -trEUsт\.چ<]+]14cpbI.\ EE`pF袵 \D4h3]p[И=tp!QKf ЊsEVXqm bzAc\2UZ~96RQW EBlm<4xw)U*x"M AšC&@5 MrOP3K's nh k i n Tphƺ :+h M"iƢyӌcۭGhFA*xh TpLL/̍A/ʍ4f*4j:C# j T[pEfUc;q (ʚ TJV|nj=:ULV'  43UmM^Mζ9АU133mmU5 R"ak~L~[o mYFm}m+@~ۊ\ 'mTkmr[h~[ >o;|nj@u~[U6zACvՁƄ_[YA~[o`աߖUmy(hпKИEGƬT4&=uJvixx4&~`mCet- HM= #5I6w3Z-#:ffFX)f|Č7HU!e.u2qO622;jz<25t=NtyFa8XhXr'Z-- pbŶ^#~' 4)c ݩPm10  2#q1 d( 4X~@#]F@#B$hMA#< HԾ },2qe0hǩWx S2ߠQ)[Xx)ٻ!#H'\1F<CpUݡ}$}Ofx}" {\mCACvd о eh6~G&m8o0m;ŕbj;xiоb¶Ծbp}cgDoW 0ŽMw6L}hh.tVAcuU4&AlAos"]e.[Mw׾WիZ#]lq\3- e;h d.Ɗek}S+`݇Lcź4gư:l)Se(#eeOQ貍^&#eN[u騠qLcœ~QiT2/cL/\MNؽy}1,Ilm=m:˶E}{ꩣИ?Ԥ+ Y6E\y~kWP S@  4hY4,`La1`4,!Ӱx^gL|o4,Fz0M15 uYŨ.W pu}bT[ pvÿ+]ԃQLoq.[=hHۆELĞiqMI^!H`6#=wvq{M]1{QLK1kitm S@ *T E1r%hpAcUb"Cmf@m@.pO,]6.[鲍pe.zĝya]t鲅\D-e[PQNm˕.)`4ti4h0dnP8.#xƀK՘{qee3>\d&p2Oma .pٲ.[ ˶ \Lp*aNLo]pٲ.[2l8nP(.4=Mnf)K78!|v]= S_]m}l0嘆֐pOŘ1LŘv .p32ex$2l \zj~or;MC\1  qmpj=i oK5iD_Ϸh@ё"ӠL3cJW 4XOEfL1F'H$mvLTTM z`DaBy sӰLB/[yit|4ذLc+4Ì4ы-V;F?^_sG^*g["cb ѧ͘F?D/wWʑZ=7hmQ#W)'7={!rUE|rO@#>S=xYn4(=WFektA`A#A a@I,*?/MVwmL/"(T| ᏮT+=/!܄jᴜROn A|iFQ;5 [kp_zKm!<^ Bx>ѷ4 =0]]V )vLCb L^S^NZQک*T"r^N=Bufm!n+@cp8@yA| ]bO?y0 aC6Ya師Ł|nȇy>AqGq_:|C~*N=d_7E0 0;jnWŁZE]1o!MLPŃԏn!{hui\a7Tu픎1Ƹ@44G4 oi/&p4FBLM#>4.I.uZtNi&Bh\ġi~CӰ?4vJ<4}$Y lHcx&pq/x6Ei4N:JϿZvT4N8MÄr|kRwwOhh#: ]7NScQOAc3T);mz1l1qGEuM/{un75i$yM}N#3ijQut3dF>CvhN}au]Q jVa 4{J5yi\1$:v5E1{,44 ,:Иr+ܲ& ]iߣp`䁳ܶm`XnBrƷ `4Јd4,twCBE`zQn"hXF'hTvKh?@r|c19,w,4&r[/-4և#Nc[ƶkçpe֏la߶8YXn >, Yږ[-Xnͽm?~r;G{J,v~k:C66_uڈH<ƶCc[7v[n4$Γ˭ %4.=R:nl3ٍm]qnl,hl[ӐF']%bO4~x5,h:Ѯ^G:~ڈXm(*Lg9zru-U>=U-Sx,EېdV?il7L;=US vO]wO@c 14Md8V=h@Fh)_ƀg"@m+ MgwC0-7B#}6i$Hpi4FfCB0 ZX42ǿiP(&(wQ)0Q0D4՘F5A[q_S.{j kL9kcXtin)1=5BzB3ScWwd\450l4]ܗ-Yܗ)|cXjpX_>]l[hX89'mD* FR@JamDIGMǘݺ+fdza-S&"=*2{XdSt1=5:7oI7OKgX_FhcoӀ {gXj gX5wɆi4́"Ӏ0eL;cFtQ&hp#iLV`(0.d\t4'ӨpGi"L 2z]{p++4 [NrO|^24kab3uSj=UǺ2 ;ѧ4:-󣸏 Bxv)g(=ᜑM!<9LSvfNt tFdr3L7,HMBx|=ݰPf{M|p[!Gq_8#9Fr]鞚KlŽyiyn`qZ 0f a .4`m6vea>O)߁T14Pe9B5Ok56xѹs>[hRMw+kiXkSw#=U)N=}kh\uhdj|Yn0@b>KO%itv%=Ar۸Sez c-=ŝ/S&5 ,E>48UaLS~X߶^3-.HOGzڌ =uo_HOעӫ5zHO{,8- KOj-Z7Q<ӨE=j:+:McO51wl SNO9&SXpwz*7V< E5_<]lȗ> +a~4zAcSt?!\]X}SjyLLOE0!\5#giHz32 Y!frp@gz ;1KOa!l&C0!<>r;YGpzO]CN)5~9B8zKn5^v N7OCɹntu"a}"[: ^c"':1wLC@C4Rtn-[Mx1պb«b«oX(¸ ÄWW 1 ƽqWܷ':Mc ]'E^v iH|*u«#bkO ك 4:@;} ; 4(480{r+OzjӘ#dV1._ảLz7YqLchrۜѴ2Bf4]WNEQ}]յmuTf/,{ Bz* ef6u\q`Vf^[OU'v4Zpw xzÁ:u a>>uT@tܹl:mM4S-Ac>zO4&mN#<4f!&tKU2!e>dS u4z~`li^a+~._}ͥ/?׏w?E[Ç} Om?9w6۟N8[Vr{%^^JТ&^//a_>Nww_=5rjy*ȩ퍐3'ލ-U}9u~S;O o}?Y{r>B>Cmh;JzcGnm>7U}{*p/VZwWK/[qډ̩*[~@ッ8gv{_ɵ WejL>G@?_a endstream endobj 313 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 317 0 obj << /Length 1145 /Filter /FlateDecode >> stream xXMs6WpziZ{iǓNɁ RTIʱ}Hı{K`tBw_.&'J1#Ea* r\̃G`t~ {8i 4٤8Y9 Ie^iyRn:/Yd{̲2u+?fO?&s][.IeYMgq7%Tn+!!SL Z<67Ik+<epwbĦ,bBᨂy8I w$`x lD''^d, ?':D(83vJ 1\͜`D UWzMy2NA<Pŷ)kmw_w#lw,"oG|=n*[EG# ܃in׆&7yWR{QA"Ԛ8"w4g@PduUr&M܍^\S=0.|vUYLF$jb=pu^6;˫Y IJfϥ/MV$Nl˅A%UeUz%/RA(*@ԷܖF8ba"j@ "\7tsMPnu&?q|V`俖wo= :s lb9F[Ru? endstream endobj 314 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-45-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 319 0 R /BBox [0 0 439 275] /Resources << /XObject << /Im1 320 0 R >>/ProcSet [ /PDF ] >> /Length 33 /Filter /FlateDecode >> stream x+2T0Bkh˥kT endstream endobj 320 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-45-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 321 0 R /BBox [ 0 0 468 324] /Resources << /ProcSet [/PDF/Text] /Font << /F2 322 0 R >> /ExtGState << >> /ColorSpace << /sRGB 323 0 R >> >> /Length 7762 /Filter /FlateDecode >> stream x]ˮ-Q߯CxS Ynf`'#֊M6 ܾ\QseTV髼~/?_?rx7xח/_)/j_v\{hp৾\#x<y!1r\wHi-u^g)ޝvi28˞4sIGrzy_vzǻ|uej`x o_^"{o{4v~o_?hriFr)^ޞg{>09y/zGAy>ǰǿ;syѣ2[=ޙ:Mvs͘=q z<<8Zx̤ w 50?=,yNG}׉WuVx.4dУDv u:;#y@.`3nHݧAnM9^(1g8s"^(C8l1Namv{z=uR:.Xmvϼl0.l\mXAȂJy>ftPxv1Y@Q%a/n1jw p҂BaCկ$`du? M\V9>9SxH5>?r ǽ||.eq?"du Q\み$u_磐g|u>07.upYSmL6ky:@_YDeqrydY佘O)|p =/upY%tYzeqS !C '\V$eqҡ !Cن.C˅" )\3Ru8jeq6q'tpY ,>0|Iա,.Ü[mYա.D6RG 3N:gtpY&g9@V3N:884g2Y88LVR$duqp`Y.C91duqpܘq:t8eu80,a^O7s2}&0Csf]22CsIf]LsneًO?َQ ;lI{*|E9wWv>{C=6v~D9|{;Țܸ!/e'rf_Xy3^J9vO&1+t(0{6Sb({D=Cu~d$; ,c'ǡ 4#鷗93q6 ?ÖiRԐۈY|bwm$IS{oe?Bn#&=|=Rc<"7#&: VAo1IՇ1Mi%TQ̗s8|$Y05dpG8nG7|}jo1Mϟ~FRQ7C1Nhb7#&9c?19$˔ۈYD! rr1/LqG<H:jv_ztQ<Tc8-oGb7̕ /x8_?ݣQ_qQ_g ĜU)6;oe3e=<3iǜGLrW1gS6/n(7Gzm|,sƹ|J8t>ώtGΧّPV6ޑPcC:'@',Podu9?} ç'mⓓ,ڣ9$+>6{I}N2CM&86|US|,_kYs_,_k`//`ZG=Y~,_k`'˗j{|,_jd'jOz|Gay壢,_+`D=YQ^$_ {Z/,"GNbwr/vp{3{ks,;hQ^~v{a9B՟SNluEN.A嵨L>N<%Eb,>N~A "Zpw{9DAj8}/5 boGq}v;kGe|~ie )v'jw{};YWsuU*3x>HԵ<=N,}ovgiwvz)v'{|>Px>^;?hڝнH^9"N]|wAl5EƵj\|Aŵ&Lw}:٫s@,;^,{{/{_{/_{߂t{/?d{?T[δD[γ4[jβ$[α;`بKeuz-VgasXV[y|N:aNSwfפ8Lỽ{|@c z}RMMa6#m;i'.*/?6IzWI5~S&ˈ/cc$>kd4b"!7;p1vt{}Vsf oO<# QB'6V,%o5:WlmѶKD}N\Uܑolc\"$+9mk${ر"b)y{XW.}SN\UUT;;%+S,uAXd;D,%o4{WlvHoډ;r>aa.Tc=~b$rHر%b)y>1DېN\UȥMc~cK͖r$MرKXhXī3~V߮Yb̶!}vX\d/5WUe/nQ+7'\ i]n m)vHoډ;riƝ%4ֱ̉9b)}זl[ ;pEf.s.ϖKh_!+\Ž]KIr& 6m}N\pG.%jؚCr$ְA/K]DŪGڱ=b)m}N\UexƊbS5^7o/8)>lA#6$o;]ے#x|!7;q!v4l\a.=6x.#v[G.o_D,%4ă5vbf.sL|TCMBsx0>EŽ":bgѶKf߰.n#3B d6)e>^ ;XJKhʶ3vb\Ě 5S}F`^KRHR\!+ۖ\7X\gb%4c[Lr [4R䂯Y"J 5X`3vB;r}v0(| z|o _VD+ 7|!VGT+OZquK[qOn rYPR[^NRm5 #|/Px]5lN=)b)\xKl{#ԏ3JKs Z%#3>eVK [ӮX~ݣˍ}Zʯ:5d"J 5X`3vB;rAA]st4/ܧ/ŽO"Ra,mɅ}N\Uܑ 5s+ҼR}v|m$jʶ%M;q1Vq3 `K4ʤg7)Kzza c)- 4N"+N }#5j@ce`D;ad,%ɅAl`Eۚ ;q1Vq3u%4c;z.ǕKv~n\(I.b+ږ\7 uͅ2b awݒyaD; e,%4ăz^ϕˈݞ'.*uyC,g˳6,hGK)X7X\ r_Bk;.lur_#3ؐPkX^w-}#!P\63/\F|P_XJKhmk.;X\: \B<8}A!I.b+ږ\7 ,,OjksRm#ZM;?f,UzY/X/WeM;q1VqG.(k.OY"8a˥m8c)I.cmK.vbf.픹S5'GCW9~aXJKhʶ%M;q1Vq3%4sȻ8MsX/ްfg,%Ʌa,mwM b7ܑ 5s(\Ka|2cmg.7X.PC<{uzɥz)C,IrZ~+ۖ\7X\\[Cq5V!^ZcQX[CM#_FukIkjq5xPwZ./z阌xTf0GhUOZR |( K ϴ6?qy.P |Ikq;VMTm_4 |ۂϸGߪ0l5OZ׳X>~P7NsOACA#@*'@8J &|*'8R⧲>a jg kǡ( ?Cz~eu.~}dOa ѪG< G |(wtPZh8 @U>i V¯8p8u158D} 3N~s~g|58 3}]_*']fk?EqGSs~2h$83y}ѪG2[+V?}\(Xri2[+V?S \c!+'Zm!v(yE ;tPN>>='ϔo^+FNiN3b+^)|ڮl//z͊Yl^ˬP4k-xt)|X{˵ "ΗOZ]E +߬//p< yu¿L#B§aDVVAb%|[) ǡlc6z\KXC@'Ka8D1Z?Ϧ>O`0}ҽ׾OQ>@e[`ov#‚ `Մ>a׾OQ#@~.3X>fO`0jgkMuc2+W?g_lTp\"KWt}"~h{WV}1i_5ϏQsu WU+_ܾ=VhKnG~\EӃ䠾DVoM4r(IL&E endstream endobj 325 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 328 0 obj << /Length 1923 /Filter /FlateDecode >> stream xڥXYoF~  {-ۤ)(ZX+D"}wiRܝ{fgNWT& uhFl/^,wODR\p"k$!F/\ے .2̈y0v$3Ԇ)&)1${"MF&#FLJ-a0-Lz<02:O֔R **ZR2)A]pFhެ1,jtP34Co:r.(/#[`C0W؝ʀ cAwbKXPyYؕ[ qYzHkvvM]5Fµ5/eۺ(,Ux;gDv]Ab eQY_GKU?GrH0! 'v[N$;~66=N 4LK6CWeb%FH: |yV$H {@]~81,hV D qg?pDlf$n Di0:|pUS[C`?dO m9kLxcԞMVUOLz"_rbG$L ͎2p/T윁vsr!x{x^&;? 8X<#uv}09N}Nr4oB+#*u󁚴INO~[׫Ͷux61W;#( @f&)KqzvG晅0pz jS $> }us_vY=ZV=k]6GA2Df6&Ц;O_^Mmo6$|=:mf8Ga۹]66 4ݔWyUkg`lW7mWqw3*^?iMGHaifOQ o(Z,HS}ih NcDM ECrB\izBGFwd'G@o'%pںLKXVCj߆7@j^MvHla?[wg7v$Arvgp^28$׻݄Nٹ̈́ J\eI'Fh*k -S1l 2]{gFO VH}tȟd' \'б]\p $C̐q@ѓՄMdGEhY*@ lhF_@ZjHő## npU{m"!~%vHxpY0t0,ڕdvq"{uMrnmWloEPj"xeq1.=(n) 'OL LG@l멬Djm f׀'"WtIDQIE@L3u<5o R]~p'`ET9Y"~eͿeՌi6R8y殲d'ZqhjAP9[$\a^ ~ڣDA /gaGAaW>+A>F gxl'jc2_]%M'ڢ;|2w ZƋ(`plkW?HZw&z *(4I}ӟ endstream endobj 183 0 obj << /Type /ObjStm /N 100 /First 897 /Length 1873 /Filter /FlateDecode >> stream xZ[oF~_1ox !! <]'lt׋wMWv̙3s.Ho`+f72hɬU9_ͼgüo,}B^=X:TN)K#=ͤ fr1V-!`ZMOIt"J,XKSا8Ry:%*{Z/.QjCj|cjRO5V>7UHMϨOtաɟeYRA^/Ǐ{ڻ[\h^bON2E1+?ˋU6N=A 㜟O*|ԟ /ʇQY <?>18(AvGazqR0T<-$o|KpƒQhm{@܋@w HnWdo2"Hv-h~Pu NfDFYu?H~u?Jv;7&eS= ;i3|lLE:jEjeUbWj6)q k_́V]ÖЋk .ic;'t(#ļ}[ Qd+Rl^7[;q koXos4t.׭Y+C0^ЭúN.[lÚ׫qPlI/z.O"S-J7Τ#mٕt,;Xf`ia+wnGx8-00L5NyM莫teJtO]Awt7ݲ䋼m 3?>A =2KI$(0=i 50<*2ݪ<#rKo >I't)g}nRU'4ӭN/J\bN"R*>guҋ)Xs9m\oo딅"oa-ةL6LQGץ6mA>ݘMZZQ%Eå;5J;Z|K JDuFZeJTyڵ[ztPAZgKk+]mfjZMk+S] endstream endobj 334 0 obj << /Length 3454 /Filter /FlateDecode >> stream xZzE֪#h$MHE $ene'2)]/D<~hW/_,*2Ytr,MRGxWoq}BmY5mY|]/5h[M;^vzۿ|%gD/M3E&L1'Ԑɝ9")reȤ,"L9<ʒ2QI&T`,M[)gCxG/,]]z(Lx>NxBuE1A D%*h HxAN!K"3Ow q%d2Q,$iˮլ Ax.hb*(Uo3 "i9M>B!YL^DZLsV0$~rw؇F@c2 \՗`Jt'7/F`w'T6G#*bHH87í|)e,tŏ`601Pĉ wOwn^J޼ l**>uszӳ/Hx|,G3`9Q+>wڮZꮵT녔HU<5~EO׏W-Df2axV`Ϧ; !enjr!<( b " {tվR},ʕd K3J)aPoժlIV=ũR,J+;Lֶin>e_S 9;Ù6մ HVawa#OLrNaNeY}'r] >q!D >KX`Wt(aM36583J Ԓs%D^{@fI2hqXBw]_GޗEb\C.F~4!z%#y] 'jո% x!8E"IeyLރOUw:RLx?y9>㕐٠ƌ!EH"wӲ/2q/GzFJNJW *C$;=#S-b>HtSP5] Z-SdOt J4̚c\č=@!MvO U$4Iߨ/m^RM~c;pGІ lo5y\|::/ĄO>cq>̚6Ś[ԧAлmcUE[kAi [ ohۦ,cb0,7 _~]1>S0>bG>4X7E&e#[⍼c:]j|]n!W V9Tx_\q8(u#(}ۍ,SwC.i}S/D#F&pUCէX qg-w*n~jlw}32_֌hx#G??ƙ]P]o?e4`ƙ?/\ endstream endobj 339 0 obj << /Length 1057 /Filter /FlateDecode >> stream xVIo6ϯ &J*KHo ! Z̨24qQ9*N5C JCIDsU{7oF ߹G;c)G٢>AWi' L(0T>gaR|(EF ̿g`A2~S!a<&0|u#5N6mGo.`8~ORpKx0;x=sG00ÜpS8}ҋi )9~`?u`OJŐZԛ>/ProcSet [ /PDF ] >> /Length 33 /Filter /FlateDecode >> stream x+2T0Bkh˥kT endstream endobj 343 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-51-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 344 0 R /BBox [ 0 0 468 324] /Resources << /ProcSet [/PDF/Text] /Font << /F2 345 0 R >> /ExtGState << >> /ColorSpace << /sRGB 346 0 R >> >> /Length 8517 /Filter /FlateDecode >> stream x͏eGW7sk ,@4 Ă1m=DdYtt Z`~ᄎyĉȼ-޾w긇r[J8⽦߿>}Cn_~[W۟ ߷QpCI~[oJ?0~'a#0G_asOwX1찏{l.,*_O]Oq/ZkrjvaW9|E2z_qEw _mȶam$q&2/'z=mtCXbz`݃(') 瞄pOMK廇4=˵sܯ{ߓtߒ sc,_^d7zq,u/[!qcx(Gl%Aw$\R4D9 q~^}%9{݃^ghLAf,'JGqeC9,=/{㑟IŜag<7v{9[qrIxy/e9m3ߛq:[ cgG\s9~?2w8?sG)\IG&mɭc :\uy]pʽ<1 t1Lh e菾ۓ yM);z3Yu&dWo_ozOx{ldJr>o9;9n9; YSAΎnVY^Ϫu ڨ)oE6JִQNT6R>CFZLGNe1Q Q+񺜨ҴDfNԊ,ZyDm.{*Q+ڬ'jK1QOQ++KQ[-jrV&!j+Zюы:CĚA҆rStSfV+;Q+u>ZSV9ՉZJ1;V▜xt'j2߃m߇D1DmФm^D=nQG58Z @J87DSCJ8ֱ]('w1m@ =$P$@Ȋ q9$h5=kv>72e]Meu2:Mnx^^NspQ:Hl~2!wL;dH{'ؙ#~Gl2`~0%~.U8 R A>Q A(d Mr >R@.9A2rW@r,a V K]:R4 HnArZ]b`) o):аR`J"c`Q ϺB)@"S *T@PAb)no)C4S )X8Wt0&Rxґ%LR0*, H):ؐUD{@#H$<@SNi7$$aw)XEZD i&i*f׿Jʙ?z\G]QS/| -T jU%.jv3( 0`((vU]մhW5-aUA`yFFC@UF dw@? *}V5 LGl6) 8Ht}TGuUM7$>rsrI:-@ @!P("G ߧJ1PADQ%@x((J&)#cc 7QqgFNINسÉy4\&vr8]TA2z$0}%Sd#`%S>69dC9#QZTd MD+9M=ye֫\;ֳ2g2L5TgdS=&-&3UifLMw=y;ԫUPob2U!'LUӾ+j` d#?G9W2ud#9c2Qb2)_LLL~g25id 4ֳ:YnֳGVB= w3Y7@Hq7vlaK`hcsHo_CHոF"UTZXU FzM G#BG:N&v!Q.G%躀;HF}8V/8q4p>^8JzƑR`pdԚR2iGI-GIIr=I(|&͎Q#32nQRﲫ$!8\;Ql/0%lnuW^O%5q =(GP,P$9d|Y(T7#=mU4.J2pky;I'4n.J͸J攐^F3quٕƶ?D4wÑc(UgÑVΚ8Ұmi8S݊SdD\j"h"8:Ʈ"~BM&̃(DRHnE_E.fNQ4̑%2һl8 ighE.mq(*hR(*(Q$z3)HZMBmShvzxQԊQREI.X EHB$T'Fii I-  ԪA$V@5H -캁ɃtY[`x-[w3'[q"Gm|[vNŰGxʄ[[[&2KIF#I]Ig^IFIqfCZ|ҏ].WiR֚i'k$lҝ%p.'KT=%1Yš-Lx&K阼iL t|.-l K>T+3hd`G"]2l%z%[]0KF۞.xv9 %v@H/$W 3IF6]$)6~HxHm$I\pp@֪@n5HOA!I֊GFb<Ն٤0MzY^T2r=k4w.u6%K>r/QRI@p$ g ApԒ,A`1%8:~UJ>c^nRdV!%'YؒgDdI$Krtl{dtx_)ߒ-YW%Yy &oGlKk)CcI;XBd9hxnPG$I0q$4sH[A`knR\ÜY&,F\^` J^,XK'xrN pRgoP)HҏY؃4ALJxd,5 Xj}K/|hwR+PK$8&T+ ,ZI J:f+{XwQT+X5iarjtVUZ ΈfBZɧZZЇVOпgAv_bZ/+-+WcŤiQtW`XiQtje\` 8h82PpiQB<{,H6"ͣE5rNh*NL$hsMh4'Xz}u.w.A@4 !hʼ@ }nOYGРAoA3KMiQ V>-bf5 ▖Y"uEYE&#-*&Lp3-*VH,Ԅ*WPeǜՄ*QW+ a~k/}vd+nv{ Vz 5 S PjȡPjxaA[@jBh`M:[k茖 #CM jB=7PИk5\;Ԅ.={_jBIb dId^pM3d 4vM EdDnHH|bc Y &MBgZTգslJEױ<ހsH{ K% `\ `HX` Rc%ÖLAϒ)xĒ))lLKD-5(S"e d VyLAG?e ܢL@)S\aR&0/)%5,8GtCV e HL)XӀ2"eLi\`L@%2Rt,&S:n02A@ d)l6L/L# ZK8f XXrSݔнE~G6b'rupZSzsFXHϿ}ݕݪ D{ޢk-\%X $_ܮ_$R8\g-Vyd? ?qKc$Xł-2ř S?εsEcA;=f̮[ 0 Z[Z dwʲGir.%>^ӥI-qsIoFI.wEh1jubIu7.nv–cm7F9 Ί4l/墟tya?d/EHrx/̥{ ~P™vs I>n;>I,Km$\e$`$IX$j$\R$&I^-_H2:[ Iuk$^jdzH2E"Ir՗}X||$ €$la#${tHLt݋Zw-4Xj 7`xb67ڂ^-.,v~z7]HW"|jy9>sR@l]fwTV|4SiF4kQCw+Oj )4k994ˬMȨhֲ9f-4x[@n^ެvwJvOo[Jb1t-{ҲXo\҅/"Y_jw6aNi`>-~9(cvjT[^ \;nMj>^\Zs{Rs/LBZtl`)p&5G􀗌IkR¤O\&5cESW (l:†6|n` ,2qgJ K ,e˘o`g_A!/C<c΅ T"2"@_ P K#)S[;cicNE߾~kw_[KnUYV_wXq}yE+C.}eTD9nOE+<8iOEt fH%E [TD]};)}/$ϲW"8j-H|4p}$ױV¼Q0Z5גI+Xqט{։]+ܚ zI}RZ/Hz"_Xr@$OjNl5M]$E_;lsRs9IR]o@+"I@S"֒ClBU_>>}exoxB탮"nyhIoo%O,"/0Y +h7+߸ 7o4roxρx}{՛7_}_༽ܷaB,^>۫o~jOY]~mN[8Iuغ7oxG:gl}Sqa`oΙ{:$@fWRPou9mk5فmןRkgnY3멽ɞnYe-::s]ݲ=oK5m;;Wi-7,<|--\ELIϗ ޻Ԗ8[–swuO쮾&6 sG7#}Qd[*)sEݶ.{G tH"QsҜL:|@.!=s$bHq꽹sd~X=eǖHw[z@N3GH> 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 352 0 obj << /Length 1755 /Filter /FlateDecode >> stream xڥXnF}W "/AEp@K̆;{!hNZ"wggϜ= .ϰ%$i9G*IUyAv{nxKIDs};E1\]zOdTˍvNcep~l1F&Ӣۛŗ寯ӑ'H0c_.C.BB9,j"o-8p |^@leVΎ ,fxmʺ@9ň$Þ&]9tHC2S/%D @ڧ""qٗm]}*7 GNO D -3ـnB@UnwC78a՛Si0?:$T"-" LHhOT ھ۞̴I"+,U]P[?/jħUVdMjO sTj_]^WxADb kXG55-ӡFx-oolzb=OЬ: [&bSkmp`M}U^ NVrDнLs8*Ni4Y F#`kڨdUP 2[DΜI3vܧ@&.Ϗ"AEXeh;7}wb Iu81C2ra&0fn̢) hwc$eC < 0l9 "4`]?9?/z2Ώ<Ϫȉ(sDD:61/^@ǑcAJx;"_l%,RN-CG>`IOO(~(ɻ'X+',M:Bz5/Y.}Ǹ;ىDX>-@yZ@]]p(ݩpMPE~cȝk1AkPpXeh>\?dϤ$j`7`_d8GD\|6>?"c9T̜xQ34zL%( q }Fm)\T~T@ A.fJԎT9M^EƣlFA >)pYۄrȈ 6c \$Ʊ7bN Jq=Yސ4_`Ȇ6G/Na 6c gk+I\I:T<ю{8ؓz|fti#M\ƉW?`6> nfvդiH3[Dΐ.G%w,ȳu5EϜ 89!4&:>'0jJqhܷaXny?5 endstream endobj 336 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-52-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 354 0 R /BBox [0 0 439 275] /Resources << /XObject << /Im1 355 0 R >>/ProcSet [ /PDF ] >> /Length 33 /Filter /FlateDecode >> stream x+2T0Bkh˥kT endstream endobj 355 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-52-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 356 0 R /BBox [ 0 0 468 324] /Resources << /ProcSet [/PDF/Text] /Font << /F2 357 0 R >> /ExtGState << >> /ColorSpace << /sRGB 358 0 R >> >> /Length 7225 /Filter /FlateDecode >> stream x\ˮ-q߯Ci&dwO<#H@ʵЖ(OZ87tnb=~?_|a{noc>o~Wz}_\Z.9o9["?3$osR.ȏy-Ӡl-+~?o_s=ώ__xϣU{k&| {}V,㍇=kTznqZf4?DܞgPGE1mr\[E9ή4gWzbOZ?Cj:d~ۼonnO=4oo{WdQ-_b4?aߓ?~V?-f~ٯ?_}c_ךѮo̿}uXkcX:v{<|H z81mz6$Ic7ۃ]Wa}>A~Ic'>#~u3=Jқ^؟4N&6cAo34fa44H[:uz336LR۵Rll@p#}4Ʊ!檩lIzxve:ͦ-^䂞y( 661缌cA 9Oh+da0!;MӇK>DSD\pCm}<;~u(\u!SІT?vz! I -[!mOvٛ!*=k[|nTy*X_x(>xkM Q,6 } 5u0%>u=yvom19Ug[W M DTٷ[7w&r}Up@.)>l…,y^>a}c۠)Xܭn_S m săc"mbx{]?}G_ZT @?F{(Eǘ)̡3_D3S 4}־H:C|6M;@P,|LS L|oiӳiS8Baw]Wlx=Y>4D: AڪiΚM6DؠpnPm BXlK䄡C]A\ZOzXwS m z }g7^X6ͱMNԤMa)B@)zmqgA㗼0Ź5ٿ=% IˡD"y1.XN14fE N6o14@ûhOJ$܂4567*h Q*TwMZ&u* mZB'jlw T:hx7TnЉx T:h@hz -56*耤 &:TBY456t*߈&6 VO^B'I T:4X*AJ>: Nnt{X&2*Y?ŊhRA ЄB|Ӄ>7X:hq$Ұ|]7Z7afspiѢDludx)he[ۈɧPD<7bZP?mtѤ7KW/iI>B>gMĴܩWrm1-~lO4#tL=aLm4!cvM>AScP#PsĂ['E  I8odt WӂE1ԇ`n?,@\>8hcAڬogAO7DS??-F,,ŚO9S? ZM 7z$"|/jFm:)4Θ1ңUY?=OA/ ZI󍣼M\WԢ}˵ ~ =p'@E=}#ZK& SUєu.X bt8寫 V@?[׍XE V]վ0/b:'WԂDU%TSAUETłӍjJi%*-0UP=QU)@UtZBR#q^IS7(*nTU PDU,8ݨXpQU-@UtZ"bFUETłӍjUQ N7(*nTU PDU,8ݨ!TU PDU,8ݨ0֟XoJHUO@T,7%')VNM j XRD$RSZyb)qT<GԔ8VXjJU*OQ,5%'(GqKMj 8QDBSZwb)!T);A̔VOD"SZsvb)S)99ĔV(YaJt%DUL/%d*&"&0jK JhťKtT*&"%(Jp+K J(IĺRBRf"BbY)R2XTJpTkLF)%4*%&"# p+J JELzRBR^""b9)Q.p.. `XKJ(tXK T*KA,% KDA$*u%` e%" ֑Uܞlܞ\{C9R (]=Pc`ڊoj3}:L[4Vlɕlk?| p݆W>@9;XFR#Bvqrm|3;q0xR6ؒ+/ּ-3Lz˱ց߹=ΩQ! 76-ɱq@x[݅!g^a[V[6oYlKpkKPQa yN쐧-O3|+K5hKU9p`i?h>bf'r [QMmqiEQپB[%W^y-ϛU9e";>9оO>=&Ntm7(Vlɕlkі棻Kms/o9w-^%J[QMmqa;K5o>>})Pw^<{@mPVUbMߠ[%W^yG[0w/^j8؏EGԦ<%OIH>} ,mvϟAQ[%W^y-6z zݜ:w|(;[Bnxܶىs]SyE߈re*ۚwj8茰2Ob}o?mE7"uq&Emm[m1eYWt<3c ۠ىZM;K5hKCٚkLN:#`C3O9n.Bݭg"p:м}6c\yɶ歶8R:rP52"^sHo(| ۠ى:`ڟq&Eߌr%ۚw@ʗRࠔ'DkԞ3d}48gZkvsG[r%ۚ2xU9ñpkz]2vBZhmof'3iiEߊ-m;ҰaԻ`k/$C}:x;gH #[r%ۚڲ>&ΎҰyM1ˁB5r ﷭(fvM>oR!WyG[h7 ɾ3>xOcTa+j#8[öpAQ[%W^y-'bLQ(a̍3[GmPg90ʶyƕcb|ņlkm>*gdfD>miIP7x:Ria+ -NwgoPqZr%ۚҸ1*[:Ϙ l:A!=~ۊof'酇sKoR!WyG[z_sϠ>*)s!eVv5e6÷h\ϫ0NߙƟ8Ikk5÷ ^T0ʃv7uFz+F 扂zaEv..q:M/C"aG^Ja3v ubRf#Һ1'֘uL*/N+`tTGd=c1%e6+FM__ ̑ݐo9 8D.,H+UhXnÊY^"M+*}[r7pqٺϸSj˶v"ZT*7@v'ހ89EB1CldWrqUWa`󫑃9q tv$`xNgةg`f ) ҷEեdu c@.}oPz ;gv'$AnY(fHJ>@o8ai2EZ< p5@a7up>LvJP63LOv%HQn^fh1Sa^Jɜ`w@z\*AU )ӓ]U\_}~gኗSH Bjkv"9a k +/ P{ل]5"':^^quҩ; #TIvFlU3&JJߖXEFЁqR{H -#Rni'ŎN0Hʋz=HJ~/O.``N xŽiyAUƔȮ;̩lkVf=H -zm ,鎲DwK7M!iז-ULIJ>N38۔>#l`oTH'Ȏbqѵڣ1%e6+*} RͺbL|ā#.@ [ -N Z `;='hŔȮ7.޳(S}+z$3=dGb&cpKv{h2Fv%W{HqU?'Sye<d ؽֶ-Dس ă݈;uD9bJldWr1 /( KY># `,dGH/6&w5NsټJLߏqj]0Ppkrqqqb]9 "KuG*1^YSؐ.-XaWҍ4%ܦZXWxbGw-E1ֈ&@a;ՠS+1 "nH҆]IXm㞨c]_?SγmaKJ xY^HW Rv%hC-$δ;jJgV8orSK$,HSՔ [T^J MhVh%˾R~ lJ<^AW"E 0IGCvEnWCۣ3ԺLPCL9{%4 [-J[r%ۚڲ0~q3{2)[bC~lɖ{ܲuS ⮾l'P[#křF[l* a=\e/mB<[e;/$gŠ |\DlɕlkіoӜǂÉFa$b<\N:jڊ-p-7Cd[V[| T[#2WZ(&Gh)#Zww^yG[Z~Gcrp.zd8)q/ڷ[>ꥭ(?6>@ߤ!oqP7rq! S߀|=b7 z\Y6N=Mrң]U7.sh(̸5m |hAv$U'Y}6Ρ3j̖ѮmM,^ 1h﻾#yJJUv.+ KWv5W߸>uvo@0+sddz%~\-.MbqDƖ>Itnu7&SʯvNȓM$ܒǚSRGob)FsGKH@)'Ed'b=z16PWP2\=~.`L?`sN?m|aq}?94 ]hպ_-.=j/ !ut/M~,pܰ];֛Fћ/fqv~.}`!FpHILj)T Y~fcC endstream endobj 360 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 364 0 obj << /Length 2434 /Filter /FlateDecode >> stream xZKsW >Q;/vn8ڤ>@HR~}̀SH,D,zw_n^:L ݮ#c-8~X̤nRJ^tQ}qcW>^=Em~n ZlUYTCf4_x"ùy"1 -kK*HǙ)8*Z8ar2RqrI idqiKf8MhDňŊ(89UWB,'7W?_qE<\,)﹮W~d=>~ YdF{-U?n=)踁o&Б$H5$Ip:%H*I ;1>|iN=? rk׌Xfdf$!5L "DC>VFD 'Ts4-Cʄ9xlx$GƓ3gjAif`3cXC%JRBLP $ZɈ#\Пf3#QLs!hVppu݂]FdC[PCkbo)>vMm?W5-%(C3O\[QF!+To: 'a6|;-XE+!GyHb3e^J(:==׋W֫pov]{@ʺȝȻ}q_pT[~* v;Nyeɥ(@1:^*6u.;Ӯ\啝jbMÁf="p>4pa>Q: :MkL4[ ^ Cei3i]JRn4(gA)zo<@PvJْIށ'ߠgķ7gGUSB ѧx|2saUX,8b.Չ#M7yYכֿUM7\ѶA @jqz}lR޵oWÔL Xc\$JJE"\}/%ܟ{{]vZ`8V6{Q׆t_%$#$Ns.L N/ҩ endstream endobj 361 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-56-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 366 0 R /BBox [0 0 435 276] /Resources << /XObject << /Im1 367 0 R >>/ProcSet [ /PDF ] >> /Length 36 /Filter /FlateDecode >> stream x+2T0BC]]CS\.}\C|@.ZI endstream endobj 367 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-56-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 368 0 R /BBox [ 0 0 468 324] /Resources << /ProcSet [/PDF/Text] /Font << /F2 369 0 R >> /ExtGState << >> /ColorSpace << /sRGB 370 0 R >> >> /Length 3455 /Filter /FlateDecode >> stream xMS2Ydj%j+E-RH] V)R_%CD̂'3y{[{QZr-ϼ7~jOo϶oiO)mO?=_ni-o׷Llc-9moni6>˜Rй y3걏ti{AcGXSzAet,D XA+׮c6rJe\-u4ascyG! y﬏N?s2Qb'MWlc:gNjrKr:_)\<^k?Wga=k1{nwCaݹ~dž~쥳rALz4Vګ`uOtIt`]9 }( օˇΚ۳`AzpƭsNǿĺpyp;jܞ$*M*J.y|T\~$''wbex`]DKOo5wȬ' Bۧuo'4Ol"WW~~IKz P?B7[I"ٞ%[SsT0KV@+]Uz8t ˷ۗ`wo/^mؓ S4f{o/^c ļyK{y+T策W'INyvjL4ͺUt,]'O'ϫt Rܕ ZIh2PB ]=M99/HsTm]{21j(2Hڒ2y 5V =s 8H =ZѵtքVm -! -:aiBmera ج\i]2HHԠ$![QBZ֪Y۟`4!-T OH@!ݳz:SH9//>%XW˴},ciuKXZ>VYki `dvDXpP/B%hh P!-6 `*L#4Z~OX4@2Z/Hc,{bAwn*jR4jv"P!݇C<B=C@AXݠ: iPa *Ctit `n*Cu PT~ b T%A@p*ڒERu5,A̠K6*XRsTh'TiРR0*S :JƟ=@,*eP) * @OZ.0 =FQPE*D!@GB:>EQK{+TPBê P|ԣBBKB:FQ!]G iP.NؠBB(T~NE8_NŴ9թ6:T-t=_PYZZZzAŵ@ŵ@ŵ@ŵ@ŵ@eirno~nOikv*AU(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 376 0 obj << /Length 1959 /Filter /FlateDecode >> stream xYK6ϯ`MF SK֮lek7aMAn(R&q~v %r$Zו\Dn45Т&+?]}(%:[GP*`F,2<2*Lt㟋P6C'3)lt 41:TM^f)aLYo 8~dDƃ@1Z 6>a\14.* y`?WfAPc 0n⇬ b Fxi;aH[m[zT-w.޷/K:Ff/nrE;<hQteپy 3Oo VC`M *=0sӯĩ3\) ׫rnUAuv凷Xn^{@:9h$֜p6r䐹nM|@0ΡG|: qL^(|hTHV|K]-<zrǟ^<CO.aEO.VЀJKGeO0|^RP&MPvti4 pÄX?MLt|DRBw'}i "F#ˍ~bt&Ԣz;s1Y>%:@s{ Gw\1!IL@1þ{v6 8\-Zf9b0D3#gŰ>_Lj<|f\#0!Y?41'{53ii taNkؠH%{K[C2ǾMݶp*VY }2}tai _BsD' b4N[ޢmQmcEX,ʤ+#l҄(p./@AH"j?Ml. |5`x_X\v/x.u/{?fF˿v 4y ٸ}녆6@N^g-|k6w< okl@?bt+uYoδmJao7=|A`q3uҼ,"7/vҞZY'[~vXLm3D(N߃S2٦D7=> stream xڭVK6WI@ĝ\f![wʒzwI3}q܍:zNOk ufQZ78(QF-Fʰ:EsOյc 95Y(Oi&sڭo]ثk1<ړ SJ3XXdY9t 1AL\M ?w{Y5zV4y& ,H|9?ǁf\3s5ndjy~ێW÷b*)ruͦ N@jꀝȯۂ1fNmݍka̗URnl6cy89g$/9{.6y F=Asm)r9ǵ%[-NHi4Xyd%`Ntvì&_cH%Fq+q5 !ܮD^/7oJb]Mzy5 JO Gq5=pVODۃ+e!^z 4?NpāQj{q0x(/]P#EkdAG>}|-9>Ł|*V endstream endobj 373 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-59-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 382 0 R /BBox [0 0 439 275] /Resources << /XObject << /Im1 383 0 R >>/ProcSet [ /PDF ] >> /Length 33 /Filter /FlateDecode >> stream x+2T0Bkh˥kT endstream endobj 383 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-59-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 384 0 R /BBox [ 0 0 468 324] /Resources << /ProcSet [/PDF/Text] /Font << /F2 385 0 R >> /ExtGState << >> /ColorSpace << /sRGB 386 0 R >> >> /Length 6664 /Filter /FlateDecode >> stream x\ˮ-q߯Cim=$ d`{+ ZkU,?MQ,,.>|Ƿ?WʳZxχQP_?~V9cG{|S|6[G_][/?j{J(Ҟyg?>~o?`|7n|^%wij޶aq۾~W6x,PڸMu}^.mm-ވ%&};SL<[zI?9bs[Oq[~^bqC>6^Ϲ&B'?蟵א8a{۶ c4:`>gMݞM|h6 a}d"c}ˣMwp߹5V_]\9W6~ emզj7珣<>?G__w_Z!\ɚ_U<#WX\OrsKHs ?k''j@r(kApõ^x}6ր\.gY'\qbA\Ey :jP,PZrOk-o{h֨׳yq=BeKk_d[yr->U|w侮\Xg}X.7>Cby}|v)qq>ޢH(^,[oj{=sk׸z{Q Hk§tqvq׼o7)h3T{'1iL%s׳}٫5=ŭ_yv񯥧;ޏĭ9k/qm+Xh;d6.j˭5<*rNP"-e"w> D mVfk}5߂fC+>n..^2b_W2AKp2B}+q}9;X;$d 5$R_}`gIK`nbdNFnbȘإh$ck+q׵#},G2քR8D4~i&E4>>C/dmGn>>. E'=FMS[E mä- 1QVk wҞX~z txp  txP#G |~(M􃁎M?RC􃁎M?r􃁎M?RC􃁎M?r􃁎M?RC􃁎M?r􃁎M?r:ȁ:6ȁҏG|~0бG|~0бG |~0#=@> sQF9whGGHAF9v젇hA;rQ)A(GЎ (GЎ@cӎ @cӎ `sڑ]˦hG z3ю(í;HAD96AюJ#=;!ڡeiG zt3e;!Q9vG^Ac=D;hhG z41~vDivG.iG z忡姴M;R]hG zD;RP]~OcE;ش#5G)q.$ڑ_#5.v$}H#-H;\/ڑw#юE;RPH#5H;BOڑA?;A!hǎkvH83q V@#hGD=8D}/v[IhU2,m7jmCz-p6ֳhm2smrvO4*-nfmLznۦ[zE7Y:^on۩t񈃧DPb'm'Vfm i46$V l3n=cEcK^lMZ}g%oPb^VzEEdfmHaE'چ"$[z,:!%ըl_Mi&/Ӷia+ĊͱZgMٷm3n=qf_si>.D*=!+қٶ.mV `m%چ޷E7Y0j{ 7 g뺧X#1/zVR%kl)6vp6ֳhn;_gIԑdt[ޢw֥(9mDۇs[zmςmv1/9vl[E%%XM  +’v="=1n.-޲0bco'UVס{ d07J&A Klp; - *\*ZAԧD#GS f~AFs{R-Q1UPBS&vo:ank4& ǢY: ,TL/:AVY'9^]{F'VEKX4S$*qh 9=S8+h ZeU8b*kv˅TpjLXLeU>!`Q@ʂɗB9`jOiFv =iyX ܵ j' hUYvV!Vhh:| TX 7 +~!g$NO@hmާDC)xs,1e;.I$t(UVeA5 :bHOiFv ۡd"mC,&sxkj磥V0|( *ݧ)-.cu<3ܹ[jXp=",TB{GvP+]Vpz.VPJֆf$`cg+fWZ;j; 7 ^Ќ]QVgRާD##UV&FJ>ky.;?*st;0U>%%qxM D]Ea #U+d˙e: ^ճ,~G;Rx{r/Zbu4w\ʋ^;=#S)ūJ)ٮ*ZӵU'N/DU^Sb^Nkܒ]֡4/SV)*t-.cu8+=|M]qy8ώ+|%\ުWJuݼyҏV)*tm]*#'Ұsob~ڀDyWrNBqҠ.3*>]{ʋ.au80^SA5o:  ɬe^Tv0ZӵU^v 8MU@6>o/\ ]+}]=R) "̈́I#.F,RڡwLMD*VE-rKXlO鶩2GǢVy#tnGx8TcV)*t!/ tSSAeC -B`G]r2vz7Ypw;R`U"/ U#ߏ[6.P!~^vv*`"*Z"@{ȭ.av+@02*ܣ܎BEkmp/a$(7<VnߐsZ*;O`v,pS^F >t]* q;Y SHQ0`\g2Vox>3P77|睡pݎ†qʋh5@Ea ~EUkK ş%.7$v+ܚĕJU٧D#w)~ȋ'#{5=yg8EkwT:̯.a%H@ܗ{- :Rz4=N!AGC(١t' Hn tPkrVN[YdfӬ^BM1_SKX2o\NBF_rbjyݏpG=.F<~F̾r:\oG0 ~5"rnyˆĔk^Bܜ$+8B,6 {_ 16v2b6D6b%)Wh6 W] iSZb'gOgesw\Lb |jlAveXnޟ)s?.)?Z`G KZS__n endstream endobj 388 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 393 0 obj << /Length 3812 /Filter /FlateDecode >> stream x[_ OI^3kT<4$Ni/t.yڵdɑ|%,]i^V2E?\_/~xJ48Q,fҬ^oWo׻},V&2ϡɷŦ~E RyoFۛ2*Zzž(~d73mMϪc7M#+urhZs\ldӠΓ}}ceTlyj-PMM}#yÌyvFx3ÁZ) ]+n$pH?MMMWUVR.5k-0Ѿv=`ZX}]|conhlvw4|kr$!8P[wú3h0,ک{,X%T A F(kmV\q桀:"E{Xu/\ H0PE}K{jI3"k@lO[he'Ih.me44ԹƒVũUXlZ%}&=4aed(Vb!O?h4N_YXPUEW>_ެyb †*şOfj=G8n;BSqc1//1! vQ o;pzpJ:VB.dӋKW]Ӛ~1gTMu pR=SF)#-v?oۼOF7{QLK߬s"r񤊻91OΔ:d7(QOb!&Z^҆M~q[o򪭛ZX*?AC#ZhH ~ĨB@hkz+niK 'cF]&' v"W#(N jtabrc*m?q- ncơj:u7 )&ZoE  a/@ $ Yz7r(&T8JP \Equ" ܝïYi6 ms@j揃Rݮ:ނwg{׆=pe\V=vmF)E=Ꟶ.6.cؖ=J $'`/Ojm{>|!kvMFH'&IO8v3dQsr&ĔBM=!fN9Lw7Xg33'Ogn֯gJ"S˹R 4KꤹZnG9{rI`&kʚgY&Qs#6n F A#X,0>-lcn8Y 0| s Ph06 g:..5&GxF{7k;[GpvϊSR=g0R)&\h?BzS 9t4q&#L]YIŠLF&6i1q0M#ɽ`NȒn[fhؘػ<*F/1'V4-arnoaJ`*X尠`v >nJ} mC0ÏH$\wQ &7Bϑaຓ9#ȭ/=VwIM>D^ȶ&bD芬e,vT 3֒ʼn%տ͘s+1sWr&d0_@F bcl/Zbk ׂCJʱZ|5!$'1<.Ft3! }2 4l^2+f@mgK9H:_^Ma [ o/V[WSx+W?UH iוpSᩒPU6`؝bddXW3jq45.' J%6{k0{(e.<\,$ raeƈr "foKNX@CgJf`U.}ܩ Za?M$ _]vh|#٘$p# y5w3C$uzV^Ѧ Ӭm>NUUt%oN{)q<)u٩ *ğD_FXTH.o6]a;AHY>4zDxcbc%B6cOb},}MJ'0ϊb\"֗P;b}89αe^&_Ud]ۼ UfCM{ث6wFn Ʌζf+ rU8ŀ]]-#?>߈`xCc30ڞے@6싥H?^q5GYl`~n+ٲiHlw4 %6WN/GRuQ9"45MFw$< |{]݁I d^)׶ VSJv0dd ~_x_g}Dx2`ak<A&&A3T Nq5 [@X\C(2`- nOP0xÓl@28 !vYwlIoPD 1%tf'}UݗG{7٩lŽe7u0(T>}6K^}<)I!!i+eA&f|u'2_9m􃂖WzU"ǎN}BӘ'{~*l}S?~܀8־h<{zWXc3h6ɑl~N$c~hm>g;c78to<65h48я QZXԳ8HAq,LƩ8t~t>}peɘϫwI~CX[l, K6ERr%Ð[G*1Y˄7ӱU>51XCrwSѝƖH;kdF 7E’>P>xwfPK >슞}\>1&%6oǡ2֣I|,|g `>6'N 7  TlmKz8v=6-S_m̷]v,c; \-$'|Wѓ~U"1&.8 %hH2 Ғǐl%G}^aƍ } .'ϦpAqk_ mD.M֟+>~זbtVEГNR1 BV˖]d*fZn*u8C^rsSitުoפ_&3 C %V`C1"k( Dx'!ݾjg*=\(hhq+O*zu߾ώm[drQ{~ {+y;~?H}鋈zt 5]ꀢ\ZY?(@NPGBhplH`**rCQq᪬dždV25?H«z\+9M9G_C~T> wr` (YId 4W endstream endobj 397 0 obj << /Length 596 /Filter /FlateDecode >> stream xڥMo0 D{qZJ;tviw\; 6m"%3iSlsXˌ'=Co9 )%›MvZfjpiҰl ӄ I3-,o:Bˬ ͦ/,8½̫!:Ǯ-.>t_xSmb Z!K.ۮ\4?gJݏz7|!dO.i$:wJo8H R"3gH 8 Zx̨,c ܋.#Ehkhx)r?9 <-]զnbR%3x.R- E*3`'O,Kh NZgO $9^hiWW'! q\>/ProcSet [ /PDF ] >> /Length 36 /Filter /FlateDecode >> stream x+2T0BC]]CS\.}\C|@.ZI endstream endobj 401 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-63-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 402 0 R /BBox [ 0 0 468 324] /Resources << /ProcSet [/PDF/Text] /Font << /F2 403 0 R >> /ExtGState << >> /ColorSpace << /sRGB 404 0 R >> >> /Length 4193 /Filter /FlateDecode >> stream x\KF_e% #@B"eATu] bfrykqj;8C9Z>K9rgKGϏ?_?ǟ>3po:?S<>|z'ЎXYճ ¯uxD9:/9Yb1\g9Kr\,MG;\,B_[S_y'Bx'BzwZiaNwؼSʹ)Ey{'lj+Ӝu{(8w#mE;E9lkLo羅NQqm6E;EB5nKQ St9[U睢So潓vsk;)Ni{$ZIqj;aN.露8xz!xe;)NwR?92]GW:^GF'#o(rDbl` .sbpOM#mN"sw +m(nasDqwI2 KmXv .8fE)H|8rY^gq$[ tubSGYx)z`shȰґ]Tґ ^^PW൲6yZڷ̹ud3ԑnґn]:ҐUV#Z+-un/UckK.UlZ^X,赲qry<V6VF^+YnyNk%kZhrduqB279"sf}rDsqD0FqD^Kp(MA$rH%Gb#24#uD׭ksd {He}bG9R/mrD3.Q\|9Q쳻 G9<92l9"S3:"*Zcϑ 9G'f#-yG!ra(9@njUB qr8"8*bvŗ'zc#Ƒ98KG*9a<@Pek-n+ 9#]#⁥#QG2/H\HxHdi#y,Hw$VHоD݀$Vڡ#tyȥ#ёĽVy-# 7q[gq[eqH*rq8,g8Ҹc i#^ AoqSȑf:Vz#HZTo+s8Q0$Grw##{Z?GGf.uqB4}bv#"ɑxA=֧#]rb ȁ&s߼'+f71{q\o,Gz9#,tW5DxHsg^''ޕ"Gqtbső׊ypw#k;8R 8R#O#^^zZTGof5Stת+zȻ̑vHyH#{Sȑ7ɑ5ԗ#MU۹~-2>ſEEorE^"yɑ-H~f$G#uwpUr$6* }+nܼV|G"#y*r$r 8#AG<GH\K^'#Vbrd`92vPa 1EC 5UCWFNO5D^5D]A >X?a 1ݾdwoKR|]~߯3#i|Z/@G*u:Rm_K^#oS<^R\o|vGny-#oV P}#4G 9:LBTz/p{ G*#B>8Xxag3~Wdg5vźE0s>!Awq|oq:?r;>OHN endstream endobj 406 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 410 0 obj << /Length 1885 /Filter /FlateDecode >> stream xXKFϯ KlA^$Ed8RKj"|hfouW"iyz\GV8*W7E,OaZ,:¯^EH·"]Eo[Yd|į5mOw|cםU$8_7Ɲ=9HіevMVCq8Qc3CR0)r-H#eX1k k[J6fk@do#.;'#vY nH=.|%Eخx{2IY,:BlņUXK3D2wۗtNњM}v:x1\"]N7H&I<)Ƈs"iښ-wl -A-݂;?* \+ ^篯>yD柰 zZ$2X./Sn}5\u>\9g0XlLc"[b}n@P)y+fF3BA޼N儽,Sr(.mv!,(5;b뚐Ǚ.M|FT3d@ҡYې: G OZ cٱ&`--- ` 70ʞ.*j õ$ɹWzh4Cw,nOkIJTI7n0/ N,/t/ԟ>gR ٗɟH;NJ/` VsB@^m&s\CD5q-ɕvPܹ-jxlݷ}C"ixPo;,'zP#šd[jd(fUIÞ{hhL(ڽkPNcCմ 4A{ISg*eDcw{w R75ꦜgInAԸ*v=Tr@;?Eq8 ܒ7$lHj;6]6tu;XQ\t\*(#U nw~ɧT& *</қp@,pLBAL ޝ92Wݓ ("e<SX%,wA\|[A$9L|;N@#Jjsʃ(5R̎k V endstream endobj 407 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-66-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 412 0 R /BBox [0 0 439 275] /Resources << /XObject << /Im1 413 0 R >>/ProcSet [ /PDF ] >> /Length 33 /Filter /FlateDecode >> stream x+2T0Bkh˥kT endstream endobj 413 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-66-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 414 0 R /BBox [ 0 0 468 324] /Resources << /ProcSet [/PDF/Text] /Font << /F2 415 0 R >> /ExtGState << >> /ColorSpace << /sRGB 416 0 R >> >> /Length 5076 /Filter /FlateDecode >> stream x\˲e7R߯8CS7GCи"t\n~̵VJ:0\`r-ezLIG~|_c_^_~Gz|_߿dWxK(GkG1~.(<䂛GKNO >ѿ?(1>#CAk>hqǷgKG2n01n\=0>o V/FT /31ʉ4%yMNj.[{϶|~zO}_4Ϲg~^:?9h_liߟFuގַ|y܎4?||ռ#7w͇GKϾ?~ Z{}ݻdl=~7cZU弎qL \k,fS\a3ap*dQ~V9ћ4QONsAջZQ|wk.^kюQ&yg^]pڑni؇Vw[5lji~9(Cٖ>#(YP6L_]Qw bۄ m\ "lsҏ6[Gᱏ ➝@_m/a>^n#8|ȵ _e Jw?m0n{]bd>NցZ|֡l}J;P9 ~al`;ALVivꡂo$7qQ}Ipx۶9i{HG #  bS>|9=.ߥF…n]҅qt}c aWR(,s->;z0uMaЇ|]+ݔW]PvwȽ=S{/MRu>E$6m}+ 6K>VuB6|('+fO)7P>¦C!)Pr ;+ܧoR>닷@hƯ`!>}pVG+']qqdmeq\ 8O܍8nI OEfa;0iB䴈f|LmqƳ${F6+Z`lYI$v_q>!L ~m'HH w0 %ay8l2&- e78}3fF$#,p-9r&-;q S#F0m 9c2 aHmq: S#cwH$a$a9&; ܢӗ052FnL.&A [ be2J)S#8d`I"#5Iq&Itl,Z[c`>d#H #7,R L$7آ~klq+0UEBXcM -F'052FjOs,םP/-0 cTa0ƍ[}B J 4ח8qqu4 -"t N+?iǢ=!0X򑠕>heG@+?&<#VЊI+{>"ZaheGH+?iǢ=!0X#V|cʞV,Z E+[>"ZaheGH+?hd=0e#fQd2O\tcɞLzL.2R 3${""a1ydC@#;&iHi- ! dOB@ L:&9d=y0ܱe f9cƞ6oLӍ[A`1cO>@L6&_肹d- Y0՘\e f)DDcĞw&gLӌ+ E0ɘ  &[z`2Spa3|cOR?zdX-Ж^4RSяuE m Nx njjշY7նK߯/_% go{I1nۤg{U=l*MpB*I~窛l;K۶J1%o{IsGF1O^}ڇ6lnzXBnWym\~v}7:],t-}/h SR#8$b{)L[!MmX4c1W&6fIEg/wp>dЎn~DnѦ6mX7U2'l_nWym\v[}Ǣ ƾDUly23R8ꦶJմ~25ږ\~v[}#2R_dȏ,=<&B{׍H^ryVU=囶3>gϣmlwnw84ފv,5PKVEr\M[ VMeA7bݐGmQV7 0X'?ݢ,!O,'lX5Y |YOP1mJ6-"%QB*WcDh%GUS={9+&* )}0'mv݈#V-ϕT!•J-5mX5YHB~;+&xnH#>$_>םEHO(P@,>ZP톔>nsX}ZelJ@b}'s@!ǂגwՄ-2 E̊ ^}O)}` ic`\g^rhp -S@TL@UR(aBeY§EƋZ,Xf'y9m\#L}̚ ʆ%O{r90b ^[惘Hz J*7U njo:R,5P >q@S0=̾*Z;;B;dVu4k&*)| euq5QR0~ɯ\jКV0ꦶJ`{ͬh9rJEbxD '9^absaG1 Ρͪ ˖% htt$1q ?K _P9xS&bsqqlrϒ/ ;Iԝ~-ytXTִVQRq[I5*c/ƃ*q6K8aWQwmK.dnygI&|9^{ <J~3.P3Y1bk;-l[r%oŢv/QRӁWߊPeF6ꦶJ-F@Ў)ÔKmEI!FQs nj0u<*3lw :se A5|Omݝ#W0/Vo.#>#=6)7}eY ߸2_6W_cJos";((x'7"S/ڤTn_ 4fͭ/ܜ9Zvj1FAAd:ZKE(o`ϸEnCY~c4,RxB;1k+E%MJ v__q)!xwN6:ē:xV[vӨ=?nfP{O~Vw+ޥnh<5grz4\=}K_'ؤ_b~7:a{tko_3 endstream endobj 418 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 422 0 obj << /Length 1000 /Filter /FlateDecode >> stream xWKs6WNL/vp%3Mrp|`$ԖRIu |J2q YA L>hH[ԧwϕs&%KPJX@äkK Em.ߟka Yx9pYb@-u2\׀䂁8<"@^^1u!Ke0 j*\#j"jW/qSR)*iE7oҩA\<Ҏw\pyNApbDQÇQS"JٺzI%wyyQt~X|6)15dUwZG_JaN"H֋ȿ+imtG uɗYR?ώ˜CdXl@Uo|("]*.TT7CQznIU ڬ7 t]|aP{`p N<.]0 ʌqlĨpQ ҆aPDZ3(㲅-:wv<۬ͳ~sF,a$D=z endstream endobj 427 0 obj << /Length 1693 /Filter /FlateDecode >> stream xXKs6Wp ձIz#ɤ3i'2=$9$Hl ,H%OҤE@vhhOs1F2xXE F IXF_yۙ\$*~mYnaLG4v#Ah`ka5m^x tv6;?4HvYow=67^tnJ*ok^U=(MmoZ ^50mޗMhV8[XYlBẺ Sxky"⻲Z&2nrX;MiX*KUܞvUVuei#`0ދƹ"o :"#"£a*%V*,?W=i:1f$Ѹ= =UaSecܢʻIHd"yyW0: PxY:.R Ӫ@4 UAQA҄D *lT⌣It]mj?&SSwswƻl eFR1ӚΆ L=Q46ʥY՜YB2!06K_XY5[9na鱍 Vm,,,Lޛ%1q@(H'NX#JD::͋O\lq`;A?HIbsa%`S>&Z]TA 7h1u-(a| =&ܞͶu_{{ι#)GCDh"\8Ũ"\G (S1^ű&JSmBBtuP5ׁnpf2)_xCMXnN[τ@3ʚsHіYO@*~>`raR`Ia8?j{u AS+I POLYYH =nC4^j-;G4 Zp-VštPCPج bJI, ~jg\uNrbCʀx>H4ӑhJ)޴5H#Y& _$leP@WZ88u![V]C2>C@zcY6C~G)|c+O iF8o>{I21 Xnf8d-zH]1w7yNh*\dT 6c5KS ֝5Vn -wo,!:ʅTHɾ +bD˯]a&Th^`#KQt,+ ]Bu.`ЇAܔ5އ2bP5Ӱ?֓Mߟ}(='OE  l/!}';}Rx1A%Uhȭ 4p0<󝴯!2mͲ,G^RJ8x>q? JOXR,*HBsG endstream endobj 424 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-73-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 429 0 R /BBox [0 0 439 275] /Resources << /XObject << /Im1 430 0 R >>/ProcSet [ /PDF ] >> /Length 33 /Filter /FlateDecode >> stream x+2T0Bkh˥kT endstream endobj 430 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./glmnet_beta_files/figure-latex/unnamed-chunk-73-1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 431 0 R /BBox [ 0 0 468 324] /Resources << /ProcSet [/PDF/Text] /Font << /F2 432 0 R >> /ExtGState << >> /ColorSpace << /sRGB 433 0 R >> >> /Length 6664 /Filter /FlateDecode >> stream x\MmqϯK{k~r+ ` "B K]Uq^d&Yl#?}߯~/^38lW˿#=~ɏ߾dWx%\qgkGK9/??["U+r[^jz傇|\6sn-O߽uz4i>_>7_cl4?ݸL4n0~ןn\v/z0˫]JJF3-ͭz!jgcyeaw\;F}(qPͬ:gAu;oi<8:4͛=kF7cd_8(>KiA8_6k]k, +=%A}4pa5fQR4s٭*O WԸx벷%pǷ޺#p'YўuY_x ś ީ"=^7DV4<joGfk[bD6sGӠZ>`1BRWgϜ v ^lbB䴞 3b(pMxb^o9&{aA o0AXJH\e^t?0a[6b0*3l$ˁf @|\e\B䯀)d02W4aS.x6*4@l ZJp|O`B"v(K~Wv%|, ZQw*\  "G-vsxB1+,`#g9S(bҦ ؞d}KxoaSаy&VaSb6<}36rBbc#*'(B :\%Y6d:yjg7SpAl>qg[İOh&)h6sf cő :0M ¥4UQĦgmͩ8I<7 e)C*\@Ӿ)4&AMAf)h<1]Po+Ma*H9a_Ć@1QFEj:,3B6N q7||{`8KIb>[0aE{X_+L 0yF0Y9(77dӕ&DrE\5P{`"[a u3s05L"_3D LC`" Lѱ l&2l~Jk&r#LѰ$l&tj3DyԨX6UcmfBy0K05*Dl73!o*+L" |\ #i052F&01^MG#05G'&辸݄dr'H015Z\mbq؜dSrRbKȵSL.tabjAKRdKp|-&&̤rHO)5sd6R>۴ 5WMN.cbAhlbqd! jY~bïLOe#S<`3|_cr%qӕ~rb\\86Ii5ؚ8Y\HL204)נ٘nNM0yśL7W`j$nS0t̅ظ)0,}s s&+-/lYf+s!15*MWl뛾mL7_ Q0ބe3騖`F\xSI J20Iߔr*6қY&IsaݤeN`-)3 xI 6q q'&D\2] E)M\ R&K43'#"⢔&.R( .JlrPH\2] E)M\ S&7q9S($.LL0er3B”M\ S&7q9S($.EKF3B”M\ S&7q9S($.LH0er3”-GZ H &RK6c9' ,LlrfO@W-lL0Yʙ;Uad3#uBT)g4e:Er$NHRf(gyP $YfI6;9&$'LlnrL@M#H0Eyə1-ad3aR$gdjG69%#̎l6r&K@F\Ε07ș*ajd#SBf!g$A< )"iE68$̊lq&I@>̑`9cNd33Eg: I"sP(1#=Btgvtِ6!kPƑ!`*d3312I ci+0 / . -s ,>ʟ<~;l!%kMqD mkѶBV dvv@Ԗolϸ__>w}H:= &f^Dexz2l~.QRѷa[Qw%|Kd{ƭCE%G]he_H"?O~[ؓ%bVtu]7;Tgі;­6\ROW'Vu6JVJuQ[%W\=V[ ~_cކq+Ʈɞ$q6}P~_;+lϸ{HףΒsgBO#:+z2lQ2mήMyEwqG[x2cQ'&q|p[~'e+vˣbmny\q[m.<Ƭ]+j 9s'iuS[%ɓKVU@%h.hrkgȱ~M8ؗ~&m|e ^QR(#`֕8 &"~47-I@G~z.9 'Qk>%e4{k*/S> pq,P7q:zCҡNj* :ɮ*j*}JhdwĪmz3g(>4`sn{H1sFRaW}XG }JhdwoFV&.k 4u` U@ j- 2*|?5oGAJx\Wܿ&iEɎ - *;OvZ ^HhdwĪtE&niޅLn|P+v* hD*|ٰ;bU '&Wz* p>AiN@GE RŽ --ҕ@ڵP>%e4;c]~UE*~!!ǀz8kKqHv)r*ЀDz HgH #V_qW-Q{t<( VuPeZ J2ٝFUH um?U:kHqvi KӮUYU͆/[oGwI ޠ6u KQc ;yJU )k_5UPXI[F8&tb/9ێgK뮕Ң~ϼE[GAwtp=~oBGy$-I G1 k.V !K>;b K.3j| C@G !i׃Aޯ @e7q}$Y5ϐf5vG ?~((`~ O Jvy3o:VԚ8OIX#$%O/cc$"ސA= 2>]SSi?S4`wF>@s"xDoH:`GP"dkVQ+USRF##Vs.QPqKWS$.5wKŽR9FH1j*}Rhk|QPyF>ڷ>½ @v)i#V-y-ܮDv֥`##Q!-zPn'Z|1voYkCIk_NpȾf^o::m^zP#q*;쪢<6|JhdwĪvw:J*##\P)7N`ϱQAvZ>)U4;cqCv(|^A]6pR~A +3ZKp))M*<~ȏ$#AԘm(8i]A&k-^;c![> :Rz,@xN:̓v=(8ԉZKOIX~r(8M@~ įN SRm'XPqn!Z)|J:lF"|~][7t!M#hwL,Hˎ5VҧFvG Zڷ?KϸԮۙ6o3m~񚨠LvbXK}SRF##?Q̣k\o=1!AҦ;**n$VҧI͆/Խx(U? 66鬪pd: IzI'rVҧFvG v>t*3~s4~M@G+Ҫ;JU4U|YZJ*ڝF+H k1_>pq= q#~ );,OQkDP>%e4;bUiy /%9wtHH/j* H)diT+kf_}~9SL*;<7:%k#{TΣ4ݵ=qg_O+÷$^:b]~*d/a!R4~՟l LG `J*—C_&k@6Cg:PWZe6G|v9D DO W3wF&ܕ+V}{,_]j'qsB= _ _.ܸ7oxhz.znPz=W4|Z\/Jw1bC[sᐺ'%{Εcga6!b|$l>lnsħq^F,—;<7Q+xNYӳpܺ&%é+|QuP6G|O.Z/9u-,<7mɟ_eIFϞ.vk=[:?{dF;qz}}i~oҥo?:?ۿ~J?P endstream endobj 435 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 440 0 obj << /Length 3447 /Filter /FlateDecode >> stream xێܶ}bh"DɅ$Ah&"pweHI]{y(vsṑ,YB__}Ky<]\\-4_hĉЋUdncv$5Wb1mdž~~U^~ƀdi' ~$Y.V3Zl8rјOO%r,>H˘)$R/W ȉp=#I%Ꮷ'聹_|nrڭpx Vb ?u29A`,mͳCrAqd?@ 3*]Рk2]֖5=2?6! %+&BvJ 2qŒ8W͟Zh-OTRۻ?Lmn'dQQф`E+3ֵveO/ޘUWCL|2. ?hLP$ȅ=ydnÛ(6L*b:v&; VPp4sP;xTI]-}m*ͦue~-P4ͦFķeu e3 .[Ɓ.wP9>D,hE,dR\>EdS)[+ q쒉XkBju-QCx1E4J.c>ITrܻ$< =$aF} GT,v]W}X4WYlKV *NX13|8I(!C(.c|1]6chnLAGe`@{Zk!7)h1"}fd3ԞGKgKr!m"$>$7s;߿?K_9Df\PZfevdKrgE І>Fzxu\r clqyY\  6EE;W }7^o}`F;e8[EVOl CX1s8{'ҖR3 ?3xS ə́lWF{S 'M Xp X%}],"BOuTcu2skhb&ô/d( {sNV>!)(HE' mƴH*0j0'ǂBaʅCΧbD'S\5Gq+p;:;:qwC\r<*f"M`/c1A!쾦 jCV&GIGݬ \;ÁZ%o[vs!@1xwsi{,`9==7*T6`*Oǝ4ɦ2Ն}"vߘ/iV'H+~b?C2vQaTSo )4ob N$e/g?{$ Ќ1rh-RLP?,Jӡ4W5;9 _KTܮ%hb4/T'!'ps2")V\Q)Hvu j\]J\eGl,U/ l~,ި"EقUG}h1W㙂|U`9I%%e+RjB : 5NH hi*ȫTzS^h}B6^(]P˶_nla-k>KJЬjr4Bϐ%Vr[ʣ'Q2=I.Qjm-Ȇ$"ӑ}ЫU_Li; W;Po@ΒQ"QYA$ie%쾉uJHDwjih_%Ng)lXnj<7H}y =sU5'K"1 z[~1ccr*\z0hqU_,M+gI>qZ MY'Pf72Mb"z &،)J9]4=tْcK0JE~;RAl.-U'oqS@*'G= hԗe<*E9Z4z8v"cDI6BˉN2m~ 6N6jNxJK ș5]#mF9uȡZy? 0EՉfn|t4{/>+Jr5MAnR!+t%@MyC[ngQ u_չ⪏#E9^Õut^[e)rѵ&=}j0Rs?~Fe6DGtLffӗ OTy(Ow]fWNlN!Qa=Qww*Wuc7 KRll*>RQ(;QL' `s0RS:"h9mz:y}z[oqy }g_n!262rb=5!LCI1*zLľ6 Yy:|˞,_fO(ѣ*6nQ4p=}bP&pXT# k]@ R4#k[C I.m\Vy5ƍE0TN#1E8HgR0}.G@@+ޥksU @_D+?Yia۹4uտXZi|Btb0mVѺ8?ٷNƘL҄hv֫:Z=1AWȀ?l߰>4}٘-Bu㿾~Nc~{q?  endstream endobj 444 0 obj << /Length 1774 /Filter /FlateDecode >> stream xڵXn6}W h,;}h RCykJI8ߡxjWbɃÙ3g*3쟿_={EdT&D$9Fb|L/McKX,JM i^1&ߚ4]{۷qpWnjA:?v`ĄND!ͨ3c=#)GSptlZ`miUWԕ3~ް57E^_X7{r|s?fέՍRL;Os2fǾ׭;~42/*V.".W!^2%O1Z[R[Uco?Q(")FfNC4d,!3<-~b 9&݌OXeW2 {x9FG(,&(`dV*8! !i20|4x߸ &5x]H tsc'0 %}9A[lep )D`a-\Mq."[_6w;%*mhx+==5wOrFR'+i;_ҩW miWU֬sƾ*az򢎷>fz;qߦ/[{M7 p6&B15c]#`vM]NZ1DOG. `J#W8r' fYڞa&j(jɓ$w1\Fd\фCҼλ3N۽>tyӽt5$i!|T@itq5 I`a<#²#xu3[p1f,%]STC%"bd w` r-)CXi'} p)% h$3B˹ T"}EEDo:kYoG~$F 1Y` `cc ~A)!2>kȘcS f;0TCc "˸8bd9 }!Pb|$8bȈ00ߗO 9ŐD h"db(q`|Ea :UCR2`p"'021/#ÂE &YN J3'0@bsR<%TesvP2!t \P:!)edNti1t ROaH1&syKFvS,D9S5\ГzGmJ>O07 endstream endobj 448 0 obj << /Length 990 /Filter /FlateDecode >> stream xڥM62)? Ҧ P@ie/arv{%JpΐHR|\ȡ~xpӾYmAa@VX=ś7˒h~Y Yu$'.*|p)@nA20C:cpTĐcs묆̔bxG%i2~\a2 nm*C{3 =2 08fUI14& c6.ndpİ gЁauĠv2 pT&. h..aF49?Ta60"̺U:Ɉ *Y/*䩋\maS 9K2@ZʊXS9RYDTfY-f׽Pqoc߱ԇK(~>lz mOz:ͮ:ެnx/ep}i.}{ى^}JW?#Nnh!dJ\6bNފ_2~tr3| Mehhfs֧z9zKtv`Wn>}:~7MN1\,擞μat |,:"JwlGit%M^95߷jw۴^F2>&J/f/^JӻVh%/ܸp?ԇ÷CK v o׌MzG1 *Y.Kh6o۟Kfoš26_y;/bPc |s(v'+,D= TH#$ʭNd*ɟ endstream endobj 453 0 obj << /Length 654 /Filter /FlateDecode >> stream xڍ׽n1 =Oq@Z)[h *ljƄy^3l?Bmq9ٌ6C8vW6Jzunp'$yz;_v0L 6''gDL+p-+3H WR@^(WoF&rU(QZhoX+|H[ /UDaYٕZ4¥s](]W^nSwd' D'h%Hi4^B(z9"J+XOS1X;ZgG^$SO&MzMv(-S.sX8XDQ ӎX J_+J[JoAaRL]v)k$*aE^fWx*sv Y:kU#YۗOi9ջ"^*=S(1kS%vJQH^H1U4(e(J#,*FHN"hESŃev[娼Kڻ#D^+X Z" 2l endstream endobj 457 0 obj << /Length 986 /Filter /FlateDecode >> stream x͘K6҃D oz - =lsDȷP|q8<':/pxY+S4;mlxeNp hcl5C˕KDl'pn; ɢsRU=Fm>zᔝzrS}nR!1x8V0Tqj̶ޕfyyJ۔ma܎&Vc2/e\!ULٜhc_OKc^3`q V\>y݇|A1E M&++j:m>~c'3gF.ʸ1e0]=7_ؒ}b_<ϫk6/ۧ`+M%s cӻEh HB9NW;BtMW]<.Y~PGŊvCyl$Ii<"^(]?[k?I-騗0T ^ߗousfХ!X>BH endstream endobj 462 0 obj << /Length 2419 /Filter /FlateDecode >> stream xڭY[sܶ~ׯؙH0.64ii@q!\\[χ $]r_D,s|]:ٳ d @pu&QT8;d4 cX9Cig(Dx֯ \ }hlEAIT!Q't^΢vb1}U[JG(uY")BRѨxTkQ44oo|SvN>it+| sCµǵP) >%MSςSAX3!{cGf0˚2鲦rm(!e_BڲH6~)VmdY2uJΚL4xDiLOZm<]!q/ҹjt:JQWnd4#,= m>+H<'(֦I=xp$auoG Cκ;tΕ]ge'mQk$ö6nk{g,o =ڷ7k``VJda 8zU|Nd'mcϕ`$,Qo c&/C>Us+@UTi%$f 5it(E8:Ѧ?Q"!$3%N~ù/3IoQIAG/Md[P"D,8iO(M$"`#۠*d56HBt;KF#WRXmt&A$ cY2*l5b@CpQj[q]a1JBXHxݓDzJ Q=ll|6 F(mӑ^G\鐀=dO+cH5sܴ~2 7=QhJђ3\jV5Ir M&}E1&rw%1OԾ7yjprUsVm?΁|F冡Tq>3zT0ɚ]ܴ-CJwV HͦļƴV{nЕ&y[^a5t>h$+Cn&bi/l`X΂kpQ]3CZRA\)vƘJP)q{gc"`SRN8 Ez;T|Is;\gy׿τk2XHlXa)D_6<h:oOCl.CT= @MŔ.^H cm2ȗk8Bj҃Q(\oSe<ƭ\ՕJ_'nj-kpwasLfzNf(:/٩(& ?FX||hX=)8kܦm|5joDWF$=ߘv 1% $wuO&<ӛfaڧbUw&TojD麐!S{ eJSI endstream endobj 330 0 obj << /Type /ObjStm /N 100 /First 892 /Length 1952 /Filter /FlateDecode >> stream xZkoF_1cם"(uͮD;Ȣ+QA\rHSMy93CB k V5Ma=DhGVBX BkͯZi,8]F)"%ay @uЍX8ţMQD!!E3h l+$l14a/9ã`iY# G8ANcM.qK`2AY=BMF@w1 )p3;D^Bi¡ +ἱ0:4 ʥ1#UW[Xo0TBXK(]9䈆get*` "?2NF 'B)2!&7 R4Ñd:t"v:4FaOǨX"&>")i/Ȕd $k24NB&ɳHjBzP28EvN GJeɳ䛄n8A!H"K8PĐzO8XCc!__p:# 2};&xT#67$е+!NVZ3q#`_BB~boHM~*jq*#!OU?W^@>)Ť1y@j>r_Q_}GdΰL>XaRbz-/"W]""‹mϵIYjus­= kyΒn{b*\OTVy] e59B<9QF;( Rr2ͯ.'o˙k*~+3,-lAZd~U? GĻ~;+rfLfVk~wRc9?Œp&~WcJjSNƁ|5S7ܨ%3}>+?E]a2FB0Tx{dYkň ogYay~^ G8Nagc^Ÿ8& f u!t8<d]Ġj"L |8DQ%fLfr9;緍o瓋|:ZVդx'97ʇYq[ܷCm`}^\raNHvd6B|68f\-.g{F7=nRMۥe1&[tTL`3|!恡)F,g@6gt{ր?V'<r]~]z5X[1(TJNUԛˆÖ=o>a2V ,~Z{[҅*H|*R|t)#@ې5l[ߩ0Ҟ{ܗB{>#>ڋKjmB+9i9pSNMޤݝ;Է>LÙ֧%OַS‡N? 7oWvߝQd7nuIۮ))}.盖>ݭֺXG@hҽB/>x_ x}F|> 1ҏ; p19Pkz| x?b|BL BL[ʼkb|eH:1>[{:=cɛ{;4icIu`J6A6J)& ȩ_ ٸ- {UGuٯ:Zw>sς},M6B~ҸTz)samʫ>nW"wϝ[;[el?gHv NbDTİoV9Unֆ #6&ګjFaM2G ߾,%.n eFo*6|&͕zm2];q endstream endobj 466 0 obj << /Length 3174 /Filter /FlateDecode >> stream xZoBJ-}h\@QI \V2TH_ߙ!ť$Z|+P?X%wvfvv7LV`7A'Wb2Vcn;7 &l&~$ m&엑 S>d_ew<$~rq6YOnޝn_Vt40fngszn:d89O_˙^ E s`!uTكDSbɕEKgSE6o&2џx5W'O>yoNalY]za)m{:ϖ|mXo۴j*ǼLwmHi?FQ$(vtv"ei=/B* K#ZYOg2a}N벰Ϩ$3~#ާ=%Q'in>X4\nl6YYgie;mT;3ihdž+Դ0PiIkJ۷AöYA-@ڢYUfr~ ֠3}s7l&Q:lDB219otU<IxmIKpʅ Q0N4gv w窛,VF1J4/k],4no!/ԀqchƬ]I{|ֿھY.NȪnl'6qOj2E׾IgB kHkcT"p brfB!ؤ6rK5q<[>Y[%J_B8w&"=nd(+%D b*QBwJ50۴(NpEc@PEl|d|('*]갰5'AspD/^L+4E>gIL0釦JgI;/J4o2m F) ?  gd)x8\.]V^@xfV3b?Ψ/%Sgp4!-*\B(ӳ:yYl{4/+&s+ɟiɩiڲ^e[(ol 泹훗pky_z/ʙ),@g]Kn3ZW4v^nmD m '> j O?2kwǭB:suN>-VuS^?zHySVHpDlfұ+&}"'5?S PAϷՍh!L~E*!Bݘ j(F:Ў&߮FtMYc(5>Z&f|2\a?teK`#Gm.߼=z8ʤjF)} YvXQ갎A Hcs> ?B"RPNlV8E;}ۋ0yiw.\s.38)9 :P23 1e3SOpj5Yp<&-ƂnƔY{0'+'^mԽ+D^{pHx)z9׍!5mG U]ujp}e[uCY1H/#x _ ?;3r s,>O [֟<2){Zt[\VLBoqdӪ>`\B&a_%5'BLCNjo69QX?ݣ:ʽ} 2g"H`;$1{Q< Í8v^X%J9Bۧ9!4͟8A,y--<pЅ/y/6/鐌2aY{3ˣsV󳂾r>3PBzLjogX l\ֆlұ"[e-mܡv9I%&>F/L20簾a. ʭv;"i{jv^ 6$/*f}QG\r/_mjZS5fW e3Ɯv*ѳK!z%:Z,vtz?2$}v"鞷p/% endstream endobj 472 0 obj << /Length 1068 /Filter /FlateDecode >> stream xڭVn8+P TEiov"hAb t@۴MTJN|h(['h9r{:6Q]e;ETU:"ɹ_uDvd2偺秐S봒R2%'Ro+<.%k(\dFx)ӲصYC$KGJ< vgaKE\ ]LsN} ˭'띥uӬx.B[Ĝu[M8etEtc7xhz6w16,٥vvEOLE*>๲uG;Ci+טޒ햶A&zbþ1559pf`I `h=}sTcbR" !80A D.h"2mTQOT撊5[ح@(Bt$$Bv Ɓ*nAl9r> B!z$ZBSHek'0Gh*Pzg)XX##',WB\F<)&2UP5$ϥ4ax% 8Yft|0Mop:AGcVߚV @?ԭ.7a#]N^i &T,( MlmGS >n!ە['aOj~8=ƴ}EPC!Y 7D*OUShAG^rvk 9 lmz[I"rޱ*'EZp1!BeQJ""p0:zVھ`ieVc1b߾.D hm v]B6axJ ](diڝQ!]gr(ȅbjpH  RB [ endstream endobj 502 0 obj << /Length1 2191 /Length2 26505 /Length3 0 /Length 27830 /Filter /FlateDecode >> stream xڴeT[5S w ; ,Kpw ~;PesO*ꌢNf@)'G#+ @AQԑQ@I) 489J|n5@ `caEHN 7@2vhL*Nn F3Sw7H"jce SO?bL9Ss;'O7;@I n89֦̀'KP.VSTQez/Z54J@ZS]O ~+ƻ{tEI Q ]IV?k/==*꿮"gbauPES>=noE@l11'/_F.#/'}Ek_wa7s@/9Ҽ9mZKxEdd%4%/I5\"Rd!DP850IA0sce(Z[Jčȶib!hfpb`e\^ntV{b; @sH!m *̠}ڳd+="A'd'8+>ƴOtnƤ0gTƹM>Pøv&AI+7v"d, G2{Ԥ[Xy=Jcut_,q'cm_q4<]fƐJ?yWn_\Jt8\9q* D7lt%@ӑCX(S, O%-ĺ ="ITo8ƆPm]ؗ]McjoeVSKgUnֹ9؄xh•Xʩ:v&^Ŀp~/J9\5ДV^^@HlR)iy!iD^% Ė^dFG ѯ}/\D!Ń]ZSri=KLɰƦ}nO/[&?#M,@OÆ!k?_4#UWo:[4 ]#с߲{0^SPPcdmA/Kd3LI=zªFls4CBq8y×/m;tI-#+mk6!YY&.4 i#tSҌryɤKzޑTk3GC],|[˝%:l]^_gٛCgtpES͖ |!=H`n*O2n3oae^n^(ſ^¶6^P$p@]]y jj篊oᢑÍ&1l#Kw/ub(m@>N CAĕj;͢= э;ߚ$P'R6:UZJ''XJU)vW2DD*뷜$jQ^'V.WH \&l~kTqPT'Uz=x46LWWA%GAuwb>6$^[6x<+.@|Xz~qɣG*[2zZ#3BX[ !Kwls HY| EF*`?#}mccmN`#meƙ!APG1G .jT_CҎ-%p$D4HDc<z4<ر`W՜(w?xeг.0T;t~!ƨ1.)\P$=c)vA `km;:iOx=Oc]=XM;rOC}mcI"(Ȏ[O/*q4 %Lwu:(\WT/`ثqeh-R1ԩ !Q毽K%Bʸs? a04&qT AZ%slhV2l7~3:ŧH *L8<ͫ4|E"}|@N]D˼ %(Daa#Z[Ogj>Đ&X|}ed[Xf$|N/3dM] @bH6}ԑräVr=J4>ib]Q:('^Jx@q +%CpN=+Ĥ"Ǔku8uRvk?.4\4-)bb$tg{ }!&#Y!*aUd^&4lRL[ LuYwgl0N*|Q :C$ֳ2X IO?Cnde}Bw~ǽ@CB}״͹g9䃛΅b,ƶX?/F7q-E{pdD;l3-P;XѦkPc/SKNljBX}RVx,2MtKrZ EmI޿SxyPtId?&ƽc9iY>74CC#lX.-ED}J #I4́!;ܨBpg080ir"4W %XwOXֻ qDDG`JaJSGl]vr }Xrq'GҙsX{mP{"椄?jEijp܇f?̱7فix$G_,uI0vV~|w*,#zBNͨ@6R#0>h:_aP4eezyQ>MZK*|Gw袚64P!C{NckqJQ1j)ꁂVZ֣?H <*Y(^qUk(fku|py;d@;53 )}ό.#{7EE)?~pV \hR,O=|jA=v cM8 OwLfXgM_gpl>#X|*9rJ_V#5U$,aIp 9fG^' 69Urem~Я\<JbYdMTKZ8,&L%VN6't k'H|G?,kY++8TQ61KS@2f e_ȸՐ"ߖXI:vx,~ ٕ=y\Aoe#K͚W@Hׇzt0anQky08Ÿ^ԋ5>Lۑ /*EM#Rny8_52*൦>syG%uL6F>`pU I)_ɲי:i:ujyWckAY]lO +-U$FVb3z(ut?>o=+JϚ6MGSԴ+;.{ҵsWEs`L 45KO~~glcq댯np\`\D]bg[me}qgwB\j.!Om . j (D6cX%/$A?]EL'O/cWq ?zm$gnRVpR>:F4$n:pԗ-7ڠ?h2abe!O /)ʕz,n>*bI,-v38 ]-|jcqzo4r[b;2iFa>TYdcp]tZ_~Z@ fɢj/&f=O7~{,kJ eP|)!E>6lTT,G_1 3v/dh"SY ZSҴ`Lu5H\7^Q\ͥJSI*KuU^buRߎyF6T&EUQ =hǺ|uq Ǘ>8I3 A9ş-aДO(hyCcS^Np({+Rigx:lR ct(]a*Hv[ٌdLÁ5ө3(4޺kw-u)= 3b(XLSGhk?5 9K^ a+]x@$/hxz_H+e͂Q DUhxhZƷ;=}&5)VehW&Q i 51DzI4*(0fF*! OdF#g$60 @t{.EdVi^/7y[\ܱgCIEJ )"x ]<4!α,nj\n"T{ uZ\: LSE "L\0:"Iêth2nMAzTשɺ&BjP7ިPhJVCf\lnZ,V˃ }eGN((Ll$۶Bu&0l>--J nM̰sVށT,#Eee#4Vn !$\Ғ-0ZHH+[_õ͜OƏeT.9yOĭ忘>w;g!ԥ_–݀f3tRТ}=(&})upa#FNFiT6H0|>MuS{2ϒxD/m$t4m (1M#T!1}| -BjC6՚CPgyoe՚@%a d!6XwD0C$\zUUU%^7t@=mKn4enR* Dk{lY5OZw]B c.1n-]JXUtΙ~`<{R3>NM,FU >6ݰ(,D:[!UJދaJǘ~p! #:Юaڷj8+Scw=@;yvwv1v˗qfd ET \`o}2-m.tBչL'Tg6&%z k~gxJfjB>`0}9I4/7_FMfx0ap -bt7,V{oGa҇:_6K?C;࣫Z--MW8!nM0qO+ wM$qi:&š ==)OXW~YzQ.Q}kL*ebpdA] q O{@赜jaU$AɊV{2̌+DbpQ&oD3/KK=FM X/Z ke,6cLq[7?yA%DR(0x*,o"~œZcKwj$mokG*~<7p۸ .zCY5k߲fT&kn>& u~aU_ݸ`'Ƃغ4q_j>w BNqteهbvhW(؃e\E M:d|Pu4JU{tiKof]%&gC~u>gs}[Ni:=enuI&Qe,-"yJQ?Ӄ#>[=w!YKn/&}dHpəUj(wB)AqBc.D )\NLC U[yg#- P%6lK|:a-@pQxNI?I5X=NvQmS>#."2fWCz8DltJڪn5VgdH |/mq9{/04[~ Ѽǜ[1a2^`_x>GOOݬ27p,b}[Z-a6=i ~űR:YAt M2[l`|;YG{zW {7F oGE^}Eoy*ܨY И"-0P3enyݢX2*>qPk5!0wƕ3}c`uo47?ز`%MJk+7F U L(z(mI\ ;U烐';v\|.3r`2Y Sp.Lxv<˾W4u2_q\:58fa.*sǸj.Adw7d0qMϡ}] <&E"\ktWyKj.ވZȾ?|x.^~; |f6{fޖ6s#W!5sg",m@jUĬvFhw-GvFQ]].?YDN,6' (4~[EDv^LǦfpn.D@+{"p\nhjWk޺q;-G]>wX1fFHSURd%R0eKL!$w{Vw]c.fs9vVD̯IN glC )(MN,gݦ=<N!vABo{yPBi] 8,|)+ {u>,dǃK|&r̍m?zWXBV= Э $:iZ¶vgb|ZӉ#CA4]-(Y^YF7oωob$h/lb\8#8ݭ;*[PWEF;B1.26ڏHk{a|p[rq4uf Mоk_~_(/.1_=5!;/Iޑ_[^G3d *RtE&JxDIPr6Y)sVe9,p̗޻Yha˛ivFw EaC1V}diDd~ro[x)Q>e^(uNw+cIJ#*b`ϳZK)5ʭtuD鑎/ C~8mKl`Q u 1;J&P=!K0wu. C/nx,~jSmH%]"Yo֌-S"mdE NiuvRcVly uʨq)EJu)Iaj& pEo! 4䆕 zc3{( 7J9_)}; |X$ &LiuF=bC;NbpV >Bre_? eu>iUSJdJi&bR)>v{`NHʯE>D2#) { ޸nELN:|P!eawד+Fy ֟TȄeQK"gCހoW`=2pv!EfRjėŃ?k_j4钬 CSK؃؍)utX}]*7%i\5~Ra21&`S20:+9|ahm" UboqK:2?~5.?4rV: tɥ!WP0Cq4Ylښ tRbN ~ OOG5莽`&2+ϴbFdY=mˌ՘of7-`rNA>7+\o'D42fqXjv;'hֈ PZTA$ ]J5Óož=CQoogwm6~zuiR.ݑ'y|k4Bc>,}P|ŋG匲~m+W`ؾ`ч(D9nFhK`/OųE؉Kb("qḌЕWUTCJIԔ[K[T b~pڻq$^Vt[`A+0,O1!$ֿNݕlWGRr:YGuV8D: wq\<8BMÐ^˴dGֻkn$jo~ǭ}ܿ^EVjklhGd=h[=~]zڮs @.C;Z)k"/}@ng(J=,U!囏qbW|Qf_EMɊ]/$>FNSiʿ?m)hҩ"gS_6LϦoéELAQ_ia3 m<*#p*V# ̅, Mb7S%x1R静w(I7A5}E^+:nG&upVmb]-j<NgŌql&m{;'!rk(9o7{gnM4zigñGf>adQ4/L7BGT:礎ubs1YfQcmhi1%11l ̞ŵm144r~=@_$=,dֹ7xP9k^!J8COI[^ x}騆+@pjQ UZb$oFTV_y=F 8^C1V{iqMUK~^I?{!쏂 S þA82=XM5me]#SF8 UF[ߦF{rwXG7 &H4~Uʉ!NI[4KnOȁ5Hf<>#hãdlI& ac6aU')mOr̚YІ=?;3v H=>fNS#5^##ł !8";dM95͘c٢1P7W~Д}S $_pGE_+Y&-O[ky( nc^Ě#8SCRK37zi[q ޮߏN@op:rs:3ǀ7$f"AyZZj0&N++JpxqZqWvEѐRY.ODתI09 KYt.]b$ qHOL)|3AX"C&{,&4j<5FҾ|` ͱ8KQMeC5qx5Q#)vhUZI]n te\&'t MM+ƒ"%cە5#ƥr o׭&4_֍eAOwe QpVǢꜱ1- a$y Ҋ"qŮ\P *Ar錖"@u&'Y^,}LhT z0 z=a(((X鮀Q:%eQmA &E5~j" 5Nzf{~˾v.r~&_-c$"BkX* gZ-Zuچڵvj>q{#P;k2̧!YL .+%}> !5{87%+[[sA HwU4ѹ$px|3;^MCcBՙ!@\)S֕"2i)3gCMAo K\9!+6 U5%qBjAƷuTT͉uy_wf&b5}sD3{>&:{+RsPGC@Wޅ."5VjQ\*SQbgp>YLCiQ $}<-b{ə#v1{;[8c"ھ*;RY@ *iOEk!Sm4`\a %Wm7L_KEQݕR+Ֆe*`Qe<҆x]URK>^Kx /2rŝN'FQ5uxe<1f`ֿrHH耊#lۏ2Nی))鉼-J1a3λ8nd_`Xv|J\FB]FTkNdG1D*$sDyzO/O/5ȡ'jȻ t4Cֆ erU_QOP3eEǗVv]["V9HJſDMɒ5_sW[հhlv$l ;ϯyO߷rZ%̋pz6v-An&BTGZϓ@x&|n+0hwmAik@!TJ"SX$zt$x6W:K4tQ EBk[tb; P8=KRTl*NͿs%b9ynY'"P9ufNdB]\Z܋3*U~5? gPRW[3>ĭh^'^I5&wۅК9sszN;tKQؚ`,]jx}w2z*6yDǾH,S{" (<3A7X3Mv JAs]'Y4=\rHu}lDיOQ bQ˰ WX_el/*ػMcS8q&. Kd:6C.nz#$. %t[j4cΎVp@j>i\Cm_cؠ飽j=< *ibK>/B9?nO69BxYYhdɡeG`#zu VF!v3t}^탅ڹ:\ɱǜ1*]C|р j¥_GG)R:5K_ BYJ}J}f]EЩ ]dkưB9x聆0k12!`, }^13\w+?{:)tb؝g9O 3GJrIputR=nīDm8 u}iۯ&΃wN ̵ĵ)GaqhTƫ7@O'0Dzpɽ'l{D{K#n>`(&fבqWlE9#s%IB@ۉ73"9ja$ >qS3,=/j ".bxmT|Tf-R2:C"2ĽlEqtK3l@ Η8J\ 3)L.vϏMǮsͶPKvM.J!j8w3yami]M&Ss8gOjqYrCpI J(Ic&x@*/_hӉm{ F3oRMNl<[l4 ;uWQ'I92$@<ᦑ[gCB8jP{,A&-Ew9 |QQU0CT&rso+ G|mMTd95tt[R̀pW]Tuڠлm[S;YS_ YeDA{!XcJy!8^# 1#8 ؽD̜9pdJqlkp2/yB%%4Ӭa;lG [7ɧ#~}מf ~-3c{U:>{g_عtb׆"; tAH[fCj޽tӊ^nd6JFƳHIVWھ@T!ϣn*~r* pa9Wr44G.&9ad S( v5Gn !W i2-Bȓ15;>lCHme}+J3,$.2S)s"ܪl ABRp7i_5.~N]ӌZWёv1\9\;zy)/8.\u]?SǪx%Al.l^1w*oā )z@Dol '5tb )?JIXc9qPp> Ҙp#(1>eSDĀyaQ0'sïx`asˁۢhjKm(ruԤc F5uotz }f7bQ d}Q:]Z8 wtJLh0#DH\BJetYvDp25TIlW}_r2}\u~=C|oW&pBa^!-;!l@ cĖa㥴 V>U|3Aʒ,Iބ)g \DU),/5ѐZ=:P)`obz΃. H9(gǴUt%;5 N :U3mE2^ID*~T]o@hTK<:`$J9sdTUO+ꘞ 50 poH<7Jjf:CȢLJG2Y"m2&7|5z|gi<'VktR# TҚ}"3/N.1A5~Y%ҶN#F:3"f<.)^VTH蟺t@m: LdFw jK(N5uj+B -,mJ  ϋTyҙgr4;S3P2B`+.r3У;hgYfwCBv{{p&D]{|{Ftx3s|z(SmIzh-6eFY^F3:YuA\eSF$HTk Q*2'[ ;%FQ2c n ^H}c_ UFd$zZv(ĚQh_%'9MvujD@Y@Ln^Uũx;{Ҙ#ofR)"?2YmeA  ]#dאV d<ލe))Oyv#\R{h"!%|RW)[C=[q&cu H }5ΩSFhmn:.VPV $w͋HK:Hڿ-H Pѿ;m$6Uu2:ݐDژ"=&pZ0@vt\&/LZ(NHs'?6`#/Ǵd0qz#SJǧRށ1ZLbu^ңd[vwKa7pJ4PN &S#m>sLo ` !Nj` ;78F,&VpCix ]a OUV;` ;1)}u"j6n u][wbK%x=̱]h&62:>D(waB(4]|Z,~*S\ ƞBd/}~[ \X0lk$4Zd n'j@%6/(RUY>;W܇'F^= 4i+wH ,[-G<&k$ؠڃՍ^Q%d?x$aP@+޳jh_2Vt$oI^UzJI&L6)HYK&Gqd݂|Gr/w)oQU i5qb a*-Zqy%7~ #mj~"TQ}[#O`T<挬X+a^] $8N@?$nnLӓGJ < :5(*pT)"`W'z24RAiнlr.N;zV;̥ic4_x_JMJcob A}pUYMY@Qkdii5\TFǺÞ+Y"tؐjwkH#< ODhF*pY viPc}`/z'O,,UCqD}S4ps Ha{ǎB0hp;a_(W*̈L7> |eqJPι%W˖n3 RUihqAIiK>$JvhMD7428'*&.nE:~]/3+ujk0tР: )#>ރ 19NjV'>mjoBm~++\:~`rS^g-<הa@F8 R977KNgrϽwQ7Gx cCpú<̀$뵈hԦǪFEKvb'#h5ĹlρQҕGF.>SEuaRg[?pivǫny2Hڮ[4 VkI4.=`#Vo:g%ɒ'dௐң#O~xPDbzNnC!ԁ ٬} fh)C?,_/Ujz'5hBIu߲Q/@j~3Qd>gj\B--rq5vfv+ڬd/ Rv"c@֟(~DŽ:6>ɡ\C `)@ޟ51H"9H!Rie]nCd;VZM'BL^H5 >9`Sjsw_.9v]$N[Nq6NLC)0bJPIo~b5 [IEor\؍sR7|U[ǘ5Cm,m7Sw>6[j4kaPxyؽys:q|yJL(/EڄJApHta =jE"z/@F p O3]_|/a)ΊG9?|K՛ZFsN(݁AkՖ~doT|P"n@]TʩNLߞ:eR.~a4 c֋ǍR{ٺ Sh +U*i5:쵂 X_eue@J֤V>n Um0i1dD]xr_4}EIW(mEgl̜L9" ik;Y?W P궠U@"lXR8;Mf|r`^+>'po`. bP&2lQu!,tNH\{>\Lax䚱 R1)ٝ4 >odMD ^lYnD5Rđ&t9v3nm0}kƒG\-UԧF2Ka(byʱwޯ)TI<ZͣNw%2 >qE[C0hSch@iԾB}}%: Qo~k4Ia[ kk]"$GhBhWCOtI|ul'͘l6״:mcˇ5PvᗢSUYI;m Α!b!B5mBk&7$ uCMHJx3lf gȫojUug!ÝcN3 +iE!!|rt|f*>ag*[PqwO`bC M5=e\Ls8o"-d 'C Oq*X4 jD_o!IrLZ-bǬfxfFtB,+ 9_xRc5j6p07"{ZүwfЊ f<ǣ;58IB|ut[f7oE8O)'Ғ%D,1*)^%-Zr >@rO㻽Ā\20gA&b5:|äz_]ʩMꌍJ6qgֻf`etQ`ډjU=Q HKުY~d/ԑ5,!'#UuL6:Csir p!t)jXu*_ުbMq&^kc[/)X8syg(_~i;dsQ*YPUU\.cN<3'c931-C>ס9llpOh.&AH\Dn3)l.i~佛=/okcTׯPI(#,tPŖ]풩^4l l+CBL>"::{~C#nt$b=\cԚ[_ź`'P"zw -`Gn$}@mޖ}j庼#= # N_.緗:(42hK+_ܥ/^6hrt+ jb|GyviPjh'#Ns=RPq V6/Gia0jne| 3 (LdK)?:%Hej۠?M#xؕ;^DH[ gV L|HKk&1%ZC0gJؐ^`;dfbS,{E!>hO 'GdH9:+{5NJY\ZmPF\/]3np|<=/iU F/2 ?w}f?oP*KR:HC,t<|DN<@ZoY xG* -W"XJ`1tbF`R)+EIl yG1p{](zulYyx\<|NNK>틠h6ݼ "ti'S=2]IaiQ (>wj6)p4 w]T00,IcMR(ϜZ9^,'vtD~5/>w\l {V3#VsHPT<ޘ2є#@ d0 P.ct4SW;RY-.Sd|DbO2Yv_~y!eCGC:'ft }qbmogJـ iJ4w)JtI1H9)bd]Q L%ndҎ ;A/o{nNޒ`W- .`l%t/Њ€^ߑf@6أ#kJe&f~USWt" SDАcQzAI)ߝn6JL(xtb#PV qaOFCV(< y\ʓ0]bwh\r<}%h$ꥍ\bWr j4),;O]V}ׯsS*O$mwS_h6QJHdӑQ!"ӳN'!pGjXWoy#3STKzQ xxel]iP9gSq̧ P&&z=.MalhdrplenqgOa&y$R MI/8HڵaF/i|K_uKCn,5Z+;v`N\fÒF!aqqNGYVq1g٬JK9c G Wd/5'lXQ`3wӟc^jiņ&=?#kQ&+J†H,RT$5Y{. AI'"{vl c[nŅʣ`44V^Z5³>)By6ɷ_p{J[ >N0(iam\bmNUP7o7A}#o,Qз j;҅X~+%ub]. q*+jc-^GVWWZS,g3㠏Jz7nv`>8CNt2$ѯ; qu7;}8giCfA}^x`#WXz 2i9Tvp?ʘ(&Y Llc%561Sr?1%VNU#*i}'Qeѯ޶oIOwiH5iOEMwc$K̾]p@_Ðۂ ļR@ƭn[LD1LN6c ?0)&괜*cT~ R֜,LN\յ޾ &<7eq67t$,:[ȉnA;oVe:]ݳ'81*> stream xڴzeT\[5Akw %PCpw58^=oԠsٜgb@E^V;Pʁ -`moD+hma`c``#%;Z[ ;9l&9D;)@ hpdJ6@F_@ށheljHq356qS+-J}+C$ @h |[J@5"@LANY^hRTR **41eE?J@4Y?2"JJ"pٛ/mdKH5@a`IOLgh@gmgLgc>%S{9jG+Ïv:UϒM V?IrZ~#oapS_{ ?hLʕXZ9 >z>~9_ݿiWǝiY{;[9ڻ7yVZfVdd%DEh?ϊV;Vt.E' , `g`0r0>TPC=ܟ ~ΕFVFnhClej6c] LP5)̌-t[=M8w{}' O"8F6ǐlKXY8ePY~6)5pe>/.QG Y}K 6-M-\3BTRɦ.@CySu_v 2~_&?c`??g|h`n~~4Z_A"VֆV&V+ 0?Fא鬬>R6#k;? cb 1F_#V#Oo7bg>j~1F # Z>H ?XFz~1f7dU2 ?b!C?qDptA7dv[G_s"4 <Šv@USÏ?BdL]4> ҿOd Z2-;cyGQ{ ̒JD'K!I9N1x$c!&qs|>d^Vjo- wdpEFUe}J;($ԋ[c[ ʣB]L(IDZ?f,P]q:p';@Ѣ#{f0F%l~v!.U\&y^6{t {UYLш^Q+O -3خ-m.V s.猆V! # TXvXR[>ѪA/4"mTRn\߭0!) KI"yWFbJkqX.8Ⴚ4ôf籱 cw̠@.n ]IՕ0T);n{ BfDJfзoZWGi\.:UYqj{5%sI1ڊH~C!Focn[)4w뤨dl?U`iqBLˍ<:(kcQ5&i$IqTT9 QQ7Ñn6p 677.s6f&v̝훶Jf*56Hmi|p&?{ĩޗ9y nh,X1^!S-+yz |StOr5&koỠŌbJ! ~6)|zPAEV.Ә3ـbr9gԙmANChD&2ME?$8#ta^J<OFӝ)U]B$mƋ<3xUf 6q_ljb+b# u!!s7'rݖU3Q^('=Meњ茷_*,ʧv,lܤ4Bwzve{)Y03VquՊ&{iQ\LH#㳤p FeNn~׽-*}D#\Q'> M|p|PO) 2-Rcu,!s`wv* lU(xv #lȜHy]B9xƊ?j"NVdz[e^h~rΖD/;hwDyu5_EΪ R )uelRbnU+ٯ}'hN!q* KQמUyK/?!KcPڥhZQma1O`A,`+gCZ/|CQaũv,}+ݰ]V/@vv;KIK;t"~s}q<}و&dq_`o2rsljsKMXwƘ~w#i_'.W:X/ 蚣Zhqy NUhc:=7uWH桲BKa V1FP94ŷ)H @)3+Ї7,.l4-6 5Zp\#Y~)~$ch(kܞQ}Б"^á>@18N?1P.h17Ffd2 U>m{Aowq ҎG>(äI8 Z{1RL3mՂl3eRe[tΰA!Q Í K!,Fܜǧ\76_iTu-~ɒIB6{/3 d'.Z5O5e0vm*W J0EԱHtgW&z˥YH;SQقm9lW&WpЭ2IPK0V¨AAZFi^D b->s; 5qwMSmIK9i"npM86;$N"WH྅6mFr+;qy9,U.~UĔ<]W`ۘ;y s'r.%۱:QJ:c6) iɒHu$luZCdD4FEdU4'Y,K{GtC1F xy߅ 8$KgFbݫ =KJf.,<),7ALRӼ3{$TV"j#ɚ0EDv|J}pYeuVu`fƊ)/\ l2 .V X%a o.֝pHmz =VR*Xc  F3<>O %S9]p?~Nz@W{Dl5 O{Q11N|?S.4rVۀx*/n)ݺȍ̇Dh`Nئ:]N<$Ru^C{q&wn?`Ϙ^R"'$u#,mH/?7GdTZ^[aAM o_SY8HCSzM c* R\u/g٧;ŲKKUUXX_sF.@%Y(ދ|GeoKaSl_5A(JFl٦VmVGB۽%j7(0ήx ߆T H$Nw[3?~v.] \>n{U\"6h>;H!9C[:UM??Rࡺ?.U~Zf&;D{ ůS7ow fԗz ,;aFD7/".NZ[%(LgD +Nc]CrxI";a9 2 cBR|t,R? SY}tE׃}pp#]&x8v`>F+\pWW_DŽ#c3V®z(D(nf:$+\Zz_=~x^Ur#e2͐^׋ #8SL}bS?b|mtiSCt%f&ɚ0NCkFrQZQ)ƼiJg $4Nu u ܬņhbWpTnX~Tph@]b;tD~ 6zݞЅީ̃um7]vLݦn\qbઇE7;L5;lzQMfwJq(dddTZ2bv crVnvWt˹sXsˍk;^G`߬ 0_|A8tFs[B7ϵ^rlF=K ~+OHU7on[X"Älpµrs(/}_:T{gVb=q.޿Rĉ> n_ >a ۈT4Uڢ@6maUgTWXn07t6hBXdYG+ּ i.VeAF>nCc[0tm%4&bhD|?~tQ+KDws[G=}+]Vޟ{@q?P~v<Knה*4 liصXCMp9%1"xYtˋH^{tgt|]0YH5D;Z/x"k6Ov76wDZ] $aG sėmN4BY5nH4r|gKݕTZYboOUFh_?bC>Ash¬Q9׸[81(Tja!r@3x`)ՓDXS-Uml*&4Z[OVF>ձpʮΕ"EϚ&ފ_}$!ՃZ[SOO3oB_G`:8KMʤbQج+G#Co#?(hvT޻bړxZH7vR]ߛ!(wٰaT\o\K:nLAkb1O>K-ʌwrUŦqF+EAr{YSFnpc({& m9Cd}p%òI/ED=[SHKXnh㓝43Ϊ43g$,쒙wfRET~Uk( 6) N2Wgq=Cf6>$=>\W}P) )(n\cUZۗxs\e\oDn=F%?[sA\rh).؅t;|W#~2jZQ޴JEUN3JB&]P ̎FNqzM+YMU Ɏ Goo%;##0@) E>GU>G8֡s@DjT:ݏy$tz.:R(*i/NjS#78ZQy=UhQ ;$2`+~+Dr'['6Uw L6-ھƈYH:fݑY.UY]1 6q:UJh7F2Qo1#yaeM^֒[t8GT|GR@%Z;q_6BYn^_L!xǫXDr鞄lI CD>tn75 %cX!/^OF͙r K1իe۳ݟ2`H;&[#1q&3'eV>`o⾚CybQhi!KӈYoyWNY_ttuhEMl7EYqs2p f &ermT1ԔvCׁf'5kh%g'.09O |+FwZFܽڱw"rB`WH*~eY|)]_؋~ͷc5A?8o5-o CH2m)*`(Fk_3Ƴhl p*C ۯ)]%!XUxvl/Ixp|roz)ql43G-e$)ܥ_^ zWD D(aviT4^p͇ѺM}4.9ʠ=j8-R@T s;&kLWwfTL}]VsZTY/+4$ޯjHA=J @KSSvD3g{Y U4ތܻ{Ʈ$Bu{d |v<`_Ot[{ zod(gy]Z-` U %f6ܵj0OhU}۸nWx3$)FqBo1IW[v+b`GϏSB ~vA4Ebf#wK]! k(Ɍ+zz@4˂Z#t)KD<G)V;% ĥ7gg4gr(0[Y<>^i: u5CFH:W<@ bg,mF6k?hc|H Bn&*% 涯Ql5>AU.2]2>BLBa '[p>-P~$Akj?ڐ]TXhpBqDTyKAmT!(LTǭ?qpxѺϟw"G"êRtC|,s@1Pd%{#aB)_=D,, {U4q`G`v#e>^Wٴ(T+o:Q" ͐^n$vX=)‹ L D.vCP1o{T@e@w(-)=ΐec +.# &!w&qTr,} /o?,~ |i@P&sAXLA8d 9]wL'bZn+yQ[=|hk}-e$:Tiˆ_r Xvv2 ~RxP8RCRK9a_贌6W/!Z/ۖ᠄w4 2 mɾ®ȡ/?QnT,>IX/G#"T7}%@85RV2Zl~S%["odS& #9-1qPi-I<ޅr8}0?fmD1RRi,YUrh@L9T2lŪ=-SALh*vr+O Nv ~8얤4/DQ2%:Q9E?y/mNvmAV{T^@ C(r at/gݍt)3PpRtw#0*+jRsIAʲ^|6G|ODd8ȯMG[AD.ϕ[/M q{GfuQ^=ƪwx T" weQϙjmSڰcF}!NV<G'7`+ͩ#_}LjRޱZ te9~+9%e?,FN"c G$YDb :q {`3'8 OSG9ҝ1 NXܚC!ȨyQv%w*~9lŕIy]HcZjH;$ɘ+xKS=g8pG5LM~$g=R{!㎇1 x°4ao m?{_@ߵ/`FYLP3P>#ҾE'rI'rUu)k EG\M _ɰO\(|*i6Zê![PB;׷ݘ>7yR5 <$Heޣj;ׯVYBJlH*x vuT? .wϸ!N_ $CZ)su: gqwl_ěT a}5p2pdTwar8m`#hIΤӂZ\1'NӴ^ڦhʓ1d c}r5%!!OٶJ)lxYGt{c!m]\ *)=Dtt}cJG`* ѤX<'JdTw}&T`9>̚e~b+ݠ3>R@>cL_15aڒEaTl`DbW#=;, l} 骧nZrߒhv5NM~(Ugw{hu  k<:ldD!?aM:2KDB$U otl]ev`%Yݹ( DjJ|/\|Vfn@m)ybO*Bsll1~(YzR2/>-J;:y@ ǐpPL:l>_/ĺq!|*򜪒^3 FkKCiO}"dVީn!I'u esQ4vWͺM+ ;o*F1Mʉ,5,zV{S$fYhV1/}Rlp-c"Z9){.,q >b^);xF(] I r}MpiZcۋJVۇ0N_XkF'c`=cO}5v/)F-h{zݤ$)qt,01Gtps(]̷mO#m0^ȏfFa`ԭ?q@dD-± Ji%򬫤yK"D|J=qa6`xT 8rJBA)~mC( S5{N4@Zh/b_ n B~^=7hXMcbbUxU|ӬkQWJ5|];<L"=Y>k8٪~/Vc\WePiQ/fj6H ȻeL-9lT" } e'({  tsLHL,zn~%Q &*xpP] ȐbG˼BhY]mJZuqw$O馛y蠣B_‰Q~Œ /E~\M|F2Zt.^}o@n2ώqpfƟ.n;DN$@~du-=nq*  )+[4fzhبbvD[MeG"%ߍ'hT+6_>ypx>gcaS;_㍖N廇,um aǒN(,qj @|Mr0 ?ۡs#_Ny3ʌ0=Q&&G$d^u<8Hn9QJ/꼘CS6"0plRU/75 ,kfl &\q֣QwGWBn"s ^pUg*LV4G&Rg  j܅_&^XPqr+K}DY:U0ѭ&By3vd+l*1/V\E_)UDڕ^ZYA{ۈG |qhN7g@#_<,r/At@16#vzۿǶy9LF 3Zd6G+ѥL%w؂k{no$M,"s*94lKZHذ`_1@_7 Ї5C`A"{IHJ-f4RZ|xw2 L֗yBX dnI]> ^~m  # 2 ˞T#;7=:vڳ Rlwƻg*`ɒ9!O`grusA?!#E( 禲3/&]0Hn~ j;6]fkZE֯XߞdJCyYdC#E=6g!*co%X*u@RuZ1HM5 v}p:Ht:.A`.熹t- spP.Jg4'uŘ}S!O%9+zY-+s[ enT,m1#8p6w.cgXi]-{rb'X/&EţxhP5nN%jlX b5Tݫ\hPְ|r:bϤVgbI D?EGM*sqꕓݸqGP9u7sG%BHB,ZfKx,͓<$5{fCli- bֈׁs@UBA`~T^p! Ɠ pCu¬-'Vyd(G0MMW8{$AgkUFGK-2BGM`*nX&;V]4mk桸7}sۗ8xe26gAJua5LM\k)< l9d49J{PH,ݒ, ulC5*a9C-+՛2Sʜ,(&_姿|d^∤m۩6S%<NOu.ާtT2x)dWeE LՀ z݊ԽAH~;8#bvFW|~>?c%涆 qJ$pDc`$$ '(9ߣiHqiug ?z$ s}PJm);m?f=+_n'< &׋@SZF mcMݯNPjzSDqnWD?L.I3!0sNl$"_!~Jo Jx|EaT2D56Y)pYA i*<ڟZf{*Bog?~~Y:ѸF8c|:F>HrpMhV|y6@XJ9 n"10z>e"4S܀E1=U0\l;۶mc6wٶmۘld4o׿XDZֹ( YC`Gn-HIKwriԫW O/mZmQrRXz >'\[WHL5ꁪk1P}G)OQ=4y*Ӗ% c1Gsc2Q\(m0vf{9$[Q7nd[Gs¹nENB4Q[s)&'O DoA#~?m[H{yWw8phq{BѠ~Ze6MCT$G7^^FEh [V~D-K~4tS6t,P*=fzQu?:@ l7xdEMV^ 4KQ_!oԁbj7axv!F*=8S085HUEp:kEr{zK' 84lO1^i kDYUΡPaarb^ʻt xt$KhU5tּ1)KƗY^7@E?z]OUۉ|R݄wn/qabq.$ x 6P  ouUQK900^:.'g%t ڮ5#5,zw {eBU/ |.l,jF§QӯV0oaW(hZqՖ7A4ec-o̟gW \ Aڻ\¶ uR.]{P0h7ʺ<ׁajG*ptyw\A Kiaҁ=;of&\YBd D.&kF޼חOըW#k$aSR\jlvuo dd `yL8 ͵4Voμj&mcZrZó]˿+kzsk0$b7n(XWh~a(ގ{?ײmάHNG9ެr{opŁX7GTfr 8g=7JƆTC [JƷ@dVIް)q xP뺜!*y28d;Aj&= ?`ЪJ%l>*!='g`1 d}$m_gnV/ ~砏6[+\bB0EN`um:G/ ML=̚\p؝ԑ_>ۂu#ZMq˭uכ6(-` tFxGMҊѧ|$dz'艏G{ %-!L]jƣ$ChۈrHkL/ZV{gcSSK JR^>։LJU|Qqx7 'W {;^qկ%r9sdr :tw|*!ˊ[Ӯ2iZ8Apj`DUgR.Px@e”Em;[0z kskr-t+\& ́Y'gSDv4F\1X2LXՊ$A)U'<t%~~ذ~H"/`7+7?lij5m`:npa_r"J0OЏJ(9maSKQb~V}OZ^~I{Sl4 4Bl |*kG2(i?\Bi]`o/9%H2%Oxh _" }xrg 9FtֹJk ]+&pz9>4S8f.ԕۇ!gݮ j&swkpxxYUjc+\1r`?S{GazNu=uk ssbR\Y1LQB2M(QL̳K#:׭xq zIQƞWF쪄$V3F5 gwJ8Pod)ӯpρ[*lm7- {G^A>|G}cTV{}-%Ji|5x,_%XmK 7*?iq95(<>$K'hFENE,Edq8sZB\L*T~$;2r1U5U 2fqт[1cPi5о~ (!#\1. s<}# m+k͟mh AI+oi|aS?cG\E..aW BMwz۝NEni !o:p_ri$VAY;KzpŽ#!9Z܄A_BaEnnЎ>~5|R'VT:5i ! Jp~1@:Em5[CYhW?)駋Wo5wj贰z#Ѭ`.?Gḑ&\3A\X8ZZ*/ zV {% nW2c?{|b[[x;t(r%8#vZŔMe3]aR9ѽw_ @P|q5( "u+5Ad&Kx!FAN,nM(EC2EYHq0fdA&ıoFG3pHBq Gg0WJS#d?AˑOמTu@[q1.4oqLgKJ%!\*76 1$'V!۹|qZ*cf^ݨ]XG'7hab4 $49l_C9+֤݉ء $p΂gbKS[:|8v9y[Adܢ@l*ȍu7[ر]qԗ%kyj0ƿ%=^n%>FJ= h=,V͘N}:LҚv#~@T_GbuaiJ]3O6pOD+'"jõ WoJyO)|Hs] ^Vjc†;!)MfɌFH[rW-dWsa_ pf$Jc$b9nA+u.NS8(yN)!H~r1Gads<()b^S&mZ~t2>ӏ5iy)k5c~~審-~tΝ %âcmkwӿ#:U4~/A sB2Ȇy'Bln=tZZ-7LcJ6.RWNg/k:u+G>tfg9T` +KՊuSW2 A=4M 0M+[Y.X5[f2C:iWxZDi^}!bbgUTo7ೲ/2*ys|&i|Z1f*qh`.s_5B L߸tǹe%B4|5ՄπY !/yp'C/ЄêF*x?ov 4JSqr~> 6 ][}^q>.zgX,\!T`ύf) 5wǹpY_`(4f]ht0fQmD2I~L58(_ӖIlJ $Ѳ,!rc Ve)7|4lm?^|r$/$ݤkmhPYR y*˗k<S?M"֧|`_sp 03˯fZ?mSYi_@1 9V+?CNiF&(Mr %ppudRRcx;(0h!Ӏ3b=VZHEpr$ &/ۢ':{/w?#.jW?8.\R?XLuxyeb?!t7)Q5G\ VleKwESP܃j>ͫm=#<U-6B *MyruX/19'IZzR+UA_al&DL%x$z(f!OѠNጿ#\gO*,SSZX-\f{jMZ-KY>LQiS2k* =!\>M8?k1j @ x~c(DBxVb!Nw߰~hW W,w^)4IMN&%m+65:Ƿs.dɧ_M.kQ~E/3ݫ$ ,axz4n`,{گ\s=Z[rT,͞ĖqyTv^;>7s@ֿJ՛ҋFAۮ e1J;w- jʜk0 F< *` ,Txd}KҎ4H ]; d1qިUNO^:bm+#NUwrO53Q `m86tsd~A!lqov,E"S$^ҫ]8qg7T&In{0|Ai2q0{PA(t)C64Ysd˹l-X1Ԩl;T2GcCpF>maw$ l?u]d+0+M\+(0}g@Zw zJ{,DgCK*i'4h\4M82P`YٝͺևH)>QgD!Ԅ0]b0ꁷe8EIOu0gEKMԴnno1>4iXU`{VT}K1y?0,Q5~MO  endstream endobj 506 0 obj << /Length1 2192 /Length2 3884 /Length3 0 /Length 5112 /Filter /FlateDecode >> stream xڵUy=]"r(&׼a^A WeU$U$Ö?h/uP}({YUh?&mbzd`_?h:xGCPP/u^}:f@ZԍwDT0bݼv!E{`7ݱ])fKZe^s>6:5 N9OL󅛉$Ƽ8v= ΗoQlHawBbOB0QfsG5'%5c p:,X3V/:+mתvnٷ iamfahclqt337֒^Rյ ңiN&f+2~BVyՙP}æ1}S$?泃[ׂFJYDD>:F4 |9s>nvn|o-Z(&+]X+rR\R!>YǞN un?;Pڳ4 @! [HWh;0N,ݿo쫸r'$x_,T#OV {lժN [ z<()mz##pvR]񩶽 "9W${+ϵ{&~=蓓aye-hZ~40wM!p&}ݕ;\̓"1-C=֒NͿ1=zPVC}զ%\珆bhs>wk^у ~Υ?x=oM3Yס}DhtT_<+Jc>2mmahTv%y~o{Bs.sYÇju+'<2B\]h?h#]b(TOk:es3!&TeKwܵj IVY̮xV){{XDƁ'sH_J1a]Aա|t'NiFW]]O|5.3rlĄh!ÿS&O)KHtB#iƨgl']ժq8ip~iآdIGb+SE,LRB3y:"S=ۄ'LIY3OgX[-ԗGM/3o}^vTAbuH)*!|c<^uphE Dc^߾{;:m,ƃeԠJۅ`Ym.1rRת;3&qcV.7Rw#5,yžNl_& ͧ.L{&-|MCR}0;zLm]e_U*ޟıăC6{q/\x85>=_0᯿WGRS7SGy|tNvҋ[zU鈽)-c}4v[rP|}jYUHWi7ܬwO pF s|A4H! 3>BcovsP%#6q4a\3'l|\ʼnu'>o#O}Şj@gyG}Vp#=]fACH5E 4ECfbSUZ~Ndy Z0: 2rocXrӋ5.Ϟ(.Ϳh-4(]qj2#XrG樂S7{Y6Oӥ!l8ĘB$1 /A3fח22VGP\b|~yͅP~|4Bm_ˮCm/0)=ߓ_Ԃcwy=k}Zl*y7'<9gE I'ꅭs Z@_dݓvIލkvj) i s"-Fu)j2vgZ7Ǵ캷E8Y',x2/U^ 7K?\wvszzlHry7W'QymB >}!aֽ='J;YWCq:"mrh!DTcA43pW<1~\m5=m@f2}>&OCB7+fLdb(hi kD/ueݞ(H82`t8,I<!)]9!0-OȘkUή{wfOUSz.l]I0mBZuBW]@;rfvw{|&XRFeP 9u>Ip5-T? )j{zFSs'zYvLz]junc- (pd>\?pqIwp Ayj"?f!4^^a+4>.ٱ^HWyCƸFSji QFˬ)gDƲ4vB>d޶ S3XUk3k3$.XŶNU6Î$[M ^V~%2sʾ9}nh(\L) XLԵI4rړԵC9~֐ \^D\=OjZg{5=L&OފafB2ƫ#eAzbAQRNż</_)qTaI~tC-FSzZ7.=sTNţx9Qю~Y<5Ӥ@^qS`- R^Ct[?}kU\1jFsΜ׵7x?]6m Gk܇VƵn4Inkg9]d,m곯36,y#nrUMg\ė%~Kz!Y˳X/_/lsO^/n$W.wІbz@i{ \#ǡwX?F۫;oXIq9ilh.FZydJJcO-ݣ}MTzOFىՁ6=wf6%&|(~d>ZpAGMԗo H˴n_vOKDnp]aͬ{|bs 7O:mԥ%5zTGA·;Zרb qbbs/$N}=kĹ7°flH}Xc?~'h+=~7C\t]BtkF#4aq1!ae];y-ʴT!^2}ZI7 endstream endobj 508 0 obj << /Length1 2322 /Length2 10190 /Length3 0 /Length 11588 /Filter /FlateDecode >> stream xڵvuXֶH =t ) ! % 44H#J=GϹk{^kZ]M l@AΊȦ qX88ٹ@tzz)g *m p`K3n"NCp=`PZh{99L:ŕCm`f!7CoIv=`U0,k hhj4tԵၵaEJK[G9@ZBU[}~CmT $spvA(N0g/0vȡsr+H\Gfv`'ʖ!ys>%q9- .`?;k0b:|V'B|Y›>8迣+@ap&RO;0q> 9Ta`3sK Qp3ok ;b_vzL0g \d< u;W+PPG0mx[Ï&A_:xZC..o^bߎ=Mi5~@` ; `lw// pCap|o!q8 ^PF@1 bo+- |>ᄯe Y] 0(_Rx(xT}y/xۿ jvAx^_8C-,A<4Ͽx$ .Vvy'w_pN`g;/ ڝXi@,\Z'/= x9Cg.\a`=;/8y''\$s-) aq@}V_`+YP˴w2e( ɈibE`&)%!g 2l<]v,v]żRɬJǎ_1\c'4e-oP<9!vD.b Fw cV;e*`@),*=B8a_oW>$ݚ$P/J*-!ocO65RN93=Veܽw鳬5rhDnc(jWKzbx.]; fbYbE ʔDܛX-X50>mrt?!GězQJl ͨ Wؼ}?cxs:fd?]QeaEV-L-'8ř04@Fp-9԰Y@SX>C `[-AWtiOu|;PBxTrヵV+~5ډ0Em7c3KQL,)]ntQ4 Q%C2 334}!vgƪ ~M1ߢ424smz@Ev Y.g(bC.UNEdFײ[X Cɬǫ1OFƏNB;Ʉ,NtG1]%:~6.0^_r#xQϐb=;}TLv(\T~TzD_<ddpȉHɳ~na,0 Vd3&vBdu17Gr-#0,u[xÄ'qDT%%J]`rdu$6qЌ_s}rJM0 a5+'k:B\wU* J066ԡ>NR[ܒPZ9ʄa{ڄ p+_oia\=v>ս=`"Ҥ|3}[z>烔Q Wz[uwi⦊Rf ~E::k1BiѫǢs(CaLЩcU/ř3? <6h}Pom}N^[)joWE A|P"9"`J#nm˟lK-MٽaN'Vd:zEf9٢7ĉNjSg0nvxnemHjd{#giLmKkB.絸儸?sjJ2ͪ "Lۆ+\A $(K_bg_ V?~; !]U00Kq5n,YjrJP>&<#]+o#TzdHA&0)rͩ8YB$Q77%9T;)ƼCDbjb0*mW+V;*rOc(hFn1|v)ʱ'HI)W,na%7mFHJn+cg\JSCm?ANIAw`w?ngrq W +eHLu"թWft@bB?8X-EE|(yk,_aD-J?۪[n>ʴ1'? yq ]j4섟\(rԶ8 {RC fFS+⻚lozKCnIdY hUA EaJ9FoH3xgDID=]gR4ya?QU-mvG O9sJ+8㩘'E_̧lZZK/ڐϻǟ"y' Dgx4RֱƼg5'7; 22" Qkar`[4XJʭVdԎ4Vsܝ 2ꍧr-'.ԷC^$3!XiV *U,ΈM 86'8&$xΊ im#;׺kJ*ҹ7Ootާ?HM s-}:m_+}>Kib :Ծ^txOR V/pi{GoG ǦiJ7kGo6EuBZ}Vc_ ąպI0!}i>g 0ĤMD~zR0XE[>NLm:LoB+[j31@~6'?bkE)5/chT L ؓ1eEr7^w3fj8YRr`"~![rBW`<5eq P਼a|=ԃN-󺮀K|\Al'fk3X_=b.TZAYr'pv]Jy_xlSP͘AN劬֦~*ղዩ::N$~*ӹN+_XcBVTO"g;Wtwd 3F;phBi"_[%??N~hu97I"9=0˵ssӔ\BxMqsw} Dx7mr'3!m⃴"qq'SIL+-Juyvs&  һB"Z۵cy#)Yey|k'⯏pp]@uB|L.H@+w}Qپ/>P$o>N`RȕD*CW<뵀 Om|~uTFM4V kNR.tIN7ؕ7M3M9r-3t{t.)OgK0'J,>H ՂC?iuW36;̹;&mɤy޵2othOzDIr ]TZ'"NitF=-JG-KDq͜az˩eە:t!Wt _|y[>*,+i _,C*W$5mH)Q\WWX>e(XS#rr9O8qca˄@J~He,f0uUSB'W{ tk!pm+H -N}D)17~8(6)J1ia&[0gDŝo AJYl)4 G~[? ]F'}xΫNF|?vpSSl`O'|ϴHZڂhpԯuT1%26L֌x:nVY<rXWC'm_G0²Fno v<[޽v -+8A`찐|w5 6&| ,z/ieTnS92k)~l&$wwQVp9. U±[} }U~{Cu;t)Jmn5ղl Ni˨x)V֧"bwwκSHcԳ(wx٦&tgxn[%NiL#LY6AVVYYr(7G=$ !j) @.8B.%a_U!H_fCh{=(j9i>9jzF@15_Y. h{dM_٥L׬QpaNg)4MA!'Wexh*kt7y+U5jgmUaICKFVfpKXoԕB@WR`)b9z>P ;HiW1unGY#^pY|?#Y$NS$5sŬ+ϸfB:Տ+,@·pȘWy@h) d~#4EqS{}Tkf!V:byA['c/f0-7w\c+FiE_qHR50y L\Aʖ2T(ڙk̶,~J^RBP 85Rc LgtW!A%>ZfV_];1vXOm kZfda)S$Ł)ӨurݚdnrQq,~!/l>:Gs5d1ߖp% p(] īxqW} F'qy(تi~o%4W2)45KHc55Kq a+1~v\BC5|x7E1zV&gf,kL;u5cӛ'*d M3o-PlS5hP-$ńqLJ{H$IR'ꀍdSu_-ҏ]`)|9ѠUlcy9tNqTUwUܕnՏ Co+Sk1H:)viN {ao}8J5]8Í!k6$t;Ч*e ЋuЋg[ ی|eD^sHE$g@ SDKFc۪bMӭllk{\]v5RK W.zb }F-9ԇCk5̖6-D#H:o2^3z楨':2/HY4"$u.:S-K0o&b۔]v4zm2 fϭRqJfTȋE $ tOӢ~p!Ǩq_G] *(i!t%N/жN6n0w313꽞V_'Syʐ4t [g|K˘'_dY!t A o-m]]z4K&!w3PeK_\1!TtF$m11S`nhq_tXK()cHo\h /N&'PP#5gzN4w&d+) ݽHY;XW"Zd&;BVآw* %K|㵷m~M:GcuBV5XKxLh90 A*ɬ֡͠ݰi{4#⦯#jX&2ZBfw\U1ɒΫ[oݠtb#sڷIhHwA/_[[eŒ[̟? J-Ԩ bD0bڼ̆7plIxoTJ?RV'CFj;fO&ΓF՜ҀSbev&f%bv!"+U"|>}_sK5)hq|^u(j'bة&O-%N?'?60ѓWbcUa>;A4f,fu2tfޝչ\viC ^M+)N4`!#64bK0wu{ljCmIo%{* QE#^[e50r_h)ҍ5KGmJ9Rp +1Y‘O` `Ε„p/N%o#Wo(>e;#˅&rM~Vw bc"nՉtTX~nǦlNtܢ'"?FO? x0ߎ|Hʈe3j { &ԇ jTɘxG=m; =IvqVbdA~BF{ z(߈[iUoP\{6cOjg[ _߰g+"l\I\RHe{9[l$~KO)+r_5|?\A,Q6<(j {n9Z6'& ~>E$p1"_EZ8y.]L p_ G>NP8(Q3&)icEDbK˥.&r[u͑Ԕd yv˷iDrU:]ONsʪn_b[k;b&9̸p:QoJl_B3: .{izrWfՑ1HjAo 3;?l]-4NPqR-jca+>~Yi7F!_3k7p2曬/"jvl!=yJvY Mf0CN?X(U?W YȎӲ}{pЮ*_~8C 4XN`}SaK-HjL裢xWߍK$-VC3HS$4Z(˪]M#<'eXm_`ɹUlb:sO/`ǧ`{:Ώsˆ{ːtڈx)n.:{7ETUܘBwPg(d߶ ?@U9:$qXɹz{F0B?fbTHz B\'I_%<0`&XP{YbO 2f^h j кfU!-5Axzle%aUGbս1Fcυ]'#ӝmGͥ?f'%*+!74cDƭ>A -]T+L*hk.us Y{y_}E4 /}Jq+Kam֝ns D3B0wG jό&Htjݒ+XJG: cR_}Ww u>됲>gB`swWxܖ_)5Dt/U|W"yY^CK(6@}3/SD`4`R-B̍Y?gg4QCԌ+1+JQrʷA/P0<dIcorܐUo?i3땖ފ5zӸ{Ԏ FWi~M̳/#4|y{)o1M˧ q,@ha]졸GRuJk ^8`W^0֘TNK2KܫKt gi%aF{Rf<} X$ d f|Q]A6 P8 Y&^},FhQx̤$+~̬']'tQ2e0.swi5 |Ԓ.||盌KeZ kYswG׶ZO1Gs*űɸ,mIQ_Hn?ҧ1^S$~EwL".3`y,܅5jW!3nr q^.^Mp endstream endobj 510 0 obj << /Length1 1764 /Length2 3421 /Length3 0 /Length 4533 /Filter /FlateDecode >> stream xڵUw<3}dΝ"YssܝfveD0II)"M!"(YJ~wTÃ|OQEK-(d:BCs`kgfZ1$FG3Ih@jjMi A pe. 4J1) Aq,؁ 4* "H3}t( 2 R!4ޗĮ>X1~ @`O @B|@_4 Pp t\]̝]KgWGU JbrTLQXQ WQP=JdۙLP8 it{oؔ dРR>Pe0{ <РT:>/Qh~II:1L2 ht]dA􇨄 ?` vOҏtEkmm4h2JdL:Ǻ?)Fcϰ;DgPyA̤ͯPtApFOg30wAB#Q v`z6@K[025'cM)h:͞A[~dJ9d,}X&J&0A+J _d_8{ln FPD 8с 1Z0%`⡭w"(7_ZPAj@ˤ m,B&XS2TYL'' [!ZŞBG~`H``|P Ou.Gĕh$HЫD`ko!H?2HHv.a+-\s2%RG@h&5TPpGWmخuK_P ?z$:F2A@N ٫.fכn0h? }#@#фeKS0M@Qm^3:̏i}{f Xo7cxx&ryag9ƧیܭӸz/vKK EߎR*s4"#\x|+ڳ_Nv&4\czTTQݕUV' N7.%#Dg3wzTqKF#" X[KMB?0⏂m<[F8RLL] 3P=Xh?mV%ജJTphiVbX&y ~ũXeޘ|JUjO"u'_ ܭI? *=_|2d0h31& U7S^CIų#3})r_fC_C'LĨ 0JټjuphC@rJ}F&d+uYJ m7-5EאlY/'Yp +/jXYOAYtyܦ˛-atL#I#24Y`fFmZܲ,NpW[Wsĸ+;z \T/>*ѪAr$A9ex kejfNDe<iz馴zLê*RqS9XEjKUBDc9U wU`b ZQ!ϋZz̅Vryv/6MU @+>/x"I;ysIG^yѷOupqNzrufZά|?UCNEֆh%ВqJ~/qJLz&]Mji" ֢-̖mn>('3>UÝbZ d#fs"+.}H m_z['.unb9ɊP8/{}7Kg{9/~{VMXLDQ+"/d/}w(-*l9x-R{CFe-^^nycC&,G}gVf1~nhԙTg|+~ۮW?8{ݞ{OaL-6G;8|3Os\ޣHB}7i*yʙc!gC|ݿ裴Ze"7U"ĭb+缗mAΦi\Qӳw@ܓYzMx&x@Tz|Ò[kM&'Q_/^ r)P"?UŷO^W >1A۴іd;UeQNQ"s4rlI'y9{Id"x2^y0ض9o^COmڱzD{|kT8"qOҴ\fBnxa}ˤM-?;߯uҟoY7o\as7I5cC*ܱ)A+]D-GteH2Bo;:,-D՛a,XGkJ;WG``DH;\f'#.Kχn };!TCWGs S=yp^y',XGͽBţ\d#^yJ8 ^7F\\hXz(&?(g^0>iv(Q~r"VŃ+>q3~\:I'XUꪽE6ۤV rxGQ׎#ޚ 5Utu>~|\ܞC*1SrZ1ĆEj{=Eed,F%>m }.ؑNb+ /IZ3&K^z0ףvzxA.,rZ^,țjr36Ы<;{KZzғ=˵CC8/{ UdPEz\ۈ\Z}qUby!ڞ⛶!GE Ew=0$q}EK(]WqU(3]03ܬ*a^DH?⓼w c'B5՚ N*bS@cq%aNWrxm:X٘,ڛޡO@~wҰo-۪cSu>1q0} 햀]#ScgّO7f~1:qMRZ.nDڶ戩K\f(cC5:$8&gƱEYoO~yrlٚC 6n|ufHv A6mwD).BٙI!;Vk (Nǝ$P"5-Z8`0% xT[VZDKysI+MU ݜTПr 6Y~ĺ5}srdW{dVN-?Ks|dگhk"EO?:Y޷EKPi! S?r3˰1A+k53|RVSUW*y~x.~lLxbyVEm=J9z`q lUö['-O,E endstream endobj 512 0 obj << /Length1 1968 /Length2 6202 /Length3 0 /Length 7415 /Filter /FlateDecode >> stream xڵUw<ԏ'[{9=q˹ㆽ2"$)N*&Ȏ2 N}?|~ߟ=n<_~:ki# C{ (XZF053|qP$KIGB1XZVFZHHhW8_{1DZ0xfp64D?%b j8\t/$IoiCc fҀ9: Dh "7` wlmCk ;K1iB`|@.6v> llO>m(Iܖ?C0=N84&FJo }>dBzq!|8@/_Iss"  @P$ñ 8*J #I?mQ^h*(P J-CY Ly< iGpH>鱒 28B 7R@#eYd ۿdePd"I8K K[!dGЅ? !;A!$ gE$DPU'WZOlàB?1N r_@9[G.d+ ׯ3s >q:!64Jp!Z9#:.v{EMTGݼ(ς<˨ҚFEqkK昍f=0lO%^_|rp=v%j s NBh@&1QpNtr Ö8ҠWTr7Yz. yzLQT<]OK^)G O!^~cӓzp*rӽɿ܃woePqmڧki)bv1|7>,qJ3P.M.hia$w[iݥu]K= G܃)*f 4(O jğ:U]N9w?W:wHDDGk[jzX\N 'M6hIyO?FJqe!(ZlI$ ].tE4^}g-ǹkoRAu4+|PhK#2%cA:XJEpx]X{sw[ i:E|FL,W-K5fc[V o]-7n8KdחEf ۓ?jC7-xoRE^]t 2-m&:yk_I~lכvfN}[nZes[7+Zہ?qa~R^-=iƳ9)>jnD+7 j"3! K=\85.-%*KZҼ/Fr|&b0 7T$/iT[R1=sۄ6at9DR(w:KFXۥDL;ô٦7ka}_ f0z@gI,em؃'{ykwI4b@D/h=z V>'83vfd^śfǥ##0m.Sŀ\A uW{#m03"isZ<(h@7|'7 ͌yRAs"Me{}WmHL?SbT,Ȕy],|MjQF{ivQz]?鷂(d1Kך)F..sx%01 Lr?o)\}?=e\XVGR+Q){ai%9(tɂ:tCr"> 7Էrx!F[q{27(]\P%R2mo˺aǑGF\W#4<rس1cs ^x:-r`èA*ŮEc8vÑ~Dt9o?đm>Z^/b2:}eYپU hsYՔ0f{CLj9pG6sɳω'cVoE X`$E$4w9:/[u_)K&uzviZ8#~^.7YOU-CBDh@Ma?@d<ػO /1v~kpߦ4(j(TQޖg*?*Ґ-$ssU+%z]E"4ʑ"5 wXS}oL=yJ5/#Ðw)D}Bslaz.$ӻIe`Dn|ձ ̠xxL_GhZT=qM ՎK&U>mG{"`8NJJ2C!>;4OkA_FB7/CYjv[ՒnI+%)2M_~th'P'צ[`9&Մuq66YɻY= Ľf"ɑJoo7փ\%XQ.y KtDi= f;ϘHm gz=-_㽺B/:KX$rn\|wI-NUNyuBNtn#Lz+MXI+yC/ذ'PPVtgZ Mo G^/-*\tm~~E⼘d^^K5xVmU^֠ݙ"\ԤjYJDQ7›^>82& ,JڛK[}ڦޛ/?- }~N57f943Dr.%>lK}}4xcU)Ds}RI]JI<6 HG^Ry}jܟG:H]AhI1?jH>l2򩒡}HK݆{i~ab_^~=*[Fx'`V52*So&mDCO,nw&kZǚcbnrd5I+g"'w(Qu]a5v>dHDX7_5N62 a@l[KLm'VaQ!rЭg ch |$c2RʪV{ eui&W9M;(p^(Wkqn'gWoIR9?IbcN+:KyG%|oU6G dXݽQ>|vj撜J7|1I3 )UNð"# 77%5A@qw%Z=1%.Vj3]piIg㉡z'}֕"f 3N tξ~޹KV" v{+Feq-e*TZR[|ɓW%ḩc)=E(l :t%Ut̖\NЦ\槳fQw;5DO) ʇ5Ԗ ^r ~2pHcS@$zA 3Y1~sMg!I=}#'u6fxd x*V%K'MmB11@;y{?R{+H>շX۫7.dI WpM-::nfy[7ZܢCɶ0ܲvI.1 Wy/7NZXM{ J59~vl#SchIzGP:j++S PA1gI,aߗ^x榔 S<%$lvߑEOq+6Q3Dd~̤x*Q LƋVpjOU¬A/]8N2Ӕm~{KĮTݍJ/JkwN~ XLT_,IXI&D^ݼ`pV x~*iDOH>H13{;b$n}ñxiV  ZpFŶtSV!&|ٻs;Ҋg}"e98i$YqZTv&@', xAO%Nara~!)3b_֯$[g hרr{LwO}e kcUߢ(Ъs(gxzwԁ6/Z4XR*L,!@ ADs@3LcYCIg\sUs7Μ9wSbrض(:??#+{.]p"tpAZ'[[FEC_POlxsUIپcjIbd¢Xh~~Ȋ{ZRY=:߭HC*F߻Ѻ{J!0+-.uK:Hw۶ gOrsJF]Ә5!GaP{cSS<< j<5K -Ou}5(-8YuK&K5; ¯(5eR祇[bvf4tlb"e=K|/wFzV|#^}5{DRui3:>xM3 Az 0(9K9Y> stream xڵTyTUD{AfP@ #I!IB Gqb O=nUQ,*k"ڧb;Arn);DI@Il>bbDјWyPR|cyz qhHh($ "  ȯ)f 4&3!xcօhv F!7$8}Pԛ ZC35&L%&;fb4D#`&G qM j0 * @. Yrԇ Kz=ixE(#&XY8s&T 'X3}P .J\f2™y!d42:kୡi} k28j#EsHZ48L! j#DtS9+ AA&ID8uJ?4SS(?i(knDtNА 1Hd =PU@F!~2=P,QkLO #TG|mIP8ES=!PZȠ3 M% 1H{[L"vI[z!a1?4P IX }a8& fԝF&Y '*QϕxFK@&Ҁ`: ij c3fDFEO R0WAbY(,`ٖX)@+h$w42,k(BE3BN$4JКXXFL[^"VgXp3!3pJgB~{=B6ߗÛ/ș"-gn4ˇdH# E)`0N" 9Y#  5`,RXHJirF)@o4ncc}@LUj]Wֵ6i0WӀg!%}? %3-l` 6|0ŏIް*1~ -0*XmWIEP~jIUAYNr{fksGmAD&ba׹'Wwl7?2 8KkqWbgB&4'8Oc{n¬i{^ 2預z0I׫eˤu^囂MkFKɨ7ScͿy<5UũjuI淍v9̌J6Nlc s7ź&(ܷU#(keleݺn'Vnݜ*YjEFs6˯wm̳\:djW׹{QU>eAyX6UWlފY\0tJ%_]QGURo&xڀ\OqKoi,gb[\6k9qЁ7ž-AiȘsx6q;wHö袱5AN8(Ox3;ɺ Q᱾\/cW,)U%6T!y)GDGr3{ճSp9o;4&{ {fq^5mOyıNcl&&nZZq> stream xڵT{$Vƭԇc8sƜ3!FVVlWe#[&BdSՍVIb9ϙs|15XX쎡pl$ srD|Y3." u 0HKj <`~>H>0q0C?VNaTB2'Ha$Aհ*Q48<^4H#1DH0«A mx ,9R|zXW/ A#å0JZ_.T]ƤS{L+lf$2 *`1< Ntz\\M( &"9>n$8L ȷrb(' P'FqJr&1$di'FAP5E/DB<10 <2)6 &E*P=|>$#w*JAq_Jqy#8OTz:3|Xnj僑4"GSXl'`h C `11$j\!y"0IF84[|"RC>ܚFBrX*J|XJRYT$b`u$UX0LA6FwGa?B"'؝OaB 4'/c.Bی#%ʋFa &) :yp@=}CA@7T$@ Rvv Iu4# 2 $2ETO \gO>T5`p0'BH$>AIǯ_40ϲD+`emGƖ /y7\$oԸy]0ޒ-%nEJLieRs휁{éU)f1Jɹhj4Xou/B>3Xmh }:SJ>h϶5Y5@`ۀW5_9wD4+SC֠Zdbveq=Жm^zAZmߠ<`eﭥvnqҽQyſ_ueC)^>gU6{_YW)5FĮ>ІFQΑjO$UVf>^U&<Z\Тw:d!޽B)e ( S'WzT[QPܡ5~͜nZ){MZj%s씝 \4L7 XR\Vs}] rى=h2tfֻc'Zbj;mS[y {;ZU\jkf9:j4~G. $EUf+AiPg{ڍ}ZP"͞紴.*fq^ \9|HĎwg;&*lcprٌR{_]|dsa<ף'W~O%ˁ7:7Jc=]QPVXCCKm$%u֧a][.~nFdgLZXœ7~+{{?W:w"uT^8孜>倴ߧkaQԝg0zΎ'?k~ 6eѫJ*f8~:~Au *:z<9x𪡭dͱFlf)uG=U=8wy$0Js4:[z='޼D˚:3{L|z߭F~va i r7Y:9*-ӂ]y1+hkŬL A䤎~8?'iGw̡??^mV\Ѣ;m\8)ufKLO_U7SWWWݶyNdm#xT3͔C?oUP#):R%!_qzIzJc  fQ_ǶvKAHos"1ĠWPXwUF?왹U}V+OJjnO%K3ץzWO)%6h:8-Vd{/d҇W>/G l7*՞IS a+tk(߽pY[ǔ=v&Ԕߪ?m6NϒY}(dAiϪț>::tl0nА /֏xd4I]h^ ~_keU% ?.ʹ=ЋZ{6azevF *M_sxً%WNU}3x ΫۭCċ`o{2R~:Z71j(< H-N8b$2YT1iסx~e 6sbF[&ާXoSV i)[$/i*Z<ʥoKj^k!nS@}E|mM)u pQ ۼX1~xp9iX, e9/[0N. I 1ئŨA}ܭu endstream endobj 518 0 obj << /Length1 3030 /Length2 35299 /Length3 0 /Length 36961 /Filter /FlateDecode >> stream xڴeX> -=")%]C3 ] !)J;}}ý~ZO|Wj"f`$WPXYUζƎ6&T**1G$np;YLP ^T*t*&=@kPCM!P5daA]VNb32[ kljvXAfY&&"*ЂA9lPj4$TRJjtLj`pSSאb(K ) 5_Ձ ( :T+𗻂+5X.@GկÍ lW=3+3ĉ hdo?uK+h~:md-%2 _N࿕vRBrA +4Ɛ|啕vV ' d 5t2vr%h&9;:ʡ_?iK] ]{c1GmlS0bq0b3+_2EI 5uFyꀘܜOD\`@Td&*NN`Gwwm@`W0=(#s`@7SK_ _b_bh!{ڃƶ{+s b89:{7BeY:AG]P.2xCW!kAd02+#AN\ζv@khlgeo1bKv3D hldjwi8C_da /Ư-e ]c0rp:6  -0V_4;6ILfV ': lOV`3u;;Q5,K70Ff߈,%A,f߈,#vo`\~#(E7rQ\A$ dJjt?z SV~*Bs>~2ǂcN}"mD46zThDhQOI@3Y"Ku?лd` "IGYbkfЛM*= 2ɰI ]y1ͺcKW{PNXAbllJә*xjhD_/ARhp?^Ȣ w;وe3`  ##?|`NH(2x7}<%!U0םmw~>6sXF%yc6c`RgSa6z׉ 77~Xb7M}H-@yyr!3 5cPn!~,#_atáwUJ`bvN>w >L#z 7[ Xth-]\:IE'c#FWHAkR.<&{as?sFK7G'iSKE*ߊҭ? GJnim{]qlԫ9yƢQ?/6p\Mb)0UerVKz"P0Pl_(V>0a-|,"m " ݤXD?vU: qB"=[_+^S@o3FETᙃूbWOCp~ټܝ"%utD74Vw.p ]@5Ӵk6۹ v QLc7:~zZy[3U=/SD٪B`$ȫw]x9u\7YJkŃ{c$TǸ1c荣ıDv@NOrAA zx~nwz;;86OZ;l*Q;ƺBDžqzZ7"n:̨K]6w8_ܽ}JwZW7ѐŴ,cH=ڰJ/%'$ yG_sBk?i1X"Y"u4Qg5/N`L6urL*i/ʙ)?G;Uu3j3HjIW2D80Ùh byfj(WmhK$afBXeyf.k-$+̓G㣮՛n}.9y٬[D<_ h+Nu[?^.u^4>+3 aȟuOw9KH8&_Kf2"inR] #/B*lgBh֬4)e^-cqrkb P簿vQrP(G6k&(Z5k`?XwgiI]{k18.AڗB[ 7 +Z3+ί*'=`--B>~pj}'d92s.yN1Gc <;O!Js"ӧ OvqYpѳV MN,w"F.ȡoW$cҿ,'uQ 64kt=L2,:q [,85J{3^o4 }/r]l:L9հZvNp+<)vLj%qLlLzC x+]]& C$2pk&BMv{.!tF) |!>gΉGGՀط(|?Qe/[0bJS;>%u* 6-؛-ԫ(LJRq!q=\"֓X^dFefpeem]xrgi`6 #:|ɌB⋔r{$p{smFhvjdȫ(a 7*p1.ס{ܧ]@N(?2-(gLov_~MOpu~g<,گ>v=i:~ObIÉI+(,\xu-=9tqgv!r8ťoWg[$2S#V22L-[%חSc=e Mfp^4REFŪp%(M$ x);XP3h7:3!W!&oE>% &`Wh{!InR3ֈN Fk2^I~2UEBBMdXp1’2-e~v ϯSRWxQ4V1AUc2, a82yhFx7φzŔf"oړO*9`1C]tOK=hhB6zV~=PI!רrțgG,9,3yOS4=[ׅG U\BjB+,R)X_m{/2+EK_E+ۯ,)? ~=Wϒn<k_[k4`W:͆Ic446^`ۇ>-u^H5.d@w產B3qT ܩ\Kpv`lXǗ1N͸d ~y6 X',EvhV qf[i1Y`\%TTK`N+Qֺ]V?eBd[dY M*!$c-^Ox CRiBޛ$LN,=e:OfM ,.p$NW4*dQ1ofaQًf##'u,*ae:-$pX7RHn]A0<19V9Mҋ'|}0AHo d6\w1XVʺ7oE3f/Ԋ׸"(]BZ+ZOϞt^M }q ;7[ >Hu<ڭju4fV޻!BPK>n(l+O }rZl=YZ'TUcE;>BK$N{>a.K9B,GbO###Bt4e9ߚ,]ޕZK.l"G_cL}w )p匈Y8eT_+^w{8Ɍ8}{+[؆F.> 5V5Gކ_ӈ3߲҃ll  zݯSxݭgrH^UAC欯C#=#cNŃF!L⒜o5`](dF:Tj%fč?RC]zOڽkDcЁ-W9̒drzQ|~龫)SGujF wNC-҉~5! ²4+lCkKNy \PπQkϋ}/nm00\Ǣ <%<7eMp_/ҥغ BLnYI" |*I'Y$L?P5ZyyF%;-Gqחp5J*3Hګ*^RarWdmnL"L]rc<9|s?7]cr؋ph^a"'Eϵ2޻|DnF "68ºUO${N/_bN>PLRZ޷Wݴ ïDccKdYTv?)ʖx}GZҖ$k] F?`i"S6|fiW~Yp&/Ɗq #hjvnԭv8>YyG]pK73m Z:w/ۿ/$=RΒiJhz.CjXG}i﹤yK)I&_cO'϶Pg qcknQE$5ZQs^ĵ;PJeND$/a5K-|iq9d2;u]@!ֽQMMeJ^ti#1c3jX6Tq ХȎ% ' DgxS6!Xy2ڸp.:& bCj^6\xd,o,O`$Fy6W;>_δ6U;⺰@YuEQ~Wz<[eae4Hc?_vZڪ%` ͦό3/ZN%5B1Ȕ)k^<3T` i$*{ p<}0|r!@~88Kɣ*H5+ym!ތogQ$ݛwUSRE@Ԧ1=U`RIS,Z6R[gѦ܏amIr[:oXєՎ]uu˛~ß=mb:&)P6nYU<\k Xr,K5`?2"ops+@i JflTNxh5fc疤 V2RF͞!ho+k|p]n.&oX5)h]N-ݖ(ai Hܟ)";4 O>> +i$&}hn9c׏C$ 5[̍BrK"sxSYR(ZGyalFɡJݼӷQ(;.z*,ȋJMǃ* T9 :6u& !ܜF.cUrNrfNۏC,+/kHU X/Vw/mO˄-w>boM~p{qTr2(frx/3Yx^I 05M_z]U:H<øHf'כeBD7 R/?zdr5 br#/ $g$>b~N s*$LFV<@H+#:]c7 >9|þAc'oguua~ttp̡˞O (Cﻗt6smJtL峙CQb^({,_nBsb Ƿ0=:pG#Q}e)B/TFM8MhʅEzO@G鵛(z$rwҤ.({^*-ײ%F;KbGl-RNet!geZd=Td놸W mSpV1W%^_:>v_:\-붚R Ybu@v`۰2ua6n/Fs޿NI]4r>z,>slT%JCQe,YQۏ[.9 !E$Ȋ;F֑q?N#c'_Pwd'E ڌ޶DaB-%i!g-/'3.E[!>.!W| L"߻goa`< 1F~kA\~5eQ5^-} IW3BBz70 ED~u9.9J]kBU[ uq D[/X}-.{cP:萎(:3%p1{W?tP/xQxƭƏnu{'#~ޭ;PyԈ[pu nKM<]Uz W0 n zuŢtG_)j]$BF \38>bvt%gL£AӾ)€/&6"~cPntOU/ Eo}˭݌%L/Q{\v-Yʶ&6/ׇ@u( g,N]P\wa&wH|O(H>)9EխәѳIdМjWj>,,O-_sS--X{J,6գz>5~>Qmkjȧ>jkf7s=C.!ƃ aQ!2IeSp֑e"9^L?`m4oR H{O8Kz#g4Q)wN`o]} (̣JQsU.XR.׬g&&wh k_ s$')oϋ>v+Ò=61^T;ДDsDH''V5^@g` ^S(dFiƨ/P{b9ԩ"ί\^h!CJI(5EyQyٌh.%Y&S\O:7fӾ$99sLYnSD2pXk\M#I審8%Vu d+V6qM^+JWhq5Aӆ(<&Q5ɏ٤=yVvhg76B%4_[|AuQhR\ҦzQ.2nGT-j9 2e޽],+?z~Ì}`ØAo+tg5gmWCK*6+oF&(bӫ{_'dZ*5j*tI u& ^FEږn|6cAA!ڽ [Jڧ.̋59gi\Y#jh&0,rA38z6]"w)TR$Z}<f,D=Fvv^1(?-M\-ۖsYי?:lUUY§gF﹃ڭc"1Φ5xTcՊ\n+cR:? i;8D Jd Zba\!Z)|^# \D>"T{n./2qXT3WQ`7]L*d!ܪF [fW̽\}JrEU=[it*օ~;q zMDZrh=Eȗ{'5x#*s6\qluo}fؽ /ѱFU@a5f2I$T~#G_QNSt4P6/^q^Ef[orV%f1޷AZ_Lmlɣ{ҕ:4ߋX_iK:#a~8`<ٗ5cV;8 d8;KpU:zj-(ElR47K%'Yc_䋦t]z)dۢq<&` "d ?;d^, Ӫǜ ~GyKwL&o3BDi&SˆJ9V!OX2[ߍ^y2پ!+Ŭ#9>H0_+ xL]:Fsܾ lƉ+!A,mw'5|F(OaUA "~㸶T?dVp R$\1ՈLP؛ݼ/(iX7XFUMn \)^; H;q')?yC| alSȒ>dH: _kT[';"Eb!^aɮ;Ct5|hBk9ݹ08J@a_~3KTTs!n8j3xГB륝sɚYIb}s>^(vBg1$=sg3@gP7,݇<(S tR >r !ц6E~{m}fl@],x%)3lqt֖%+6kRI[isO7ݚ":?"H7 braL~K&_Ovt]Z }-|rhԯ:uWOom3O=hێAv{HϥdrDL"&Q\ÇxWEyBŖ O3հD3:Տ++3?ؙ {wM ;ys-&Ĵ륒P͝YVUQJ< ׮4ݣn=g"-5N/U)8߰W:ҷ2T,<4E=tr ZAC7t )i͇ClOcN!dFXU\*54orM=ȅޛfA--Ku,_u'ٞjm#ʡɔ\i&SChuw.h%Mavo1>_R"Qq} ѽ$/8)nF2O3[" ]"jLyDZ`ԦQ&);6G3NR NyEY㧎.e;|~?Z)W`p|9cƈ1cqL>ZiP"u]hS\;%Ѭ[dU'eFitN+nz_ {tWHy2GOb BF#l_N󮀧ձy1k|S2 ŝ;kV8 ~\g;w"i Ϸ2|֮|m3?kxꞗs'tk*3}\纅7Y&rc3ͼ0R՘G$mJVcg;D.|˫hF/|ycǀ@9X"ne/PcYbR!EHxw/MyeP/ g:I><<",cZYɒ߫bϯ?~Z}?y`F3,_n15}h⨸rHc8FEc8y8$i)0b020˯\qT.hA9iڡϣ}ܺK5^SEK$i-X% |O_"O;di,5 B]ݣَ|^G2K3)ߗ빀A65iE jS h2S~G_#.>G 3)m}<2b>Y̎=BDkk M$*:ɜcxR|Nv;AHǞ`5.qEX h%yoG~$|ps!k|Fy/8wzoam,a?Uz  ,Ah2Q}TEDuگ]~yw URȯ~2mWrCb17"pfS 9YjA$g!}X*-8.3&Q|WkbA@Ӱ-,z _EfJZ o(!Lr\? J}Pww uhrh4t"#˛4b\__ C& "$yy. Kf~em V("0/!{X F '⑧$EnHJrƆxQͩi_6&L̲(pӷwQ?S 0`:`FL7$"a]Ǒ0 _EH}W4F*[ΨS_Z 91Mk͏jkx$/4Z!Ysl/"cs' 0T{VƂ<ğ\~R\m<5g>gZ`,}}0Zv#YXMnjOXloP %Ξ SR{;Icsibq-/Qa1w̪\@QWQZ$U\?Jv8YY( yM.B y™)04J[Y;>UY k(=}`zrєC+Y#{9mU]D+GۼO&C/]U(E3@>Wt_$Aku= eO 1̿-[)gozTc^dQEљTԢl?@Yg`OCX Sl$!-c!|SC aDuU (G KWMa]`$<]J#)̎b1OD>* 5OqG"2N߳[ :0Yyݡ S]=3|ܛ0-lI9ayP>_YDJ-B!hn̹͡qY> 5i 3Ya7xK`bY6qLEogĒɤG3Cڋ>85!Q!6˶hVBnSb>qUu!6z Bb %4* f^q8+'@ <`vF2iu/Ut_TAʌv}*9׸Ft.C(OvEn]INNŦP@ 4n jD>2 P gD9*|Je;+e2kxYG=.wD_ˀK/E-|"*nU$5s5NT'KZ9*L iMT< H6F-&[feoa, 4d|"Gh _Gx*I.$U ,q6oج ٖ9^KN `%̈'r%)XD5ӻ +]lzK:&EC͠m?F~lȟߩVgW "*^[bt=~k:33lt>wV. 7$ | WG*PTnH&H ]:x{Ԃw˸ 0M̿x}ZPP/# WK^~ 乼YU>٨I1l7)jXby/˴ujb>xIPEAv|/S5C Z[Zc(\銻#2 \o|Pg(a%(z_kk#(xl`ݴ5dB"H^;y" Jwxې%:t|iZ\03S:&o=+1l__ <~މN!كW]|+`hJpS{󱈆&2XֻA&&,3_D![5?VΎy82!b>nLV%(#T1zag~?AeQYf0 de?CҰ'!Ġ@p/f-3Kھ@v%(fҎI?f=tzoE~qI)rS|,tG5zcPMuS0=˅u$!F;u4Y&6'@^-o@I<.]f6n^~g+F+\&ԨNQSCa> ^)Knv,Jh[cXPm>I;߷&{KLgQ' ҷ0z]!#ln$p&HV f&,/Dw(Ӟ `4N5oTU񃦁lMS Roc`C dL8GmݓBY$͍P(Z9:?}W,XwvO8Jn:K಄GA6N1^zpzّFA d=4ArnMfoHns &4Q:Ǭj kGirLo r[X,< +^wcДMiGHQ"R=mfJa _썿 NՄqԘdWX.}Rw;?fYg|hD"቗xk.'Yu>' ª-1 sj6+3ȝȌ` ],[l^ ˷Wl}f[Α>goMz|-Ӭ[f VI+N}gj) ?Z$*fjAI#Wcހ 8Ri.HV)י"W _qO缟̤l=>#uFP_UޥnB3ɍ zYF FyIIcҼ2P,!xݎū8LH쯓)RHxhq6'=R I-*wτch H[xS(pbƒuPy̢ŻtZg+7Mܼ?_;w8I::QI%$%9`x,_M~H)RƯ=9BW'gۄ-`4i*yKjaYT}˛a/*Ҟ/_Ł"02JbѯP: R7V<\SÒu0L|_yq)e7gGqy 14?M讫n/\>Zʜ{ns2*%n\h+y/߽RP0o "CA9e;Y~x+Qhed,kKDn c5.ҋյJDxBc, ؀(惂*"柃Mn[ ͋O `y;QDe 2UF.>pKEP;1X5Z(Pfuk!EJ=F|.{93AwB%yhwLL$i9U0}?`WG~{¥rYI.cZ)r;| _pwz5`HU.)b KE ~v2qz`OtĄ|[ܢ/.8xV87A#@43_t2:ii(N)`*#ցYg /dx'1@W>uADi=l(VC>LrS^g:3\vBё5U-z'˶V2{kFJCKN^ɏTĸ.FLA\̝l27޻LL.4'nYѼ)m?Dk߂K \oo^e' K!7z%2taX[͘jt͝6s\8۸tE(xPY~̣߂XFt/a6hT PDZXD 5:uj{.AN_鄗׹ҍLTf!NhKV`hb6Pc}Q~%.c4f4D*28 ƄrT]!G)+ gla Yi}]JoLGU.=Gd"-UFz5O35=Zbir}4j ~lU6SC5*2BD\oFpV \t(G1ZimX`H&Fnt=Z2D1*hfW5n'v3 T7MAkV>&88ݎ$5!:Vm%@ 7V';'2V} ᓫ,UIbOX~I-Op-65*3CTlMIշ1[ΛFUm#^Y[#<ͮOKa0tILbδR }ʫo ܡi8Pf%IX@B-4 }mEb [I]Yr>G08Cк^s&^#>MdNֽfP39F\U` ,eY;>B˂;EL|՘f ȮZsX@'&6h™(%s&Zl҃<9f.:e7/Ѧmшs5rCi9ڢ?}[z zrゝhk]#|&F޸ W)c,䚩GE{>1UC d}!d4l I'4GcW N1<1.gG0Fm5V!.ĉ},y'9PTU_Վx$)6ґfŦX-~wǛ*S" +/U@"ze_żpy{; "mppOpvqߙx֓Wg&5wSD+E;ݐB\7Y57(<^Z <@ Oߓ2fZP^K@.5LAWhx;c`MDd';3OL7ȞOo8]D8&*O6־ #cNuw7R@54J`aTѯn2:꫊^xR-)YkS2-We]cace;D- rnCT' Se>36.f TH"ڞNo1Z39E~I+3-jE_L!WCH3Tb))e][wƁRɬFx_H!`$`'ö@nj*O"tMz'#p Z!PUzo엁i#א]J&=3qY j)g&5$:@Yr5ب l :wJG_A}:t0B~9F% "N\RzfH]ЅL%2ʉn|FTi&X*aMvL6m u8ݗ&u^]F9wB̟ۤ Cڏz~ck;_aJ(%ˠvϻNw8 B֐{5LkA*7%AIpxV>NMذeoZ쾘KR cno-sB#|oa_ṭ${iU,OSy҆~O2:FAqB- JTSw^x8Xtj3<Кul͗o̙;!gf_ *aBֲqtlXΕ&ѴȂ qqAĐ[|_IK/0@E&6Q܉>Qg}=5{ ö*pw[ kQ^9\hÝȾo e8lB_=t,)x]ARJun4RF0Ą͡,)YQ`cj.tҴx"`o?`|BTv|ci<21bhÚì3DRÙ$? .7okmO7$M@1eVmsNȘ_s6DV`UHŰIjHlv_p'h] ?ț)3)g\r89mfR7符jy7:2xn*3ay0 wg^q,% `շpf"؞vNFw &[*ژAi:1[77i"C(J!y030QŹM.̴W7FAj,}GFA}EU}0%ϵX5PŞ>lVby]n~x@T-d><Ѐbkg!v3CHJ8i?t|pBa:}RnL* t"LK +Ml2+aOD/C 5ۢK{u*|9\zM*kU &^cbf&|]W!07)N8^}ĮN [N !{fMj)nw`"/1~5uScw>N_8s{IXBob앉 =;o)rcHˠ A;)IA H1hV.- ~NPE@f:l!_Sz{{ mU'b}XR9S=hhf[P.}Q,hsO0cM:6܆wj.n [<[h(_qq')aA | ήtdPj+M4/Eu-pYR Vy^ȡu٩R*t5t u2 ƥ,MQ+u""=~YEA_ki(sI-9wd3{e]w &Wrl,2H9+wPS-( r~~SYU_+mM@D&kI0uYIk7~]t5הIX=چVTҨj"G "` \Z1৬ JIa! i\Y4*+ud*}E7RɃ0I3flA1&7_,@p4n$sAJ /a|m4sS˧8oA=0"4bUh_4~ CDx(#Rу1,@dyƘPmF N Z%cHJtK&،3VІ͆A~զ M6%T- xF)Ncj Wl囷T߅ CL98Ta,)sT6̢*467:`-FT޳"]NyiYJ%i{l0jC#F|C%YuXQ cf(˗?s}ũZ*~>e8 >ꙂgQB{Ң()9" 5  JplmENM1RE6~ocqHqvskI(&C!Φ)QR ݁Ul^@Wǁp@F0>mޑoVO Alz!ߪҊ98Ȭ @,_a2~Z "ڭ[ЖБwdѴR6+2-`}&6(uJtLaƕD(`)"6)&H ^P{Vt>Mnm-DLSVUx{ J]pZ)4.@%=aF=,4EfJ =@ tOeYtx>@y1S"|;هKGΒy?{0%q)Zl!*6h&|QXugұ8:q~us4?ӗjMI'H]qX)UoE͝23bf99Ė^}OO17aAv:_+ʰ9gE_[A=x/+6)"t?!Ԅ؛:_i^dy]f,똊.(ZcHcWȡN,u;A}<\* 6H0 NCs:iXR8;MY(YGcGg Yo\OIY2h}dTՑljN* rInllKGT!YK}h 9PU2ؚ};W9ws n~ Pj4c/ ]}ZLm8diz _.r5鱺SΝ烾6נ3"6;xU?4-Tg &]g'j7tێ2 o=%lɻPP[P7,6[! 1GH uՅJmsx\ZЁSW2u,\ҫb}e-]KeM)s>,Z+0K]T ,tW'mHc=!2IjX,Mx߄ ?mq킆VANt*8(hk.[M'^I|}LM3yϦZh5\Xe"ehqKcGsϼgAٗq5i\ǐjjk9ǩ9qV)=-ǭ={ k @ڬwٮeK?&&>MOdK'gpN\zh7ebˤ~}99gRڹHq9ra 4t[B~|ǁޗ\WRgv_)0uKIHl+h_A^~mgNIG[vAq$w>p)rK +6lGh$e׋I#)TZuiVB4xj<,Ccgqxn|6EeOpn#M?nARg:eZBTQ8(%c2o~Ͷ0i s-6xdL%1<׿/GPdFIsT$GWM\Sya!+#Js)K%0EȽYeRTxȋCs,., +AG#ȊZ`TܐXNl̓|Te;9|TՕWC~14.w kO?>T=p1ؘZe=CFT0Xf_0#|o.&=myK1\+@y%2q_&(O&\>r@>8{PMkDj3qEcr/g(ŝ$|5$XՁ}~8<q(#H9\{S* ? B%ZMɪ= IN\ӂrg>F~֠5_%3\^[}rw!5{.r©1Œz{"0 mfP71"?eᅉE{`ltC}a˨'@ۺIHn+[N.8!b(^q<0Uq7H/"}]dH}_3wU#hN.JJgtyZL{aW%P@`GkO 5YPAvdu{`^>uy}~5,GvBXs$q*ǗObmq-|2j%ANݯgev^L2ضLt)ςnmD#CDvUko)^7B$t+HE a?QdXJJnf%&Є{P͕"n݅bCbNzZTWMA [aAtvh?}˂ bD$+i1<^SD_}fP115=LAwQ寈7P$LpVpV AՕg螸C'{a\P lbФM@P.KX'bkd<2홄߯_~[5_§be)8vJظN#Lmhn1]p\AK|DR_7|DQ. )3f nr#}ˆb=nc,u&k"<|K A phS5(̳ES?]$N9kotRw7jy;C)A:Ua*.B05@*{/.qR0Vwi*h5S^EA DLVJ<`6jXYⅼ6V qI[ALt7At+!&{vh)ۗ0Y$Uq.@MT Fõta) 4xLgXߴa3,֔$̶5&$8V3(H&6Bi=iyVf"xa|푳VgJ!K>`q\iCS<؞-E i ͯ/UPzo)s_fl8HnNlSF sYj'}vҐ ŚH|r5d̨ tL{^ -Ucw#7/4 -!g : c| +zT^aA bH8#woXo .{=VUԕ ]mU]T<ͥjܮ&`? \] |UNKAX NP9tCX~%#d6Ї?屐)$b͓L+/"Nc? =6aBpvhƁ>("R .ξwt^PAKaQt$lln5[״k휒Rlul5e1#or1СKbqCZ=ba&FҌW'ηM<GV1R F@R ݕ.8ͣ?dL1X'_RRm&,4F2<芞s6@IggܷV1@zj?S巙C")?/xw97|4Z$wE/8څ ^_iWVd°;CKF>*0ͫ|B=̼"@VJ_3ܨŅ7D@i[{n,; Z)|\X-*uUER=BRWt(*i漏cƢ@؛jb2Ă{J*j2$l(Ɨ=բ~tul ۔C<\  r*?xEw ޼21-FJTҰe˦oTH~ޡ_6e' Nj>kC\p=h7 @ iw)% p# :BuQpMQr+Ghi:銜aZv'fEL+^XA$弻He2uG( ^+hm\ق8NcHG `bMPM1J{0tGBDxiH(ZUT1 KTڊ$l6zExЯ[TNB!b R HX-X-pBv])!NN(J^<;MV36Y^z<}H5ZwdUeiw>Cn( |1?wi~]0i0'5޶߳NWYnuSD ilSߍ촉q Q>1S8`w:؉_.-(i,=lK6oې [H`w xáj mN+D=20iPg,q_wP ortTM;ui:h6꣛-wZ(tlfпs oʣ6IyW)r;|j8x2 qn=ϩX_ w+;\ԇcC ;͗]|w͇ X}j`_¤m95BG -̰S6&X=/'*s& qǎvN X@`9D" =o0<#fM(ll\cY=KLV@n ~"-Rn8#i`CG@Ce ߗz?/1P‹E)B|`(t6k;kHϥ !"f(&GĬ)UT)D?B2p ;p k?pFCe;HZd^J jeU$&a\˿|SYMMW1ʞ`0p \= T׼)P3od)_ 2T2]_VDbc};ue}>M(ƒGj0N@>d@HE;b~"u-ԪVGxTDhn7 U~^8v;[$;-3>p;l Uv.lVW*0'9#%$448wF6S,k[ xAGyq>r289}Zw ZS`<ϱ?PS)9|NTt<&ooVSȉO8ɝWOf@Ń}MoOzUPYZQOYĸ4LJ-*d3!d'}i|.ԋa`Q dPd6Voei٪-Qku *h[5GG)fioֶ_bƭ!b~[v|}DyK' W.YIpv,C&o"_|JL8`PM" ]Z8_~0/ko_> 9:Yϩo.8sK-'sA/Ft4VT>kN%Mvc6uDmf?_eطҢm;Ym a`Ȳ Tw6%ob~BhvlJ+ ,[%yƱkiIIbV- 3̄4\Wn7,X5gfbk^Χngo:E[t^E;7e@8_/cb,'5OnR9Niifׅ/Lw3EI.yRiN? @)n@Ӛ>CqW=PHmLեȀ/{x@R ``uI2H\cU.bȆqƻ$)D$HCB:%d9.Wj3ax}u)0+HkO-% X{j L֋%wa!y Kۮ%ܤj%6P)v *ZkHbe`E͗ ?7MĝJ.$67f28ZsFνbq;6ᾴvW_yu+dSwOvBhܭG{o8ɗ DLPx*Ah[0ʖ!%uuHąؒfGؒ]< ijҭHҵi t0x*Հ:pܨ[ BzPT&qض#b"7.`!"@ YGL4qURxx Ohj$tGSuun{7w WI{g"0AO@#u@Ii69&HRϾ؍^?aa(ZcG-R|3,H:<%O02\5?pypw^4elDt:g^j'Wڣ}z*l`)F ͠Y8ưt,pe!4Ԗ <F"`_j~OyC_0<-fYwY1 _z^ t劝C4HRjlhZ@` B+ȊY+T._åc{Q<02Ihohx^epRƯXF9V[Ќ!>GH#2ZH| R| endstream endobj 520 0 obj << /Length1 1715 /Length2 13693 /Length3 0 /Length 14783 /Filter /FlateDecode >> stream xڵyeT˶-n ޸{C 8 .%@pwww<{ν`4_\6k\5DYAd 9302TAFv @s#G+#33;#d'n p9[LC=y(R@;`P:{YF-AN FNf=D dhin'ßLEF& 7'kK)@Qr{- ;1 2?4$TRJj4\A"!EQT5Rj~; WPQV`a dq|g7P3G_LLnnn.NΌ GsF{[X:@ր#Wc\Ll;C[휀$Am[;{#G #b啕Fv@;#;wGg#g'_ hJ7A @O UEA;ӳ1r3sqm,Ywsfva "2j ³cPwǎ/?Dy̜vH%L@יִOO Gkk;,LtŞI(#wߘ9 :&L?0 >^ { @r2r]>^+.߇2vf ;!}JMAv6S"]jI(gdkiÕZhkd_6K'IKwߍq6z׾ P4ͻn?WL4:9X2߻_|[-I[]IKSI/7 ;9`hV˻M hr~ػ8@^3hoߧ/y&O#/?g*k#ei~#gGKw]w?|? P{@G(݋`brG7_ ?;t ,΁LBK|%&J)xOq?A-M" 4Sy?&~ƶy]kNuc"m"!3KQ#0]aP6+W}*%H1u ^iJ[ K# ^;D;#VWEiP0ݝ;_ ^"wy0%֖4auÝ  JͥT z8ni  Bwp ȕ :­G\xaV_L8Y9H&MTM5ojt@tKĦ>)pߺal)_d߰IqG붷rm 45(#:yL]hgOAWzB r CWͿ<. 1-9{g˒pnkgHh gΊN;Vw;.*u ƹ$oގ|f⭒vdb4d]((&[>Q ;/ #di_%h I>i0_+̺R0jKގr m8ręhr nCfao{|/yRW}}ӊŸ{͟ϻe$.hx(,f?_wHSzqjwŋLv&rM`7pҁؼNuj-zjrHʩ !*nJ,9% ztwlO؅ )(S{ !G;HQK"eM )jBBuV`Ci4EDk{vSj8khQ-[dwNJzmUՕ|YCjW[2GȬ,V}Le#Ϙ_8JFh;N*88XEZH*C G*]&vsܵx^@>Ңpz:GFs3J I̓H̋[ 鰏`f|K X)Qpq>d,+ *& XYcIr랫OL7rLF@v/,Wp%(~J<~p\hպW<0L*OpߍǛf@^Iً"S[}`g!;fQD 6wq])*R[N72ݹXWl<}NȊLU~kF"s&m > ./;$#qѮ fZx&3YLI7OlgQou/K 7iP?(rTZYު_'EUt^oPxC $[25{"ϻq=(%*\CBl^8Q349% !U%%;k@ّV6]d<[8VvL 7i}u|FS2'A͹֙xoP V)DWFa+{xPy+ *,gRmClRomAJjBnQ%Xyf<ȱ=de+וúuL%76!L3KƷ.}xA=UA~|C4)x]*A6S^ *r#c,οVe.F#*"~@} 3}XԐ\FbHo-zV)5OQx!r#=z*-&b1ȣM '"EjOpX7dϚ5.X4pôh>ܓbHU'B V08S9FsntaE Lt]üp)0Q teR+7u>AIm"c뜃ًt ~b/Hyʥu+9׸A\7g]{\k6#Ƕe"3 n=թU/Ӗ5W|RDG[Q*jP7/M(, ctHJOI@{;y 68hJgR-^M"+M3 N }BoXTq@WŐc [bW~QRjwtޑC#Q~bo\ !~ ~M'RJglVfطx(A1~`QSXH_FqTL ɉtq|pU7m|a115, ͉d͘q? 츙^}H2:>eMyAiJLVgg4T ć4#0j͘ @~OT b47W*waf4M>xgU5:Q)̦?ّdh(ۉX\oAs/kO"fT9ceJfpfl> T/7*FhO0U=3O2b"q]otg1/Y*bV Ea[CkEx> \ow|z]9ðG-^OR?_ð={(ZWYO`A rx_1AAxf:sӨ}f2 '›W}Hatdl`lL} Bu Y)H"1D5xP W{k &79!B otf1c()ٚ˖WI2n"’ $ya 7 Q־هC̪[a5m4%2tĔ;ߧrbYT ]&#I+9^k fNvX`;6hUGlAlQD3"VRPr$8nJ>򐙨f#c8Vc9qTrB9Ch|k!an ~~_/,u90)=J]%!~mtLF F5R^d=5!0lPC9.?\j$e4ߨdjev86%:qmyʲ]1hwsJ˜,9<,ߦwŽ}; ƅV-p[EnYJ;%LL:Ǐ+ GW_1'7[Vݴf9!f:٘y*E]сɞuɀb3"SwE.IToqsf`)Bj?EI 8'Q@i/> G~mAodފg&a&M !Lm RX 迦UD-uCM3ntgx˧SGԭhxttOd.ܿG殫 B,;̧8y$ۥaݚ!Iy}e 0,3R?L0qWp";t=ti!M|:UL ] (.`,jF {VMЌRz!9@Rv5DDad0"muu(9$+];+y^!JNguhd\;-Lͮm9 *fSzxIS2DXnju)7 TDJA 09K[C8"!ts@ 5֍0t]ļaB{g|…h_WU7HkD>Ţ{ҧK'<-vGw"XD{6isk֋HrƌV?aqUz4'Ǿo64gU89nꤙ8YGQ=RiAO/?0Z_}rC/IxeLE*iqh+KID)U [c}ms $mئZ4_|v?<>Ii~EʏZ5y1d30{$!N`CDx݀2m_V7@1,3+r=wVz|s%K OI0/4C(DI\Bc`2HךL3^(J!"SPTLl74޾2yǰmqۯ4ا` DBʼn=E'UJ:fc@^G؃8e>}T|{f7Q>X!WHK4d޻8I1eJ/|FOqΧ/, slKםd9tgʏh c[hw$6e҆!ڸu"p{#қ,Sr6OΜ2,f2+yh {`="a10BVwup aϱ;ԓ/ln cXaҍK MoJ=gDdNcSVp z*QF~AzT **u>YyVʅ/ȍ4uVo?ݥv73:$]\J@QAT˰h[S4희hv ^7HiK_}fAx[-A&e6=]>%'γq1ԥfDeEzԟ[WR)[iʻYV,^tZoؚ@LX!&yy/B1*W!l!ZE- Y'`sxeU2 F56_>q\^t|9btp?9>}wٍ_=gD [fWdi'gcYك_NlէD7zdQw~=2)}{Zh~:.q|?vOwpc s4m'-_lĩGK#¾eTIz0w*f2,E/Oy>3;eyߟ9c_6a{ n]eQ iBAD7%caT~E $2I/$ 0`ʴ KK`.b8ݙF FL(e55I~A"~|[4ه>_JGZtYdJ[NԒE3Nae/ |mh,( ½|s-z4p Ŗ M#U 0IyuZvr:Z&3݌[aNL\ Mm7l /ODn`d$d ut$kI=QAaPzN^* 8`VS7 GU䯍$nlHS<SXm#:-j"a/)&.96ۜ=I(}|)OMGXE?e[A$tk؍&܉jB2ܵו S2aޱSFa0BWE e-Z7Y֋pt`[6i'| ͽ.g6zWbgUWzK3|'w-~+)l~IRtz0E0:qMIyzmpJc6ҒjSmNu4XRDJϩdzL#E />ӼVeC1Ĵt :#B갥ͨ= ۜ Tw|lK?<(T0ljf>ə2(<"̞H$޵Uj`><ngMLd*!EHȾQ%̻mg|XLxd_~Qtb-;؊=F}C^:D:]'9ޞā<ǛoSǚtxtirFk +rSml>otO^DK\d{kdOA '9sAum$ Ug+W&:6 n}쩱1)Yvt&32nJv]Y :ѹIt,ާ-;2 *Pn*V=j t%"#/"9atݖ0'܈ ӃtRm0_;kTJ_ X &~"Ӟk cP)ˊD#hː'q utwnd uEP\gWf]Tؕ )ˏiᲭ(5zPKqS]!֔`b 6Ի^*>ͭ-6 q"n >]G-XJ6w؇*:NBAФ(7x5wvS?T%ؘ%q?m-\izqKf зOmYJ(eb,ۘbw3Ѓ *#ỎXk%oNj~—u$p&jpZMSMczoum|%EES|ԥqmȐC,9#X_xhRzvCI:'2VZ 'Zm^64fA#r3y>cIdq'rDXqު xnփNIdGo.-mwjng2r;LxIEzk . ]~pBϑd4h?6q"D ؠ8^ rkž֊_1mf_=!gb0U,VN8*r#5vı[2[^)EwVסƻ2._"_g@};P _UWeYI:,(rsc'{cIq|Fi$%U>RwУ&k 1ֻdMk.AYq\Uܲ5[9W;ɸf {O--#܌Շ$(l ߫oF?j|39K捾O6խ6utK\Щ+4)`LUǎ#P/Np=;aTmVKS.}PqԁīJizFtlh]]NPN iBst8>W hC8F$͘`Jz(JvpQd~Q酿lY E7>&*<֗[øp'Jz6>(F1}{ER41c]Mۙ"ZB{.Z!5>v$</Ih0%"R66>Y2,~8v9u8Rd*:hXggo8 f'"TIka2^e[[S/pT3pig-mC(5I2mޕNR^ i^jXm41!DC͙gC>d.9J\D6%Z<^@~OqYϐZ'w?:քJ)=1=* &&r7 嗰~>ZQEѤ$XG֭D2$ay {:Jc0D )/$ KFEX&pyDjΒnl|e?rUsir ?šc:1XVhYn3>u9_r[m,?}yWOYezۺ"%FlGXQ?W$5<%u8,i_*N8u13*x(cwB9"ΝYq1t߅qӫoDOWDA IHu?<]31:ExNkU xVq-4Xq&Ʊm-I/gjOb_͜;֟>j2raM,*l~+-Åx{v|1Gv9;%>on!ABҬc3)(\T0g͒' j'y(+h'Rv7/P+__eK;d9_9rd;ȗm-\uS)ōNdXxۛCcFKN?:$]T_Ʌu R{`nS"2adu=3Zo\n$wC=}:P|ƶ| Aܘt_1e "D.;{PzM./]u B6AASt CN}j)#糊v&3c U/-M=YʺرQY\0aJHm0Yڸ1F;r;D(&G `l~yeQtY6iȝճ]4uQt2թ;VpL7C\)אPBHq] v[Uk޹ yoAϚ=3 VU"X3 ML9wY5k]h1U#M)Ga]ݻxZ#tU,oWf ./UzEdzBFW4_*DXF M(a☺=qcGlV&F8"/vmxAυHfsiXmg%ͮjŚUPUqB7+oi?iTP+}ЮpY3V 8AA\zbliV#0:ؐ<.쯝W{i/"\WxB8j=[`GweH5@cK(iꊢش@]GJYjWC^?*1^(4ůRl?QY5_DC~ཾqb,#LiKḺXۛOr8O_"A2IDp$  &WN[ >CuC'+Υ[G{ŋe;um4)^6> av'zi5dJ\u#BI5FNN|,%0}ț𞞥Xb 't2 ) ӌ]ܘ:T9gGvb& /3w"]`dēsg:*Hu;j] [cyl < zBRQ\ga䚈c6EMmVlٯryR2[dn+ϰ~F}߱)9d,t :ijhY`}l { a@ƀ.vBltHw-lȤPjXѺS *7"h( #2ПVPW+֡fW* ԇsbrZH|A0HE֥1h%/cݠzkd2ܤ}#އےV!AkYeuZ;ưiL@p첡l5Im*- qkå [z/M]~i2C+9N%}l^B\<\!_QNAʕU` n bO0l: C(hʨ?Vj:+L9Nf2uJ|?0n ᧽:&Hm+봔r~ROcGH^PJDV_}Z6v>]_\dRg}ҷg{[SL2sTtH$Er-"Ug~DJsЬ\5n ' ;FfvX9[ki5Ui7L$hr6!Wh@Ӏd]gK6nf;xMQWAw8Oc^p*5AvjRVZ'4jAG?fz]գ9fUk*}/ҍ\sЈy9'rmO2FraŜ]X=/ٹb4~A@8'Χ;s!1\'rW}' tD"6^cR]]$JwVP^P #3qHA' \;}#!TH~n&@i2(8v(0b#ǨHHR~`I"Gl[(o*y=ig/,*c< eE>'z4)5=dяA U&*iz) |7~89J0}LRڙEv~BO:0ėH-{[c' ЁNoi Kw4""򵜵~:kBj`Abd^S(HXV(C[CdWA֓֟n4"[|m~'%E 6< &Q?pOqfQX or\*$bW<-hDB (*9%Ժ|,9}Gҕ'$0[RӺ/g$)czZu: 9X={Aĥ6|5`O)y, @Ox νHa4`~/bg4l݈ZA5*6`Pwy }|%梞f"R"{ʸeAKgp&,˜4+ 맔Gw"p^do=Y g*%k qE5 j E'^Y9}pA^Z;_' gVbxԖbezk>Y+rNHAZ]u2!*Iέc&,A-2t1-Jw-Cb{r['UPqޥOQ2si4_?-ɕr9Xz&;;%X+#pR? SM0~=0a|"&'jI"px~L7arKxhٵM6݄Io4*VyX~> & *vg?A|FcޞD4l&ozG^j * ut7Y;D 6#2vb9P8. h7SBh(-橋 K+HRTy[>-`m( ,ˇlx w@IFzɴXjQdk3!6ؚ( >I"DP#\ֿ,j@tocu;6|-_ī(a},"cnnnV9'tWYg bk2uiMZ4Dc*bQW]mǨ>_.ko>Xx5d'?.Z:}Avl&dDЁ7]o|+.&M]c>k/VSZBȽb:ַF?׿,Y.çi=oخGO6\;e`:]+t3̨9K6$;^;RaA%DTN|ݼukqE>Ձp?$wMP> stream xڴsXo=9ٶmMTlLd5ٶm{tw:Y::vJ¦@ {;zf&' GN.4r3r8],&.LLpIh 0]<*J.FΟf3DoVzF0dLݝ-Fvy'h -lf5@]U\E JX?zUUS +tIuUj@ ju>ˋ i+33}3 lF[ 5sŁݝمɜ,,Nրw' b\L?t+ߡ,MvA2~RWcDi/w3X9+$5sٙ|:: >juur[C?MNU?[|2=o_#?2f6;?ܧ?ٱcppo>a19 )Rq;SQ{[Ϯ'fɓ'kk;{w;735˼+PZ??!́.&0`[Ÿ4z;;̌lf78og#7 ?  04q]/4YT-5]>AϞ[- W#[ տS~F6<4{Rw57T_ v1Ծ s(@Sw߫ @oOIXl4[ßm(*Eh7q;{SK;s ;S,oOM=Q 3 0w;Mf#/ `4lF{qf0:} Q@5?9|vqo._f@ 98[5-M?-y#'K]Oe2_*@K?ED=ٸX,,fvf6k[꟭^ h`odR'?U IpV)%>Վ-C,hϠ(K +"°ђX1yg,k'(.<!_IB},]6JP=nzb@I&+m]˅t/cnBwAXB[uxFa+L3k9*Ӆvz$c7tMXXI'quU95zcO߼**A }<DUWї$%&f_]|y9 Vqsv>OD 2bUO|`A Gނ& X[`BebG*]uJyξ虔_Þ)[ B`tG.$%*cg|uJET=<`2|b'mոc[PܭBXMt:>t*[ީnK\xQ/WQoc_ ĊĔ9#y("¸ J RnYg)d<_V#kvWDMsҧ̥+eChš!}CS-DDg&rK&.e ( sC% ZӮ|#EL]?P3i<ի}]$ ɡrOq\~ylUWRr1{GŸGl ?V>,|- "&!dPJ*$%`n+h-cjϰI񬲃 {tD?q&}hsxy)UFW_Afzt QI雱ͱu%38Ws(,*A?jJ!%`7l__ )WD"! <OD""8õE#3'-cUj:^u{n%c!/`>IF|{UvzInJY4=$ډH^EyۨTF&ɫJ<C z HH~E.6'e&\aaVbuEU=Q?FKHs>W"ԃzQwvu.Nxpp81_,aX6tQY!+(#B@їXGY1VYz»g|)Raq+ >=ZmͳIT < k+#Ϲd<0˯UtMf~JA*=bR'tpX\̌]--q]L*=$3>}׶ѐYwLb=>K|a\E pĻߴ貁$G/_)">R1䱖3 2qgaewWN\0Uyo7\;u ? pΐxb3&PȄh|Pd*mٿ(9?H$2S)Ǔ:# 8#ރRKr3n[sH*)@i4hD>^8 q5q%_apтg1=LRcQ z܁P}iD{A?k& k9 [^x'pKx%=](Cȁ̢%~]oջ/9߽OV]a'Y@M"@Dpܞ{݆pYYY`/uToi (64y 4݈^j.Ky-#$6/T_ۯ=5u t}$4o&&(>f;K{BK݁ s5YY;PKC(:8!lΎ'=z`:Zj!G2Xι*-^H;.1_  tp0=l ~_tXSMRtW4_QCx6Zp[H,S%X7*TǬBY1@*~黛֡%@?#ofw\Dn;pߑWTfOA|&RH])|a0|\|{GR]W&]k t<4(Fi8k^WȾ e8B@0uF^˝&rGlg0EI.@NƬ.U[k<D9cÌU͝ rt/[AmV͍1LDzS~}4 AEfMJ9,4؛% }m!L]%c8t4Nx{9S@‹YR[͹7>4mî׃ xPUs{;9J60U LVܫ}uuHXE3~bѫՁfH8W ;-u&D؇pb-cK|xߌZ`{dmzX^(]ՔaQ4Abe.kQP~| E;)SE\ sA eM[o'߯ Y ]ZO uls-ŽBJ{8F*%I[w! Q?ꋙI"{Y j?דAGN Ԟ[GO_ Y69t4AǾF%nٙ:Y 931+VgCqk0e&`6kC)ņ=%r!2\eG3}BcGQU]{"fei5gA!1ؤombn'?|k/tilo0d WBx#> s ٕ-rMezqY'Sq8.BQ1w(̸.5Y8 r ײqʾи&NW*&##9cqJ HCݬBFԬut@K[]zd[z.q˺:1cj$ЇAA6A|5ekP=s3mU>-iXmɢ;ERkv.v K-SC>zK$<]3(W&R; F'GR6|TJ퓮D b7KL;}bEI3|l((W6#Y=.FeSc5okl,g먖Ԙ֏q ;AII+AWu15Y:FUt et_ZL='UH_5o$RH:9j9ԾY`hJjHr@hw@<$j1TD eVHaA#9ߖ%./< 1Tj c9R^z6i-*;ΌCVqDłwc 7OLr9BOAn?8i8weo2Dw2~_ζxc 5O4nj~vU7kyޣ8Զ{ҿuMJ +gPdC'PGquہV6ҰWփt )jzs ng=p-*B+CFE3A{ELawɎwX8:cB@MMiK١-h·?|wJkPo`k@)9j^)U;j0XM{Q #Z*_D9چVBA_xrz,ikzԁ | 󷞛"| pىQl9v(n-ɯqvBt}?-&p;3vֱo êYu`E*`Bo-Ba*|-@vn3CTK\$X:G9X FF]ԏ;/bTb!ֹu j5[apTGٽcZCIKـоZTp)=)3 %[qp?ABݽZv)@oF?羠eH_RTևe$Vxmq?f3NkqW=ZP/ uK3E%FSXޭclΐӘ( s\lYϢ7%#],_-gDk-oFX,^ĚU|Ga}9vq> Gc*f`sT^JVO8V_&|D/xdRd'kBuT%] ,Y^QdIN V)G8&9X:OdV/Q4UÚ\|iX󅦈xD =1$= g8r,kP fjӃkZO%'zȝ~Z=k5'Q㥋=׆ĉk zZď5_0TBiu>SŹsMXw}?V;D]AH ;~KXV j%=3Bӛ fP3Jp5UۋPV+Oo}ywnml^A5*_&/"C[*˕DIY 5 >q~``"Y`kV&<(ڢA>Tڡ|YSM r_5mͽuU Lai-cEs <|H6_SV9}`82S9𑠫pԸ&g)JA}x<߯"=J&Spj#l%vA`KK5fYQM"gщg)[HO Ej(6z1atN_(;??f0!VsǸRB6Ws$u{ae o9.?>ks / 0oqBƥ.]iPj.F1բ ~t KA0+|޷COndVSf‡wrߌYo`nCP  X$mcOϰbN-ZC%&F?V.mQD&voflY_7WU#q{/x`k@ř_}^ME8mNaQwjI4l8$K]q۠AYKײ_X GƾCIJ5W \ 3uc1 i;hN|IBhR=dJMQg4m5k1{i)6@YP;\,qm*Apu+h5Y;Mb5ŸD$gRޱ!!ӯED7ȘY ܉eQPwDΈI&!: 97Œ1,RM.Ϳ ÙC܏G]|QSȐD3Z(#ʈziwu1-f3/Cg0S.Ifg:b=nZ&J'JL2_ScW+'0JL+ForeZ2kN/333UQ5 lcػl%M7 6h{J?-ŮV o9dM.8`D񑐵h ;[މxԀckX;ʼnХխZcٸ7>e>CjU" /X{xS$Zm/e呗/Upzk[cԿ%41-;;'Ō8SGB_Fx 4V: 9= FZ+j3V"3t0Ƀf.a9BUѢR(zW# btD ŪaUdy6{(7BT;zl^k!+ K˪&gn|P,|S˲8~U,E3#zf?!Du2Қ;SZd`"]#l8z7 y'?Mp \4 (a37)y4Mr=G"pQj1qraܺڰWʜY;( ]Ha! ΨgMͳ5BPP]`Jn8.P1E u_GZF ?7qś\=ߐdPV㽯c'Gj*;Zm]uwDs7`zo[ܫf3{Ӌ`(,K_](Axff`x>dm -ӻ0ŸoZt'6D pg!lt'2eP~z' #V~A5y0. qtڻhr3G.B}ap$o2[0#[Q Y%Opy].n C!X(1o\Q잙`鲬QC  I=]b3YZ'7T  ͸ ȓ Ϊj H$_Jϧ%_=W#ckpKӦb,Pq{WtT{2<)7I> ޒ٧cǺ΁P\(z2  (m2E^2[Ӿi 8a}WӺN9G, RѷY%f?2G !e2@ty{!ZnY#V\:gP.:Y_* w&8he{E*z q6'/E8K3~`=К&0'jr.~HIE6Rw8-z^oҁwkD]ĥf?(O.QalPꝻ m<#R)xXK)he!+|D7YT%hfI$ ?24㚦Kp0v\?kS?>]HaoѐP1]퉏Y//n}c~T4_EXr nR_ 9l{aiSOdpp&g=uLݪcrvMfBX)͏oCmG|"ׯ<@R8*z!q{"~}ơ )ؓgHr<OEUdFNUGG.nd{lvL-+ OMǍj^$u!F|A)‡!y^}ĥ]} Yz0V5/ ƢBm*xg.f{I_8 ن\$@a*FYmhe8~ɨ^k PkcjfkKT0m~G*Wf.gon˛sXZ>J֖?'Y[k4 Us=u6#<~1 V("m[(Y 4DY!źghl*r_A`a`::=6|j JY{uX~%PKIOsh1ՓGo-`.ɅLnbc-{j9a6| JݭKD%?e`kaFg&D +3hVI^wq9;Fn~ &5Ȍ\ _XPggPIH&=@"ԑ0Y!+z* *txwҲ1zgH&MIqA-"XZP=aCR@-J՝l0ȖVZmWA7看 p cVA@j^7ώ4ؿ3" Kמ``j VJ]xLATUo谜tEGbl`Z/W<6Sej)D x sQRo5b}EFI;2 2\= zP kji+LjM"G ^qm@8^ߕLo^W ) /;2X.ay7-K-2yI ggYdPv#r#v_K5dʥ<CjR:]mn1 Tv8/qӳoR|xvw~DL]] C^Ǯ/Bo^ZKfCk׬$Q{)vg8ߠO)J!IкWgx`;>YhJeY 煬Cn!vw rL |}o"mF~]u_ukzۃ~]߶c{w-_'<ǙV!cQnNbzR3d}@gw 3jJwf:TʊKL]1tcvL_WM^WJnZ8Qȍ&owՎP&I7_};Q|4(9Kg"ƔB6@\=\zxEPIa!DlL-ԑpI2_!7GK!n4qױY^y;*B>v=[GC7x?B&o3 6󻇣1 V9`)U'}-.)#.DMt]aӈ36\I4 HR[35{S5Z߇8 n'J׃0 CQkB<O6OqjK부AwYG0mD:pqZͲx&.w7j"Q5mԶ f&Ar1'$X;gMf>aWŎn Vy(G4F9v& ĢscN~fCG0>šamȹ.$ZIh kcQ_;d@^@_ąmҜBӨLUNÒ ѼV&.Бe= B><,+(%6֘ٹTdfB'vgHz`;m+:H˩~75 9{@)?50/pLV\[@=4Dӗvh)#F?MV"ɬ:x&7nR͒uܠ_ ӠBLD`M#z\Z)yNdJi7k}0џqQ9gi?X,e[`䙸U@ނmU)C?5Q|3 R//kב2eBM*z7V=w +*];=c I7T|[% =THy|uྖ)$B/ۻ\vLU *;9ЛzMqӪ#eZk#}|CKn|᫶k@-:;md oE]'咜ePȌ@ TAGCr36Zc1oeh ;N|'rxd>}H-H5dⓘʓCunk  ȥnhY[/D[`7cEF3+&1rN:M Qk}P2!lZmj}lzqzSw$uApJI-g .=y"lSKVuWt`T͊d*#z W6GJ4nfnqwt|#<%lv]n`o cNswRҤx^*mxa(J`E 0y T9M,[yIItl5]G@/ bll5䣏sț\!4WhZe.=s Gf)) 4oV DY!JvDp]氍hAfBı VbxYnbJt\tHYx;8~Phy}/¾$p w᝽ wd!|\Hr`Z 1ϢBJ`a$d=2Q˾!ߌ&͆lQM2bORG#N_2:idA P[0jL }Ȇ ?JwM>?!hvG^A4Nޚ[.ug2!F. Bc Gq{mx:zo%,|}c"X췈B懐}aF4׆qiG5 2XWipVlvOΦ`?گT(LcZ(1-K~0YP.d|415``Mu_UɳvŒ]c_Gvu-dI驰wì0C?{f>&g#~T1ܼ^l/p!'#ؠ™wXk 2e2-vmuuN1EaOPM,^0I$7R)ھ}FY\#(֣v\STh7# q}_X9*$1F]־H't2q^VY- F(J[7>:OĚb [?Sb[РnUA5FE҇c87#,Xl$ ¾,xSJ5ιvj0-2MgC6f"B~cՕ$Nhp5B8w1 -t;ɛ(Ќ (a5S踜U4\E1$|u? TL?㽶<++Ŏ>r*36ͮrf},qϊ;B6䀚7&u:ztXGKߗe0n&G>s0uy}ϩS<ػaՔ(3KGv2d-uCC,g$ T'ݎO,gS#ض$|5u# DS?a#v WFx{l/7EyK8ସ7'pd?u8>ȫb;â#pFZpw //fE8ShID9X~%&|@+[E,6KN$&i]fRV2~}ۢbo'B0/R]f(COL,!@SWqJX-$B+)}Tk Gvʩh:}!|JdQ#I'ò  8Ktw{I{Z -teL8 sssM}E[senYr`,+Jsś6W8A+l=\Wx-#E TVOd(g.5/ ^[ LQwQUDeKMҺn-~Ibͷz$*_+v{7ۏgyvVZm5O㷺/߫te>$ZuaFFj\7!j1-bR뛸<@m5jjƙl`2ȋ:o"ˢM B7/,fȇV^Ӟ@vdn/[O,bTP\} NW4"rnn9֨Z,WGӧ+0e/#Q`k8[r8_7Ǹk<"ߓe^Ε miN'>N^36wSh2{wH2[r!횳MOpV5ANLq-=?,{hxw V 4$'rHbp5'8{RB+,R/i>y{%-=*0ħcK-#p!5#?5]_x0>*(8H0!j!HPQtL\æcWm'~Ŏ^ql:j/cyN9 Nw7^fa┽dъ +H#Lr~w+s#1^Cļ.͘dTK}RiE#5fH`Tك΍:ה df'aj$(tAiAm8uwcǯ%6ݳ>mf`_޳t_+ML}ǍްbE3۬;Gp!fW:\!N X_lrͻVF6֎F&ݝQ>ӳtIRMeς% Vtx&]7 igDsϙT$=q\=J4¿ޡteE <=\BsY*z%+&B27q:R6fnBC;۪zۃwsLؘ4mc# H|흃h%m:ѫXҩ{Ox03ݔ'yr FXP; @lkT 1OIQ7%if]ZkKȫڕ;~릣3ֱ.ڲ<뜾\g V徇2!K +/|"~b ϭa[k(euVjB]COnmnIW6GXr\:dfPJB&Ư02s3!(?Z l~lp+YƳb.|m 9) !-CCm?Vv!IPY̐Ji{s)9╽<.n\<;SU^k4dqI!yV g@LT* ʨݚ3X)SW|1v<>!_C mp#+!; endstream endobj 524 0 obj << /Length1 1856 /Length2 13515 /Length3 0 /Length 14697 /Filter /FlateDecode >> stream xڵeP\5;C 44];K}~սzL_svժ&!S7X[hh9R ֖zV 4 = S#-==3 Pdjm%r@&Yл ڽ+ .i HO Yۃh@+cS+ Ż O &?x $ ̭MzV ZiZӻ@nmYJ@U"@TAVYN=",J QSD|*7(y7.-į&'@ G韴U{ejdgmW dIGDk`3>%S{9jE;  @he$bww9 {''{ ?Ҙ+%''3 Az {_7АA;?94*]4-<]޶=@O/4{YH[cE re'' oRa+CAkK'd΅ZaN(.?"ˌ =h :IW3fcm0ҳz/nz@O"6߇VFK?-@נRO h@'c zor8XXYӳ4pO2Q)\Rt"@C9S-;@LKFXY2YKޚV@{{3_*;U)@Nz/3a+kCS+c# +@N!YXn mtctV֠w`dmT9tzD#"zz? 3_3q1Z]f7dxc:P:?]82r 'rV_SCogAv@SߛHL5[]7H@i 3 ;l7#f{@3aiYRC`pd)4 i9&D RdPW oOwigU*'|;zҞxG*I/zv|8U+bNki!( ru>F0]'~,mÝv*ehİ輈ێ8z{Ĉ _ D/} #M?@A8^YR՗0ʷF>[؜N*3*z-'\_=[d:Bhb9. TTXH)ؿᚨJ>>=@`MDVu1߰[QC\s urI>lX8[':VXqLkw(EZҎM:&oӪ ԉ˟D+*Os -Gg.0V=;XRƋNSWV k6N;#b7~$đJx ħG͊&S-0&;7$jpӐ/O_|Wnt Nɒ)a1=B';).WHK/o0.@eOBs{O7W& GEL--=05 =YVxi:#@2bb LG!q%D}R퇈;ib#h9ix0󥉼&f9QmnDI#3IP$(k:g [k^6tH2H9Tn:٘Ŧ[ޖ:Pk_ @PpAmzi$PI:ۑ3xt.)5s;a:5@h^GU(?q7cҢZ`Cr;º%mC}[i-fv>w> 'X M9N*~:L';2{葵|.(^Ghg5B;p.°)6(+##2:A #飰\sC@Or̛[mBR6'KFIp3 t6gczq$xW@.cJvLӌL£ aӜ.] 䐰]ҘtnKOkaҞYYWx/.2FQXiADc-"sB6Uq,ZACggGOoPSG@3cun aʌ1r_BzA~ *!iad4 a6sVQy1lwR roRF.6&9kNc%ENfcIi*kUh7!LSOC=TxXj9|i|)F9֘'U-7zaęY*b/ 'AeL&AG(qjw*zn:, T=.FNRXއؼ] ~$Bl?W)DW^,#aX(X@uW ,Y8ֈtW^͆rs'\լ/ТQZ2;z<]BJU-@YC%C9S-U` _1im.c*v\fD_ 2~P|O>1ص$]hz,צ֥sN,;w#J}+yť!7}&A2K0l[xZ4Kn)[3s1]1 Z'v+KܕOufMff~ef]}u\fL*' Ojьr`1sy"ߧhil؛%{`icG =Ə!S7#&E^}e&U ?,` yOk^Е<%@& Dq BDË6I NL|9QwOH`'kwYUwh#s#*^hK?N,| ع7UV/d d 3YRe,>טSeλAO e?D(z?1^<3hh-)7 ʯ?E k{ LVEy?QUibAr3Բqlז/^R~Дk90(v ohK5hd59lubϷCoŅKʨ~V7-ŰJrghFLUOp偏=b.30]ZkDIF' JO#4sp2,bZ',6_u=1`\j|ͬCa~ Cznp_ɓeJD8,Isy]^rtLe{EpyHhv"ERX8Į u^:(+GqaCs,AK1ê}rN|"u+%-5yFW^s$PuitC6ZC#)g颾HE}To#"K&Vnߕ,ţ}u~J~y`j#`7Fّ :]I0*whmb0F{?0pۙ\BY L(ǣLߢ+qeJQ_QG#P@*hsDL^8K#dE?,2C"] v<_Vฏ2 X3|9q |TGr 3bjv#t]!I@ҬMaV5wF-FJ걤rit՝^W;~Bk.8KlL/GIbw"Db<*9_mU k/l%(@ Ԥ,$~8dfRA63ԞIj3l/ɱ85'D6Qybx>SXwڽ~ۖc  f$Ϯr44+EHAxdE!&r63ƒƒcs}>^*//'ݞj;B1]2(^={ R.!,y<\'Sa ݭR&WT63g&էKl@}u+mfc'qqAA5ƅRe:yXq[2rVcˈ!g9Wo@'^un7ԅ\?}ZIqƓv3|J+j9YTڅo֝oZ3KOo(,+v_ɰ,ħoM?æm^A6YX,ƋǵghYv*sVad֡?Zg??K,ϱdYd朂<#L%)$g1!(W>rvg/A (8Y-Fѐ&4kG|X~7yPJHy3 5ݟRCj`\ab ~Zm:o䠫\؈Llr_̫Y 1YeDgwqy",,\zՃvZ|J4IG]٥ЧX†?ֲCZ%x70֪ibÿ8۠.gK?uʭ8șda@ kR1`kZY Zu?O놘 AJN^wl Ʀ;β ӝRA?{$x>$Te2at?k&At4"|yL E'v\ u ,r#8:ضok2ED#b][sVw0;+ƹS(m%:d]d!j J?aԂzB EךRݞ\/iO 5#m ZpnBKq;u 0oW]q\͇۟wdʃm$}(0l-6 %8|͑ )(SUr?`~Pm'a{9; kc3O` ޾}XRE؅cy.]A>m+cܔ&FXd&Ib*V|F #F ^)D )ѻcCNk0joV`Jc{D@~TɊལ7\[etyCRTM~TP$+ G,[i@ ѶayBHaha-vk@}z A뺗=X$ t!Aeˉ{ T3 afg a]R2 dr9@4}+ |X:x3XzW=M)mN'GdO_*'  v`E+%QGI^LH%;Jp`2'؄t}%%h_8E}z>ˑGǑx?bTs._ܑ0Y  6 t%~aktFy3]!)(s 89(}ϛHdHmʉԶ`.NY.d Ľ6/]-4Hl!Jp<=N[v"ʍd1,m]W .jxiWl#kqNp y q<, r'|SHPPka`~)ʅZK_pW{ X}am 4j~ltEc-uL{ ;kf2fxgZ#dXԲ7HeHi6&7@.;.3WQٱqlM6UOIΟ59hP4³6lJtي,GjWhvAkEy(1*tiȟD;'Ƭ"XILmhڄFk1g4G7QYaj#SsDN]:߰je5(u2-d0g3:5J臏#},b4׊42kVe߶vG3[f!W*fB7fvd*mv' y^8}{}Xٹ7?P.jKVsm-W{`Br%b˓w^p I>'md}XDwƏkO.Ka`XM5.A [5bGhy[r*r/3tr<2x^s>h<kY(u "_jԘODPŽ/r =sl Yy4W5UG Jy^:_8G-xD#0owvcN~D7k)| i= C![u702jz[ 0ʩۥuR0(C8#m J2WmSKJ33C4 MQmTS(C6uYavV fw.qލ1Qly~!T|O8PĵE4C%{|hP/5X`? $U0J#~~Հl3idB\㐃6?N yNHɯC"p)~&Z `P g&%&<ϰ~}eogj%tв#f[׀Jù7;\ҝZ2Kk}fÓXJ@Z(O85X4e6NWY(N&yL퓟 |yh0}ۓ4Apm8]G$Ԫ Z9tiǂzylj4VjL$±7[]}in@Wp̺: OW*;aj37*>42{Snj%OF&QC#Ozބff x"Hg<&L|.?H )˭y7m 5B}ެ@,!&lC2Ej5kukwR'3m$hr1IB}W]\#TEʥ^( x 08dvOㆺ|2ÎhaNMjo*|_ex R'?pbls !42hD9(3 GIudT NXdb t$4z@ Kaa҇|(ʮG%ψ׈cF(m)7g]+"5ENlW0P8ȕΜ@=NlXb(}r1\6Q]ܭCw$(M?yKLQCF0ꁇ=^QWkM){_s8EFKɄ~jbK0-}SKW3Kuvq63%J:TҮP{sF?co=LS{t|yu-Uu·ɓϸ0☛kr \䎬[>Q*3 HUu ]6$pUSXK /!dsV^)s!nM9(_f-ҲZ?^; IZw>?}-~Vm="% 88e7ԔKew5t_A }oKU dd&ȔAIPD4 RDI7iیr5O.IEν]3叧2G z+3YgiCIW ֜2n{ DXOsԛ}YL v `ř}:T97mr'*48 1h9dOu/?H 2^<&1i~a{AE}g<,[b񗚸lPK\WIShAHIt-:T *㞵ߔ mӓ.[gU* $FC|9+li9J/P޲Ts|؂)\YgG^-UHCE> &|nP'5 nKo04Me 7$eI"F/b;ejav;o=nR0O9WNE\;Ztؽݖ9Dz}Ӥ_s үPz%#/ZSST UhZ0efQՐ`Q(|Í%Nx_beƽi P"AXE5<߭P%6(H5!Vs3t8F:G=vt(z->Ob +&npHk@4v[sZ4mu d+5H BsG*c-"|@l7VvϤ(ʳoe>2nK 4a LN͆a$nݻh bstHnѱ;~3@]}&6}X~`BWPDZ`Y>j(ןtO3ef{k`;1&ff ʷIG\^sr_v(P_ux1@idW"\ٓP;y-n(.VNOa,.>m'!a)*98W.UXbȣn)%)7MwJ!kN _Jy1T3)Ycl3pbq\w8 P̏NUKBg|͆Ǽx%-Pch2b"?.EpkQֶV kϏ]܏3O_UK߼X>!;ULR8r+]nφ*)Mlր#D!׷ɁU,9{ bzqC ek9Ljs~mt A4Ff@[.1Ȧ"F^rt82\%DaOt~,xnLi q~vi9~&":y97,r2&kSi"MVY+Lu}xb= 3G -'!XI{Lm5~yª<\LAN/8{*58%w-odrnbiA©2k,#h2OMu,mԾ{ؚ2Y"Ð- x<]y ְL'/j1:cWRqG%pu*%ḰheW,{d\C:, W &AH ՙYx /3$9%6?j1^ SMV%OPն|tg7ŐDŃiSZf~Vavr`zIeѯ9G'C{9ǁ>oηŨh55䟓&Pf07j5)_>3?,PS|'&$$\XqWfib:g΁%O9$6b)F8;_Tъxq9G'JM'a ,'Je!YEAΪŹFI}o0z:2j>=2ᬝ^COXy"  C <*xt۠4qf8аps8Rq'l 08|FSJm4#g.X w' BCtF3 cL}\ rCZA/yu_^[)yvG#VSQ*U THw.A<-mX^v%0#d`U S:'-]v峢cN%CG9 "TF =U[Z f%:pgVBM|8CPQ9G=2nUW~/0H^"1qFYzæHL{ه  W1v3r3Ϡe̶0xjOQ@Vnۼִ?m2f++ߠ~I{H*zVWa:ym* PQCѲ359m+2yt7hg.qd#} y&|>21!JM_DCv$#?Vh5R؋RDh{֮gbm-Zn!e婩2todZ_Xa2*{$ DC:G9^Vf )7+'s x!o4Řar?߃'ى")Eȶ/0 ^Rܶ!QS+flȍM`ݪTZz%Z O=ɣtN#`D9z\NЙ[1q&;(6oʁDt[UZ8؞\ܺ讥 ~u ޜDy}O5*$IBEVAPD)k1}vm]%$})$3r#) )ykAXN3ܐ 2 њDܜ/ wb8e6-@N{()69ef! Fò4Q\ob W" kp<-5ŗ$vl@O٢F^Ụ:U|pݎ!Ƨ+H@#(A*7{;-j nݹɢ"c[?)6i.yw9< cZ%rl1KήOz;bc~zRvE+4.Zއ]"ѱ\&bɖ#%>:X*EI2PSZid0h J)"Pn})`HuZXd+la\xREpރ_{ E ˓Å-,qjnR~ZzM2QRO +F au> stream xڵUy8m.M()d}L35c:̃af1 l-%BIKE7K%E((ZWr?u^u>r3ʔV¢[;;3ؙM : b tƩ# I&`3Hc=` RA:l'ldlՃ#` RHTpbtRP0CDx=P(JT"m$H r xpqtr\w, bwV,LX89x R񰝓&r,xGK,  'ڶʀ`@:DYM L>b1hWI 7$aQp99NV7#.% $ -M0kh P$*0I`*A7 `΢99~KC?9:gT#Ab0"@ r38=#QW1;SVx-<{TWfF2Wٜx&ߜ9! V@pgAĄl̿Mx(F9D%r@d0.TR m ? `Fc8Wgc90\hD dC /D4L: &< VB7V} 84Q;%BT2 =Ąub I'PHd (GCt İ"EDG3 [ộx/LAd@a5ڸoƑц'صSJ @S}µC>x2UyZe[R "ഴN`#!iiXx`4b.Ō!:i,@'@d0i8O@wHq:rv'Y&q @:"k^ /6w2VB!O,"3I4/0+NJ${O9l|̤CBG'Ez qo ~/ffPd4 bڀVo.ՅgǙs   F屖W(\3vߓn) *2UYtፒR2.o 2QyW,ֽҼME^tfĭCZ/\mY}ɩMA 9,,}JA@&- OJcTe]vO}piiNc(׃d:Я8dٯJߙrJRwt\pWյ[7{4tW4vP*7sAv؜2>;.4xx̶fJc]!<>D|{tL Y1P9~ EPS)=nു6rF++Ѕ!c fYa'[?83gr-A_1#Lm'_2 G+ob7P&EE¢FQӇfca(Pk+Og\TM(P"E l5!#~3iAHa"w]O.q&JF/{+qeY:i{P[PLxR IZ,Q R̓/09.ې>Ȧ~^J=7(665#rBCSteQAyn'})jܛn6,i $y̌%\̻#Nto;z~V4n3JT}F+j&3PPm-)ROf"d&Vjm!F{2" Ts 1;2Ml =~a73Wzp#GJmƣ ^{%a/G)+ 6rώsF;lF,)-l}b$RG+Fn@dsdax\Q$ųAk eH" r|źc!3ӟIfn:':-9ͅy{S$o(miQ1:}%wm2n#Fc6{l)ςjmŁS>Ii2;SUL2-D{v*{yX[oҲpҧ F4B^6E} 4:>7@W|qݳISqv2LpY;0v$VMBqmr@F/yj ۍV(k/g}I37f}tG< hrQVџdG|ƃZVٌaum^d24Wbx|R.?,;gb F.,Kuƽߐ'<%1ԯe>xqLi&[CԱQt֥oSFvٹf m^_QEΪXm74 Н>s{#.WeKƅ b Ѽew]MJTZ%LuQO?^zRA}ﶻ Q:RgU}x['KB'ZޱjyfyǞyՕInuQVL1wO e-ʈ}~}r_dɹu娽yM'd/a򇕣YvsoŌ(@|q=3ܑe`3_e|[uGO{H(cDEP.DiWn\?Xyy1 ByZ†!\NnAw*,R0(;Rc72e+GT\"TCv׉\۵t_=OV_#o(6eF8o9GGiϏ}I˵ƿtavJʾ$LK+~LY]U+\hz_$LP*%\YhVM^pXxy^$6X>bq^|yڎ2o珮1Ҵ^q}4ہ6zDQP- .ީo߫=uM;5=E$RG ӠGQz vMn]m /5=vf_ +RZg9>Fji=v ^FxL WCΕ9h_ppN~=Rh ti߫Q yҫGf. k9&26q-xZҠ{%u׮P GrZ_<ѐJ-~67?D6S%ͪ}.kgi+"+cܖڢ|FT:sxcbK endstream endobj 528 0 obj << /Length1 1683 /Length2 1296 /Length3 0 /Length 2322 /Filter /FlateDecode >> stream xڵTwT+QˢDAIĨ+ D+*CrCF83!ds*X{ł`El{E]ၫxV.]NN2~eX+Qq0$'Bd2M8RK{qaAQ@ ? b NFP@] s\@ $ *g2`  +f94ÍhD'A&W[_WK&+BOϱ[,L.OvXԊrf@[r9;S[wuuӥvMu i#!AfH'GIΑEUoT&5b){k҆H^DFvڮNn7lzAyNPq鱟Ţ}_tU^q aJ/鶍1:2,*%jb7g^ ?ufƟSvLx*y߹U/e֤);溼ֳ)6k~N-픸^єHx7}|ɓå[F3DtMɄ2mvL􎩃c [7=73'w/ ,?rmm'[f9ou;W=O 91Gͱ#^6NʺS~39E0wOr~վGNNc4>GÞ++䍙_Vb-<04c=uλ-wQesw}[dz&^/v_*HR;DQ-Ni"^Mcns>%{}X^3$vhVmܜn =- ;Pf.qM~[ 0Q-qc /q~ސuíMnbpӄT-y{Ȟ QaE{φVQFyCxk(J>hr/QsXݽ%&&6r$'{vv5|e˚ǃo|I┳?qIJh;.<(!;?kyҊ&` Oq7M١꠻ɺcy[;7sU.q/v0wO׬ZgەhU׌B.yT1E%f9/b|~RE;hSG-h͝ OENf~5qZrMӵw&&WZG]O)9$3yWzSwbomuPZtAɺ_f&UՔ>> stream xڵTy<_-boq93Dź#3 3y433fƑ-VI(T[A()HRұmwv{fvv5y}>9.I=f <#D2[/)Nah$pC]!t<pa C`) \4HFa) @H `8ċt`)_8 '@20-L#EqEd""ڙ ˄P( #,0(`?/x.p-)DbnDIsq<W'6 (?l>`\QpTxN7:Uq@QT(~͌`>R#BCXYXĞJ唰HNaHɏȀ "X٘HT@'(nx#| wl$;1"h`2Lx18B(p!`h~8UQZ0-` dp< 8\ } |A'GC ŀ݄`z/ 'Kbh*8TpB{HĆİſ7KoHb !"sGaM{1Nhd51)MDȚXMb8KP,_2X``3_'CP==:[n( h`0m$B14B! & hb8$x<ŤkQT)"* X0hJ,1m!&(\2$4P%R8)9%4oG;bBx" H}BBDA ;ogHghgg,:Lg &.dɟXSQ nûbG71H=දLdGy\ڹpSر8*iY1~UBn2Z@IO4SЕB Cm7];XIe'M-zڻڎ2bWw]u|<Ӡ=jJE3;ͪ7hW 58ukޛ.9sjZѲ<ჟِ8X~ʙ)Zfu=wUj-Gs08`JASMy9wQOͼVAƌ/O gsgmNt%D;ei7޾}f/>VXjU\n'օ[CRY[2>4ʢd'cu޿-9ԼnxxRq vS> J" I9+zTF~߸E٬>커ޤ fw4ٿx/K>*$:߬n3?]ْuTo~dC0W}u^ٙTr]O2>h{UlBNVմ>=[*zaߟ1؝|^q_UO|{۷cKvTK[̷b+:5|6ƸocIQ_^zNY콯 ) 9oMtI5itL喬l8-!hִ?ѧ¼bNk^`~=Y8G`D;-[LZ>>5@28%Uzi.h@IceG3 r<)g> tjnk5o̓"ӳj{ w^7@Dw8\.ϣ՞niY/F=>MkKO}͑!QF)z_y9 f]MOVYCXuWRjN>, Xv7VylK5M 6gd/Ygw)licۡY>ϣbo6WT, d r#hN^PMک6Z檓ݫҁ3gb}sI>vZѨq;'R>Go{zzRG2|l*3Tyn8Q$-d.6ir9/}n.=ǫ}HYc&QOS;{dwv?pp-(x@W2L-\xaКȲBSDʭiUlA3 yWr*ؔȖZi-g˵N?Jŷg^`n}E53Ό%K,B /(&\^b>%S]Kv%'}bz2mՓ+ k՟0j7QtEtU<-^,eWG\XDW!J6{QG v}:_qmO[w]/U9nh9 +#گ_5WU5ne7_toz4VIM*lrio;PQ7}tg%!VfN7訤N%~;/-L;S<E endstream endobj 532 0 obj << /Length1 2202 /Length2 26213 /Length3 0 /Length 27562 /Filter /FlateDecode >> stream xڴeTZ =@޸KƝ%8!Cpwww C#w{gV]NTdJL¦ {;0+@N^^$boc `p RQ:vbF` ‹HفĦc<lbLFojE x'o @`dg  noBKdadc7*IEu%U:[`U{".VP4j^@v 'sFڛO7?jjJj\ANΖ77f9@k;|`fvss8N@YX:읬oN _q39s9K3菓o|szC?1mep+_rJJr[#K;0lvq|K  'UNIo"oxٹ8{7]3_A3K/1ۿuve'7 6voOO`{'hk;{7;OM],]@bg&B[fX GĂOf变 >^3#g ;|o 04UA+=_7&VuAndȬ`~npQ0OG F,;TlbW%ͽ HJ6o3w,,,+ aKzk}fqYyUyELM-l\#''#D)`x)10o. QrqExbAo: .R?? &'KgMFf 7[-aea061r+7?o7?|ޘr- y8XMfV?[6o5#7[EF߹ux럽?,:G7Xߘ9Fo!w <\Jq|+oV_Xk3=V;[4-M47;Y벼7ߟ+""^L&fsм>j67 ;qeބ/*1W< xZ+%>N/C,oˠ.oWEcђX9uc,k+K*.<TȐ_+$;.hk%wb|ŸJ&+k]υq+gmvt_F' ZŽ4^;&ӅÐ}_Pڣ\g'run>Yuq|y9ʝqrԨdKW*'b#eB~ʤgv\f.5cTjP?uJ~f6.όɿ8s3:JjXo΁1-B (hP*H`3E!~}>ټn]ż; M]%Ɠl{:+ xQx (Hr78Jۏ9y cO%'n*?n# BtEg ;Kb=,"7uOr\,̇_X$qv}U *"fUqcF}͝l2oU78@ Bh_fu%(Xo"Ax?ҔՒ{D惴[Ti5N;QGK`pKuf gMnH Ͼ%x-&+=JqO7n{_/ӌ^xmdnϳѻr պh̲S~=fwKYtp5v˂y#QNƄ§{_erXr?̫bʃ3CRT$6!kk<688zX*/wƝ1b墘N0Jm&P5sWyUq!q _lO{G e t>pLW_ްq1՝߼˾UM7TBEwo!<$HHàp1PEܤ{=oh%R$m0F܍$iyN̞{B][,,'Ҙ6@I Dq`x`+J-* jΨ;EM7}'bj+~㙚IQ¸ѩ `(g>΂˺vf9duktr£(#_*G'{pqQ =,3kEo⇚̑Q 4ek@ջ׆%} uCEp{VpTQU!Yl:5(O||$ }%xL&S̡c*Iz N6>'+ +;- |LAfEGu'8ɾ JN <{u8^B͕;]xar%ލA"Cy KK±kչJYՉ7PrNN Q_̀sPb-=A[)<3i }eb٠2xcEʀe&6VgcGpmq2_mA˨ij{"&Qzʶ&C>y佇Kx~W>g̚%}| 0Rl_?Q4HY'7 y8XUpa>}<3? rCi|M`""q!ؖ~ѿDT,iY?+'g+erAHw'2]O [ɹpOn6v:X]oS@MkorFb[MqtSt'Ŵ\͙esyri,ߍc"8u紛hFQicۅEi\W+",xG`F)wM:\w6'hU 6jDnD$uy|ǜ|z;cK-+y1*<`#vg Q=hZ/!$#GUX a)1֫;A_ xQ2ckyKߗ[>ZNTס-̣LFjMk]4~iܭqeIF`3r!YȡՙIc(/Q9&Sk˴ >^uHABy}Xfնn{!I&3dRl8wڰN hWJj\MBu4o]Ch-fϻCy)kp P9ё9 6H|i8iLrZJ{>Ҟ?}=M4^ oj;)삲Y٤9=?;džPn,O^Bc?v .y E+)seQ."/䧄O 2ޔ^FO DW[) ͨQ?ڿ s2V{ w-zA叞;[u jnm]Z)="8p8ʆQ4+-=CdD}o\|l9Jly?aVG0O`ixd/͡5m3 t~/ s8o nѤ*̆F4GU7 Z:cY$7.ՓIK&j:Ӑ׏6 : Mj36|X㙙M+7 gFSOV~!㇥n큊xۊS | N1W¦&+d"9wjRDi~Y(M1, oCEr{Ι~ȴyrzӺ=OOa'Clm`j[Tʜ$LjQ˸[]8gbrqWߣ>SlZҳ}9y7# *\I;pi &iSWj9 fQ#*xN/q"U5L^WOIIiA3aMbIƣSz0$ c'w"r}ܠtbb*n|i)|w-x2b_fMFSRˮVCh~cE^\?"Q=$=y>{XC'%\Lx'Iގw%Yv!B'v_pv!P&Iq\I,@e ݲP !ReC'LؓjE=ۿ#p{ O,p7bqaC,=#$?\a˱١cY0pk콨Jh#Sobr|! UG0p34[Rt9Ѣ1FJ)-hߤP^=EKlоM.0~gƱ]ii iq\HqJ(7zފ@ygQ"vXF jV=cۑ0C~FNʙTɖqCAQbKG]+h\ɈM6_{V K\.9K@G7AvB߂Bĭ_Lz>L&hZ)$4Ox^Ph(ޓ|)(U3BC}2I.W E L~M2 @Ǚݎ]Yew0wXhV}ؾ ky;Z=Np4;Ag=?سYXtvUN;:"(4&qtտ"]lxy>3d.6`HrTt7KrXM_n3}mE}HgVu<k~N'9y!`ޑTBMq/:HRGKZ$Uf / Cl9,˟< L!~?#M&b+cMXן8lh4XK:IlvCX N,xP Iq0q dgJx!yH5yRE(5&>?vg?2A'IXPBᙪKb^8dž{S$>t' eWr{,r"8ԫK ^s5_`2Tll7#rlqc'|˙9S} Ҕv)r?ͺP?8D63z='?/-P}ZC18R7X%(}l96&Dů5'ÿ-v]@QS%B5/?av(oS@:NX^lf;kZQ:rSJQT)C r05fɒe$vb^.a&w֙ qԆGvUXq1!PP&G6nЈX K88`ڎGZ-#laԆ=5O43lRШdv=dkɦ|-R)<q Dc{ޙz|Nz js%C-V2>]˲G#Z+Xo(3I<3'd&8 'ό+'K < ]I SO+^'!lPDY=fk8ޜޒ*l\j`x&p!^St=5Uhcʕ]"9Z 7nr^}Eh}QGd<{ᘤ 6hRKgT [[ׅ@ݎ޳rYbT9EKMBItxXkD !Q q ׫v`YJfGޅ+x|DZ|."+yigzc~mLcR1iǯ.L`'lN og!;4eΏIyj pԱ!C3g{~ܹ(?`̽%y=z K\qn8_  )Ic 'z  bעn>b'*UBYX?,A7IBkױjd뭍E׊نYŹT,@glXj3PB ϫN ;dG?$ĩP}>{tymfѦC`=}Y#:r6Xr#e6[S6$G3Ckw6U幜:8o]gK<&؞ނQ##g a*/g(ߕxң“_ȅxDC 5Ѓ?}J@f[Naw@ͭ{CT{l^ʘc+pe aoC9w[YX[S!Rb4!38CKJ~rCIowD:lj msSyCq 0jHMmf ::;z \$f6; z<ɱ1 hH|b6b@尚2-`vwZ"V.>(q} Id% 'sbԃj)&獝 +jl.g<`{.rd+QW"&$Dp_֏y)MVY6EBA'b cf [u5ᣋpT^4S,ѝwZ*&, {-6prV񱬷ARMd}4wי7|2 57c9 w3q{t?~|MP#jF.a/qy6NtQì ǖNo,.K~3`Pʨ &ΉI}e1#Աлܽz,AkN;Nn 1 =N#\cݏO8mP}J9K% ɑNW8xzaK~L2?o=~vqDO&1%YLs}Fo[VTvOvTg>FI%As9=- ቆ8PneG.q7p@X5V(\x K&P\`  HU ,89ƤnƱJzH]h|xn4PqVr$|/1F^qQ_?=ui.uHJ_##ىhԃs KrȞ/Dkԭ6f^۩~%ݍ4ζ`[ն R3J%*R++KL+T*QCl\E6k rr;nDA~dxH}^U*{?2i>` v}U jC"]sx{\لX-ԞCr)5SCI&d8>?mv~OڸO Wk1}MHzBRg]'B(h\C |륀vɳ* :%f^^)u}:*5)^Sֈ!<ڮGl~TRWEΌ >Њ6_ 9˗5# HX7(`rP\NjF]Mʭ\QHM0 i>?uU@H O"$)s>tƨ; YڶYu/1yW,B^xT#-!|9;$NG $#a'vOLw7? RNVb"}Ӱ[nHbkNY9/]h A XX,%S.%ʓ .r Z6>6raOw& ؉5t9XweY45ƥ{Zxl]?Ey`ЈB+SFP{JLL:w~ X U3E+>^rV(pl s٩p6FDxJK3.ɑuyY$d#90j\9Dp-`\nSO 6~6bdR4͢w累iߟ$ևf!w2Gbл*7Y/! ;ՕaNODZ`L-q䅶<6(;VH\ xR#{mz1ߏl}(DG AVyYА.4DLd_-;QuOW_Lr axc tTmfL8ûHf9feG^s6)j Qh5QޯV%ETXTthO)ЊA'ߖN[#04fѠTx9 oP}#0s{N(}})8FUm 4P,.B='V4fe&_؊c(U2Pjn)Дq] Ixf^O6dAi5qinNqŠLd j UR=Bۡ![J@H9R8qPB#B*W4un~2)h$Ozx9K0-g#04(јBlwk'*SkFFF]c>F _ !xfߑd)#<\/mpV 1M}w~SN ae~[%0cْ;yܟŸFPU:bVv"vbHr5Iﬔ VR{r]X=vEweuoBS03l&cPf$;HJt"_d|2&fI>M`Fx+yE3lz)D"+Hǎ2H® u * !^q("Pp2Vl-B/!wqȷIM3,n/aqܟU7\V9f; ~srxܕ,` UnF]#8 v3ZuUkm8θb蓾WO.AX5yTϼ*%%bA$ |q$k#jv$& MsRmֶ̰5/&doz bN=7?6ehKy~Kuک:.Dk\Yk_.Nb)p ~m2X>$\:@r 1UUtFok_  Lz3ƅOj;mF+WpľU C]jcWZm"v! 076UCbPsn y.Н|_͍;:'[ߒ,n/La@£KpPR^Ah7$QVxf0Ϭ!@"aeUs5Nq>kx!,WOD~i84t,X] ܭ)I%ٯ7N}zw/OѮ1on |3[97lͤ1c"9!q( XO6v}1dtoWF;qD8%A.)[U~(Q'YP ı)Q:8YDjpkgibۧ/-$er ۑ!ڟtw7OIDD)_k/3r3vaHv`P֗_/+K5㇒x:apKֆM4.ItpP3IQIaDnx{;V^YK_ #˄ZAUF4i1V]ƽCFƈ&Eld=h7 Սy60՗ əzTf# W$)?PٺS i3C? h֖ u{~[AŢG!]YU|ϖ(gN]8xjvO ! ij%',ݼ>> ʔ2Ҩ1%jbGMN8 h Lbqd?6`6+S;|W\OVډP9*8V.zETI0e}IU՟>Riڛr[;!D9-"5љYa .׭Y{ɂ4^sJXM I<$~q|ؼ%aX&&rGL8Jcνjx*D,`{2NA3_c/ɻGH4F&Nd*k!d)  V[3+^~kz)A~E@,սN$d,fR8W Lyz|e9,WUP4rl׏n;ȘaZ6*NbXX|󙉎0Rŏ^"fU`|n:qe{NҎ*uX2S9,A"ݙ>[l!ڧ~MwnM#F_d{N''u=(p5db[J۝qf6VFr@^jQiGqm8gsCS>H͒6Pԧ=gcY䗰)%Emɡ8˱!8;ڨV ^Of!S,I$ƔaauN~.LâEugJvѐc=AiG6\;#1= 5`m>2l;=8_8XwKN7U=;6v5]*wh{X` n+xEm߷'ە)[ąm]}`=V-q%&AR*G$!"zz&_\}8^3P6Z.ϛNT[en~.h>X izp1N/DMar2͘1bN"TWc%9$fZJˍT>ʐv Kξ|(<,~/>9AzlTsA~6ط#V́Q Ϯ2wگ{ρ[-'m>K# .κ)Ҿn8Mx%\sg{ Xh @yE*YKu`q(&|7!%nϋ1'Κ@$d8.kتABk, Ό%}ͥ%6%sgh;{;̬Ų;>1S+pr+Jc >N3>HBwIGaEbsEfaxIyw7dd萍vs|2|(%3%W3ksd.IytJզaN O΋B*nj3uu+fHq=  ]d2P Cv9{R^D4u 6M զÏon0.raI[4Q#ZĞjК( !cڎM;&Xt(Y)}HE ^ILƤVASmd@j@i ɟapm# 1;R */Q?Pȳj(uJMO6V=Ϳ?p[R*S3Xc9>b.hק̔ z{!{{u-ǹO{ټwiDwGl~#Q\G4(*լDSX|HvƊū 9k'șPrlleF$e+}݀[7_<(zY0/TjbdT12Yi O6]wOl{쮪G{?Ȱ<~ax($vɸ0֮F qWu,ZBCwvqqýoQY#5aߋfTAt8@G=(ŸAJ9S[pNuˆtF uQDt4ggnh)A¿=qic T/Q ƆRHN 7^scR\ab~s߳ p=jo|~r8,p ÓwX"Q͗9lmISӗt>NQzWZi\sbE~L<+e$6U^4cKR>\Qd3wl Q#V]"|%ԣ?i<ܢ~vCdD!+;/@"'OYgJ͆`PڨN!# Am?e9{C̎$Ml]wk [c-Fһҭ&L.<| m^rh*](mFJHcJ߳Z P2O,;mgyhs+Np z=Mw"0-j:cu?oK׳]㡘;5I!1I d56-vݤヸv9c6G,7w%ua+~ыUgbY2[2"ٙ=kg6$? ΍vTxyj(''j$J4qb$ZDz<xS$+m#PDMbͦ\,A^N8UM!l9 nu7C+u HsI/-H3 i $'Z73'k巖ifܐHiӴtBޓyNugN`$bJ+UTwRz-MO:;IWt<jwT $s Zx9M򫆅2;K-PJ*=DZJACD'\2~{3WK,`@Ò3h/61^4FN_M6v9!j*UɊ.=ӛhs:Ϋ+(~; |1S7P ?3/s]k@7:ztdKܫ$2RĆ"| e5!؛;`?uNѮŶie°c %~IdO_TaM1(LTL~MSZ:3r[R7=XƗć%jnk;|]p}{䈣jTݛѷ5ZЫН:Q0-<aoBvĄXWeƭ,ptjCRg`&Oz(D/&o4Q[w"8 /{n#h>6q)>4,#,a  o(nk4Qz|2\)y ֋3{F^<JYW(ѦSrKW >}83_@q,IvnjѮ;ޤlO  àPe䤔q(z9x}xpN."k/{-hU)e'E~e&K9K7\pF9WE!Ej"ULvSʻ$O".1CuV>kPGѬiawkNdjSϘ>wRp'H{/q#vȚUx"Y-'uH-l! ͺ'p-:='QP=72 -4L!K0ňAgs6Μ4{FϿ V w,*mbBwJ.xz<.B2K!M-u6?q3,r9OtF jfW|}ÃKqacn.]NQ23N}M$HCAQ6US/t1&;|R2 6S'ۦ AKը&Ft RFeH!*翜)0K7CEckqݸ:%zp撅&r-9~9s8u_269_wX*Rտ$q#8cL옮J*|&3rJ2N~cE 7س!2;ŔUBA =I:2w|iݢwANfgRbGD5WmflMVx%qN`uY퇍O)2y޺00 _UŃg ,-a/l~kN#<ݥW9-S9P;D>?+5T b&^ƨfgB@{5alwv؆)]U}⾰r>=RxI?,Ic|oF enJV&AJmJA1?Yl^A2ЖlOw(vHġ*zYE^~_Ss&-ۗ"J㷂vM/ /eXgl#wWz&ǒm/P3]ՎAakPVbg5Mu3=]lGH_590RIs,Cs.UeS&)"Ă9[Pk+.O7ZKjfEFsmxd.B-?|@M@zamlۯSntc.2NJ݆f*E vZnn*D%믙4p;iq\>>YaWX u:o7J^gP;f"}c7:|/# zq_Ə-s-?OϘ?n/uˡ^"Úvbl--7.ldOBXOO_ϩ072Cۜ s`iՅxjX2XYuvZC󜅓?ްc'%-爠foJs"MVtwI ,GX0)GBAJ`sڷ*/<-Ḅ5>&ģh a])L̙hsv[YCd(FY@Y" :"* og#α%ET i/?q.m!,XU\K2Hi7Da4߂)q|Р4*qLJMI{Qջ۾la-$7ǂ{k7FP۩p=%ܾ_Y ʖ*{ #@ӃBtA@tYqE4XJr 2y9#(82M%%WkѝC 'YJaei:q:-j%])"vK4=Tݽ{h'":FAu^~Zd6i$&U; B*|ji N$MO1Mr+`{)_$Nmb{c҇\ %R)MSEg"G} 07.';D^hч괎<\˃Qbn]&rso+ШeekImv)13\ѧDN|s8gz6:hY VWQjǷb k\IBPqӗZ\ǐ?TSu[E P _j{a,*@5<" ZV IW $(.KruatŠb;o^L>s?3VDƎLYDs% o]639gCj/Xf478S-T"\ kƽkAU`Rs٣,M2g="C<>6QJKM%JE)R (Yfae?as^Ȼ2@ Շ7'%l 8U(nٻx8ls>Br5%hJs@cE)An{gr _e]bᯨfy Ź8~GUn1^=\E(j6fJ=ClYٌr9zg#ֽ,@Ifr(Hbt~dnC7S"mt_EG09@uBaOk`K2,ۈ{CPpEnʭfn!m땷eeK7 Pŋml0=ұ^aC>`%7÷bw쿴qRu7e. h;#I8qhw4ÍH!QbbΪlt/|J^~ CtRh`M},Fo^]Yh -5fhYX\;kYir2@f\SlDX {;]Y]՝7u{k]Uw!J 4@ZK; 8O^]*[FziD)x b]J*ب(Rȫg9B&$սDkJs|a`FAadFxofy1*&zJg-s D;CttZP)FHt+}C-Bf@9D|:PнvEbYy9l"L&_}ӷ- "^<<5+w>~qoMVfj.AoN'Bd-(Pv#u{V ֽT#Z3Hwt%fwHtFJfʢh"{,e&<]$3pݑ/YS `p=ymR^Amz+) .mO1̿^x5C 2b!'ejoqPN:1 +IM:Z#%ȖV籴񽮶Ǵ-a2戎p㙾Bئ>_Sى[\Dx wD>Hyge0Bryf4\2ZU&rǀ@;AMaq=H@*a܆b÷M!^G]1[s9&s`Q]n-|xlD 171_xU[i⿥$hHޑA!*:Lus9V2^@Ub*FDD8Z8vrbh^ә'z'qZB8 ZFzoOALiGz7+M)QL]b~L- eYu=K4{hXNҀUj0H%C> c ǎQ4s 8 _n+2v>>"Aˑ  @$1J6$A<|Ƿ.t2j֖ (,NI0^مV=:4ku կ+ d^>{H&s h!D";i诨7Ea cc|w3-vP址j{]z LJ79\D<j$֥@˲;*X:AЁH /?`@lU춛zTQpߖ\Tʫ5Ck΍?w"_ꆡ b8 H(c:x\=w]θ1p H5fG\Jsȧ~\i.HGF9!Xoz쟓Nn{ҜO»5&秒Ƣ4ynv}雷sPe\ρ%{F; IBXIfOYhT4ᕿZ7}Ke^͂zPk6W܎)~TA[ǻᑹ˝hl$ϋM!%UIVnHYoov6-K`^%Tb""aS(p鿼8 adX SB7aGM ăV\m5ՇxA]aq/ڟhɝX3"t+3'֍ƫgou?m;Lb cD" ٖYgL1 "^ /(,CQu/tLi o([6: D%K ב:9:n@d ".@O5CADJ [@p)afi54!Xjo﫥6t#El' 7l.|>)9`<#MyP#%ͻ9ο$mTUӋgr(5QC2^7 cF2RvpzexxB4QDtYG--s_yGϡɹՖҔI~ieX J^  Z W AO 05u2Be`ԃWa3yK*Ќ!2-+~?C \GLҠ.od. n֤JI5_ߋ%}zrsFq`_E^O!AR[3-۷aԪҼjfTdb>x9T DK[؛Dž+YZtd'pBO|谱tSӠs%?fom-wH){S DNfQBBV(F&CN2gc[μ?ԍ_YưVחׂzUư}dΔvGlw{*<%?1HCtj(L ;>QS;HL̿#bp5cO]c[kHb&㥯~'b%kƳ,si6\nӍ z+Z3^h0Yr@W;k͇w#=Kn`})$^Nۣ('c[[M{V b%A__湶ƨ%;V,Lt$?@4lZ_S'IUQ R1Tr:5#N˙pA&=d!zE> stream xڴuXߺ>LH7HP ]54 ݝJ ;~9[>ߋ ^34*L@)r`ceRZؙ8ؙYY9ihĝ&`k [W++2 @:AS"ldЙTL&5di C\=-cp01[ gbflk 0Jn50ZY,@:@ZMYSEXjWДfH*iHZiMu?5 H% wowEI Q*l,{\NֿWmo qpr' vgaqssctq3;8Y2;S3yu!dlWߋP6P q. BwLHceL@fC ` 4W@rw-]ҙ /nm33_ k;5d@Lv@`w?ֿJ(@F` $\R3o$!<@ +vrxO06CY. pK U3tlTz.5wý,J`@+=)o;{k;/ mZMKg,e4WYIJ`苂,퀐5G{7A0q2f 3 wMU 1ɷgd19[,\''dVsq #mtgP, 0X88!^Ln.oѿ7EA?"o `,EdP x!QT H?AbA?ґɧAiAt HG &F&g) 2@Go¿|fF\`fviwN{?UB27䀴f`{X@ GR.&v@z).瀘X[>@j dE<, 2 R }ۿ +0gAX ?4A2\M?, Bß!1bcG h9cm9G+)AoSd֏£"3߱9  Ǖ_AiOX.Hk@{/6@׿ք O}6L OO\VNB/H ?#eo!C!Y=uS3$'_Tu⟓Y`u-PrDqX!D #͟/o11w/&NULx8~oRnp5׍r/}@3w6iM徒3p4|UxB:r 3g: $>nQZ9(Jthq7ZUEM|}%E5+( ޗre%4:bا^.R)+܊5vv_$$^ܽ6]f7.w}Vsr^9J%bS9CV$W털4L/*ڹ 6}Xaeԫ\=jƷd~PMAˆ?m({mm9gƹ jպS83GTsBm{*9_jE HܠJ;퍚1;3"ŀ7as4O1cdtTCW8)\NM^S]s^_`G5]th[7AZ$4% Zi=<(BmF U#Z _̅{3DD~ʢ=FV}Iu*yoa q=uw%K_tԣ*( af/Wc /1)-pJxU*cSli/&md#kc_w4{@YwYHH@n1R1P==e ݾ颞pf*L!M{ lhS/cj1tYEFg+ikc.T;r).gҴ 42_̣ R~&.AFTXrW8: صyF;}"wszD2 Bf\|7U; Sښ.1X FIѴڳ6PdSP9 .򔝊>Hz!\qe"8rQD4RF n 2慦zߧ/7cͬ>9540sK#W fJ8h/)ٷtqD&TZ]Y'eC=z[j[Tjzlo+Fdy䔎; 8j;Ŝe=˼੯=0o^R=t$}]p:zU{_(GҤ"Kؙ:e6P/SMLܜ͇›xysQʛYJl:SݾX">e}͒Ǚ Յ uNc'g]22;nή_ɗQ`:!0ܶSD]-myin;Vw${ڗQ=ȘF"ہQ)]G@ 5/U/d c˲g9n-*wJoݙp&΀EH8\jl6PzGȠX]VwN&j^R\g$3woE&1Wa9ZcfKG \RK /|flz3758 S4rM[һB5} i᡾lP,J7 COäUE+䝔gG JXfg>P^MBvs k@a8ǮMU}|"g*^-}+޴Z3'ʮhT7n^`)4H[-Cfp.j?I*'=WˬKyӬ~\o?.Il iEeѽ_xV7&N;JOwqIq#KVweb;`r`;njg[|48,(z7U;WU6beh#?4KJ&RY7|f*9';i!tK2u*yͱQ魉i/-ŗ0oAhp۠`! XQmJ7m*SO󴙯{~[zP$5tpg,靥9S/tNPF~󒽢:sIxMgdY`v3xѳl^x'}AǕ~Hd ~5e@5#ڏgU C1)ʯ2?=y`'*SvF_0;`3D:#| E-%/{J4XOccKvTRߩ~n-=%BQ`iCwŰ~\=#e'`FdBe껨t w<ڬN'd@ 5He$ͼ[i(gottɎEtvRDXxcQ!Tc`5gA]OXW?ؗkvgOZ0"t1Qqy^MEr|:qfz]ѻ'}_,y{k ^|`v5<#>O,o˴#ɋ:T]΋Otɱ`C 6AKY,̽YJ•-k)nKa1Hq>|3u*[+*srʞ>kOu pG2~]nơsMABUFZ3liUJs!@FzJƮ\Gg#*ZVa,& (}[,tAki6>E=p-(w՞eUrw": #E#&٧(ǰ7'xjb|DŽkϢ@47sᮁpp9+"ƽP$LoRŸ?EhK%k5FjԫA%?k*$wuxe &r*י>Ol::^>E+˫-]D|2s!^\?oq Q%+%{>>^Wqk;lm:r\\cf~1n?w1}C/ G0[چ )5(ڧ`M<+\ ng|Xڟ覥Z/tֲ&NyBҾT]1GuE:Jl.W+F,rZg׃wS!=}43-Oѹ0p65o>LojK叞 xA38j6;xTpF-JH;zL+r_~RA,ΕQ#yV&hm ƔՀk\B%̹Ln7w7.,485>{u:S z~#|L/.?gGh343۲K5OqOntaF6^U0O> l!䋂\+ÆSShY[ P(2T}'p!DP|s[`GR^hv,7~aW9֕U.agWsP5 `qQ A⦢ &omp75{,$+l8|8pC۞, wyuF*O:.~P32H#wZPo3~#OT1Zgyf\W:ħLb?$w]rP<Ɠ2dy$+|kH[ue^CVZ&P`㊎f55&i0˨Z6lAYƞe7Ӆ; {i}_xx>騶V;Yf9b9;+.ry˞0_ gXO<fV.P2e^)mel!7B<ܘIG`h9-B9a^}z|POd01NJ_ھCӐrl֧SA&v00صyuY]nUF5<,KtN܈8 b%S?ҥR[Nڼ 珱lYŃ4&ʟRho9n:MZT_]xvbwQGRsz.,My]&ii8 S Y0i^$N-2wYnB)br}UൻWh V:N:"\ѹ9.+~F>< G(J=>$t׈--}K1HZƥug`C.2s"`͐6r}{ P _ŀCp,o"{deEU7jg¶}i93[VOAt=`B<z`sactb.Nwl]?Rwd{qdk4+EƏ'YQO"v%2[8$6Pbh%o\GL,hZt&槅\orxB5"g_̐JxtseY]^LMuRjQ'P/*}]:v>2ߍWHRĤ^ vn|;Bc1ɫ |N䤥**RAtvkhX`u>Q9hT6U'JflXfYm^dCmcO꬈V% 3DlFTЪRqu8nI"adTIΉ"F)yW ->Kr#(I1!w‰C2kfs"K^':b25$&^ fagwa hhLKog۶#m+L.ss{RDͮC TTj[_%mN';ȍi%7RH&MLK(\__?ᶸ$DU ]GgNͰ~zîmN;M GLglh |lexћ7? aIkX?'s-L;&/Y܀_SW_/Xwp̓…8LqxJ>b|ɾ.#IN?b[նq< ^Ra+V~[h|zr0u.qmWO=juf"M_Qߥw׃(y"{pB9^7uB:%g?XcY/Y=G< SNA$v>.\7:^PVnuy!R^M1-\^h}i]"F:eR&b>/V ,$*6i㮛+tn@jܡj0HƲi(N|sM*M2nnSj׎޸iyH+٩?Z\r(lQ-6*@VK /X;'gumO&&`~.:ؿpem/fd@иqe#봨x"IyV9@Àl_rDh58Ԑlf7QX֟BOlKK|w f=z8< lEt[=,  EL~x?: E5tF7:1#c֧5$I)˜-(:\锋qtִEܭ[i׵es!ViIމz6ޒѾ+R$ggq1{;jIlA%PI,5\>"is~0^)|cQGe!gq }2{>8|Ji`LdiN(Z+&b(BMmsI̕L/Eq/ȮdH{wRV4QE5因f_H jHa,BP,Lf5EO =#QV(YYK)6dl3bK]{T[̣ +~Ŧ Es=0^Xz.yWaAAWu{@t?D%4>TQ02SuS#O':CG #{58С)xG*\*j^A7zrqvr SXoX$M06=e=2kwlwMv:= 8*Z'-؆ڢ?JN*kQl h^#a}/;~}RnjFzӤs:!$5Yw]g}E:ԙt=P{rӝ'C~#Įj7SP<޾S$GHY0=ӫLC# $,"ыT~dCix^0ŵ~e?S.Szk^1x'W]Kz6w\WydӢ->34aM/NwnhJS imG/Ƽċ)*&*\(SU:s^MM>r6c`7I XSɳ1I,PVwLM:d?G7`cQƫK>?Nv5޺iQƦ͔8v$Rזvnz(rp4惠#ݏlŸUi`Ѿ?w!ݯV)T#])6HGUH>WFڷ=;T2vXaIH8Z6ug߻N_kE"(7]4OèV\" l%jR60>~O{5-,i`=˺MڗXDٟ=X5eSwCR-cWZZ}rj,8r?G2}) Xń }]mc662~MXQ(㑌>BD3S[J+`K!˙$بXAUbJl8R'kL*L `tJ`:[+upʃ%Fwcc snl)_C 2EY&ax@OHaGk:",>θںQ-&PS=YBmnBvߩXG฼)qc)()Riكu(<׶pBiPc!~%8L JRFat쾓rC>d-U(݀Q4M*a"KC )'Tpq^:0Hbԑ֘hZ];̸G _>FƆXv-$v'$'}+&ynJyNǿ쪜AހŴ=;< Sa͊פCvB=R^Og Dn]Uͼ;BSbc}I}gIrq"}(Ia$kMLhv>Qo)"ӅycY;Cd3{6@[CC.FPt1=zz9]P, toaeԆ&ʯ~:~\x4<'Qs%-Hu8⯇?]:nA 5ķ0$ W-['.)SDlCl߀f)F-I /=LmvUZ aAJm6OvʱVVa4;/pYwP/ߘʃΫL))06І !Xl%mHyǗTV{)1}w u XE0xعT%~ZJyzht]%_ꫦ֭Vo&B#Jl5a%cڴMKM jL$X$PlLngl8)CK;Ib'Q0LQn8w 2h+rRG8x=qݻ{H֑a!?Yc!+wu* +;HjI74Ck+D&Kb&1]"e>oՈ}-_^[b 8~YRSβRHZ蟩\s,7:GC3Zu \=u@Bs,}? > ZhZAd/ZUrG#XvJVS#;!IcAcSt~!.#=OmM.{t}SBם"aZ/_ђPHOv㰏<6yXAkh{$哖ƒor!2>1"V)Y"QaxDʝkw_jBE?ê~dB;ԖsYW`ri{kk0,;U\\pΰQж&+JJlS|b'?ȧ8j7^mbun`_eߴQuT+A~Ձ`^DTwskIw4fձSZ}})2YS= #,7Ca IY߰a1TJ "NƑ0.u$wTJ ~qGc={cy_x++%qF|S1$Fnّ+Lm擢0}cm /Ԉvbɮ_z2 %VtL(yXzQVx4/my;d} 8TL -i C9np`?WoZA*H4NxZkXK$!ͼ `҃deH|<튶*q.UUh[j^5 n[Zaxa7a23?OOp(M n-z(ض-~q:+I'5ZݠQɬ\2h=_*(XS~u2kX rY[O: >}*xSw`׍ƒ QבUFoQnkѥ2hͩE .B&dwx r*Bt<HHPQnmͶ§On< ].ԻlBx[0:iNB4x6DDeW8-ѵ"]'גm?LIR j02U:M [ܾx0`?մ"qVAEi>H`ȒXx.~0[1-Wh1iYߎ$d zGv\kZ Ɣ/l@bo(h4a v[*K(y&>P=z(vl!N\Wvl?܀K1t2 tKqr׻kaFA^m}?&:",;e$$9:=,"W#Cggd嘍nG&1pn4Gnw.M* Vb9Mz˒mݿrl7b<PvkH'~pwpܾC[tUևIk;?#&øLq}tfRi)ȶQ[Og{idq81O,^h]vE;@PVZَIACwZs΍ʷ}NsVɟ=7(,?~:4rZ\/Mm*zc7[%0/UVĶͣw/H'x~)z6 Nj`"BaVW !5 j13fc djV5Wt1g+b;k1ˤ+)xє![LY~~6=ԑ6P/RO1j_n > e,x&޿tH_lZ =j^ ɖ&J0쾌ڱ-+3XނB`@GH[ww,蚟exZlke}YO"靤FPS&=Ŷ1x`3 ;jצDK႕K%b60n0,껾h/*dpV̓I$hwMBSK\/SVQS'/Rpo;+3);xMԋeˋ؃Cb&3r A Ni5;\xTM.JM_t%3B` m3N/Z#/ qR}tJSa_uTÏW8졗Vvddßf6,H$ 87I,ljR_Bmn)"DM$_= 0ckkq|+&1/Ykrړ\6MH\v6qPr{]^K- G*^lަ؇-Ki͇Kڶ@JEų`wSg wE7a\r>oxʨ괷 qm3W+%'϶ ⣭/0)G_~M+;eH3?#a/QU/iFgF0l1",\eb[]1q/Yy;[R#Zia[ޔF4'N–c9Qpc2p`e^/2,KAG_#p`YyPUl/?rՐ\p) o[*7䌔k?a)`M7qެ{m-w| `-ܷ _ 9٬2ykF&!bӰW,R0IVԞK6~|f'4;E{?edSbä u42%*a!SD,3@}#Dd D5 AWE.nhAR-UGSwZ2' WmDz--+_~``ʦCYp>TD,q:(A~V}ZA-ur^[sy T & YwCp+9N}xNjM7/p4FׄeyMqQ fYJ\5Wz3)鰁BɠCPnФ.5 Y AhA|`%fRRnN]¾1ѢRN6/qį%ѷ#O2ټ:?ƎKH߿*za7hULQd#\x}iݦYbVDyRsBqFRVe mcq?>&s?eNɰ=(J8mAKe7tI6.sߢVfj~2aeG8Y9srǷ} ]55xdgx 2wK>'xSOc¢%QWe.+=t(t7U&k} no[NTNLw*#ذ9N-!Snc>ÝY'$<#5#Ўg,d8NV{֥y3='>n\խV㭄ND#Cv>f,w ǣ>a س.#>׿Z ڡ'nTcɲLQ.y°x KtO#x;ix{Bo^kJyUqplη*-MC .sF1;&99VSkxbK)z JuQPVxŨaewgfB #0lxO$?V|uNk_bb] yg>gVh^n:>‰HdkisT$U$=$'*44M>hl9'x0T23ϲ>@*Qx^(ճ|3S`iO [1]rw,ǎbY,95Qס{$V^(lrPqʴi97Uʼn}p5$Eyد2=EGfh;9~Ƅ@H08ScH16l!p=&p"mؕSmy=pYCdV>dF[Ȟ1m4wu+ o{GkG^#}Rg(d޹)h p4 !xFu0b YF=fsIO  vzp4ˢTP[Qposz6 $.ބ4s : W'Y,G%Rțb,VrpR6!m1 kl{j`ژ[hyly5ytL9'SU~X돢xMk'|VJ6KT=l4N?]l_:^Pq"/_zKMqL9{o%}țe_ HD;GWk>Pos[+ز! #2KkjKm(rJBGiV!snyҸI&V`pRu)/w.o .jOzrjCNS:xҫ !"(Jhg;iȜ hwh5Jʫ>" /$Gv4(OSsPBE~pNKb["bҝ_ 4T?ϖ"!8LO1=G絪lfܘQ.1:G%s9M  M~TA4aװ^/ssԓ2% 枔E 6ks͠S%ZY!ljg+<,9TU[yᴫ#L"#cutڡim$$}y^?6{Mvrv_&DN[o /'u~޽zYRm}fa1PLܸ3.s xz+EW+ iH߆6r@V9#?@͜pg >4sPsLV=L7|/PZ>?9x#QVfww WwP!^lDَpxAɞ0aIbq\|$:dhƖCfaq$k22FYL7.yb8hUUGdS`lkTV4 'LQВe;zCgѣ]q  )6\d+Ʃ_Fz0 e/`0T74% %/3ۭp Zħ$hVog/1#D%ZzD| )/2㾆 +F"]JVY؁2K.|2hD[F8[uYz>w}c}7Z`6 ( 6@~ {Cyp#\o.v: f:[5{'1- 5BF"{8X}Yϴ/AU~W&k7 *͜ bJNJ7pNWo.XOh= eFD-* t.x(=Y;[~~KSr;(> ‚}knU@+G#{}ERRUB{eFOˁ>o 2HH-ؕP1aN`<Qe: DnZOCYxT2$ۄ4<;WmR9U /$ w<4gN&1q(SU 1o7x<_9ArNy"^IDj)o t?QтJd)gFXʯUmJ\am,znAӋ ŰT_onn7M^qyh@ƱGqm߹*,ñ(Aw 3yKTd/ޑ(:Vzx, -]?5nF6y/ߎC~#14z%L)nm#ulpٷĠ@N&E Ć,q9㦶ĝ$.$k/(*EWl Ʃoگ[)H07EK*9@hLs Ls]$0 \ű.S=W*!e`$XvRU wesp>yXtMG^\ Y 1 5?>/ax)z<5xg֧GzhhD] j)>AuhP"EKi],01ʌADD=N7ClHFXdf/5Ǫoe!|Xtޝ(e H[;ջe:3;cN3Jdd^H?< gĨbLTCg*F@Wn\a^0.!1ix"^fena\M8D#qb3fjDv.ZBݡU't{@,VLv'uΑ0ϓq?_,.$$,nNT :lD(ĎZ-Б%Lp9s[[*׉2.>?D##I UN|w?yδFˊdeX V1adssc_Ůp]OYɰQac/?tQ?u1W&Lq{>m̠@>@2#_rG|ה-#nrCmw5F 7X1U۳^52e{t(>11(e>vگ 3V [;KC}ْ_br\ǎ)b>I}N^O0ѯ^ߖ U} h6IzL ]Zk<-PL9HcS;N`:®8r Ͽ ̱?Aӧf;lo \ 5+*ŢwX)!s(u5zbq_A\4c,!YD~QJf$zGҀ}FP2'F?2t#dHmJBWÿ홓aՖߴgB ޢԦ>37A˘ DX\KO59Q5?h(jm.DbP۰F}3ߣϥshl)ÚW\Fc=9;ڄ.iqLm(=BcAi6NդYvC,W;x(c5'0F gM9sGDs:+IuؿhH<=!6Й]ezޥ\ ^ ݠHzH ~OxMCB;=&eSY}/v߁Uf1Wk#' ~lq9[f0ߔA}KrXt b0Ye) 7R$T_Εʋ}HL]S~hjk ڽq;Փ O_U Ĭ+_IP ́;|EkXe3dȴV?Ng!ub5d'Mb6rStJQ(Cܺ,N>S8JXI8Ac{tHr;uL_ӄbcKAc{3=H1`"K :ZE//(t v]`R=i]lBǕvd]@=ŠmYނF|%[6g$ ?3$.i'5-1W~C`0k[7!]^;r4)"[&Ϯ6$Xzxwn,2M8t%(D$^:My WS+\"ֿgY<Y^ހ ^, ]HYcGgwsZ,Di巺W"B-ge)n9F{Ł^Q?.<2Ij0g z>b3>F~dOR ~z:Mc>(_&6ax'ح,!k;k$4DEFgmPxS #\puMsULk UlRѹbCTw0 AtJQ{q/oaQ 60>Yf> +O}2_(Ht\K>49[g>*"lWK6XB4pX=c V=3r+d#n?QFL[} (jh?FTH53R.yZj RJXcMw7e",{-E9KmZEV 6iב=~NrS]Yn(G06YLG*`Ǫň324 Jv$>Q=@a, fͽgc~7[Ɖ˭ Q> ^?tqpޜrYH'^Lqw4Ribo.|`y= K{"0K%iFݰ.M9 vI3PT -N Z'~ۿ~;(X D] ԸN!];q)!V]-4F+Fz*NT%I HyJַ1r7$g݉/cG%k9*TPYN܍$>Ar͆K,\&᚝v5X`BN͚?e&Kc5IM`KAxZ;craPmmnGO; vI\xd,N.R K^nNw|p$Z72ŏ;[GfҫiE!wd8['7Tʁ&g)ﲀ]/l7 ޗiXo!xJI:F25vBD1u=%mՄ|u$xl[Њ/4oloF MlL>ۻᮅYsxtbua}!p2a!tD5+Q ejܕݽU"zl?{V/LL0~/ap\]4GlQ!;$ $pĦy2U_?8!!I h#0*V܂T"蕫\YFP2̡O'S#tCXɸfVEY=;-4f>Ѽ])d-7 o Mㄌ[n\U.?mE* sBݦA>0?k o<<}ypD$H8b,$r? 4R+_q3+Juk>^4vT 3Xrh#We|dYPCCHEck+w/yQW^/`8jWy:;w$DV&t\ hL( [VE]tȀ:\iod_u5ң 㞁Hms- g(MTh9B2>73>wMИ 0Q6O74 ׌&+<뱼ѤO_N9XjldK~BeV5g=4'H,4:D'g73Q\[7А=)ہچLQ;hO$ᴾ=\=Mw1j+3`*1Ml+> rW?#V/.,RR(8*H5 HtP}TT*!~H䣎JVW](pDlQbXfZh#VYTx)E:q`XlOY 墑"+޳<drIxcb&4Y{+#Act[?$~;ٟurؾê{04 r#yD/ް5X‘# !E^LLv@V/UM#-V&c{:Ҕgmk97`NmJphaڹM6eFp C*zg좂>/rm){,NSOV 3gSs8iefNIB\AT2\r{^Q{Gf(oqdf}PMGf&J?3m@sWxK#"}y1qR"&ysfHp9BL [31PZGD ^Xle\f𦭈Ianȅ;Bf}sk>P}H:`!BZozg!|+:z9) :|eAe\ƭ ;k4,;ĚqIXV9CMB`S)\+sȔ/^h_foKm;[$ NDKO.-ca#OwN_Kt6O5XhCXNK~ jmO^Rk XQo2aǬfJujL9Aybޗ-O u,LjƊ_>1)x<0j",?VfZxNL{TBVGqi̬׮C/u~@c mxV)ӁRQ3Jv r5LBLtF`諐a젾׶UZ K0  j_waQ%Z)+fmP9RP9edU/f 0GUTbwF=Mw;?0JP0b٤Dޔ<ГJmͫRoi2g+~hRu>cֱBQ6АuA $`"7DIhd?M{b'M# 'dj^:KH=@PzɽV}:+N.ڗ`$I,-c3ĝPx wXP yQ*|%IE8#QyP1&Nel7C"MOjU +dK2|c':!k阸;na1:Ni~-۹.p/)^ 0nlV:>ɏrr))THJ #5> &:Xꕷ_SOdT0':!PLk+AJX<&UK8 T]GĜNc'8ͺwWfvrD7kqnI,0}iي*L6%2u[֨a93^_Jqᾶ:}¤?k3N9u ƚĂk%?*i9P-i\/PIn GP#ס#6sM=Gؕ"{7@r˱xȑ@~55hsg̋x[P7y$< ) Fyaܩi }=OdcSn¸ɘ1"z't>0j. M$+}R$??k`aQp+yFf,;![.ǒRRsLInOuV8VhźH7,^Yzeu(FKPqό* X11tuXPcTWza7,[)Ӎ3FhNl puci CJ&y|jB>9٦f:ʀď`Tmg,G8!YCgp<7΁ gA#V2] 2T!n"afbGSxw3zM@[R+DlȹU׸(sp+ n8J P.8Aٱw|X7w2_@{4%}N8aWɚfn I !@́MRogX6fTccip`EG@vnδL rLޤe 9V.Nz0p&*bry/@^pJC0]ݞC]-\'ֺ0 >-f..!))HӎFu`- ?}i Т)8ujM8]^iny[JPvЋC:s0[zfMM.gM+kQlnY|wftܓc0dlwP\)s%#3@¹g. ^wۺqޏ 9ߏ5JcnqJZ fR nkPh P ~25ag@hU{H0tJyj+ED~8_5^֝[>]L'. 5j~ xt(Ӟ `4nU+,ʮoyY le{S 0GCz:L1jO\ n}J'ݑX3po6Ë-"L).bIĎYVB8@|OUF?PԋɷscJ{N=: C5*m}O=hX=C|zd+  AI{H{;z.1+MIQ@46&FY!Þ3,"dh2\RQzJMr jƎJ!(4SdX]s/Yۄpڷ>pgIO yǞKR-^HBl9yQ/k@Vg%9/se,Ò m2$uWбjEU)J 8 `7:pn*TWv"<+z&"`S9\)y뼧=,sO8⧖h{W&B$X`oLg4ٔL]*COݠŮx KBSżu Z:8QVE0qhUڪi,k=L!)Vz$SjL ifɺAQύ](-B6)_qGy Ʌ mH̀| ve vR p%_ )jCE30DePUc &kSwawl . bKn!7Ct}<# A{uG $^8񀶥o;.ޅ[  !^M ke@45)wQ{^{1k@FTxE J%}ˌA~~ΐ59|"(G1;GTKt7r` YX6@y"b|UHR(_D'sYzq$U&3q#bBkDKOdѐ]As`Ev+)Jއn!h /q{=ߖO4(" (;YeY,pQD2o!?Y: ]/ߟo b xXJWkm {} l8ְ\W =z/ߨ$p" c{S=TU #ғ 7| >u8}_ ^k:')˙+6/Uvڼ p_4ӿ׻JQI(M/m'vOikx( ۫8He 7Byv=m_ Fq\*S3YO&DV(ٖlFH ]KJ#{ =Qɱ1q~mv҉TC4pHEez/E2nH25&|zDB>Yo2kJ~.IQpioAo8Q}zn=z,rD+),`'Nm/ ȹa:^E'gf[CϤ|)}BE~Fs偛C.E<̕0zJv Jr煮mf`LFR) у;~ZOI/tQ5cu2U4բ݉lOͷw=ձa 4[&ֳ~^r)V0TOӔ!!@.0-eM^r7g1hAwTe!kӣc ޖ8: &nWR)$JJ 3ȯa*v2Y%;605?'iAV!C'"8"@hVD7 '|M!F#`~$@JMJ}νEL&q'd[Xxc3c*Qɱ$11Tͨg\U~ GVB6jOC 1A5[ʽv9t 㲸9|T7AgFN,v=8P|؄ǾF\q1[DE/4%@|UHOsU%qC&T~]7R7.Zt~ٶȽvAҞNHzDOb'+d_,^#6k-?}Jk bJX\͝[G›qj :㛰LDEGI9@>ş!Qt}ʾФx'z>$G(gr}󔄙Bnj+7"[oq<?IsJefpnWeՀioB6N| c(L .,L0F=9o7Ќ{-hYm^ endstream endobj 536 0 obj << /Length1 1900 /Length2 12802 /Length3 0 /Length 14014 /Filter /FlateDecode >> stream xڵeX[k ww ݵH @^]Xq).)nEtsη}IV51Z4*,b i{ + @AQb"8Yٹih$@@=DX\^=44zA.@ OPwva1:AK0"arO?9 XYJB00Ym- @S]JM XjPДaH)iH@ZMu? k%W<44tU8rrIh_+WW '{\\Y-]]X,YlO pw^@ 1m6AAVڽU6OLۿ :嫠!. bjtqu%{.purCUNK3[o_O quGo!`g#`[ПLQLIVZJ]ExE@X]<\OLRᕊ|NNN+I vvU;#i$O.Nl [!n ;d%U%9@fVlŕ?b?&z;;, _ t\\AT7B\^i:*EXV!_c:[O9MLٿrI*@̀v`[26OJNv@` &-;`fe[gl_~׫_WV@@^T^S4MAJU[C߼J bfoX8yx@'''2+8yx6y+ wBs|6Hf2?zvv?   `Y_Sr&zڙ%V_;&t|  `sT,??/do>atq{賿ǫ +,B4\ޕM+}YTd4oo.:)OhF_DG.v)sP2-H8% ^რ_J T&y5䵹m hfPb@e[CB2鬶6r葄@{} Էm+p%͸N$S./q^%0Q9x.L=B ,$\AgjDq8:o1 ڶÍ=Kp8As }~ǹ^ 9"9^cRL' RگO9Y1V1ILh N *HWl(ˇ>'v;]urJQvu*&M_DIf&BLR^֣b 8 HYQ{s|Խ4_=QtgC `:AI{#U*ê_v% Ѩ:Վݹҁw'JHc\(3]wg,+0(vٗ 7SFO %ѓ&'`>_SF)T\p6wq`Br]7E }4-ՠ}r!C-,*ы{η2WWm/kejGug]`=*\Dj9C)&XZGD.>h*`ŧӽn$nnHV)TAqdM? Mɻ{Pg< >g Z[(ڇ&%R#< $xyK9?}^ eHɝf#"hp ØIWT@K.M!\5`S 2D$%eo̙"P[DVM ,mxlwT^ͬ')>Z:(z^I R̖O/^_Yp)VfsM/,f˘< a m wZivӷPEl9Whᮋ֖5a 29vsZdzHh:Q{kg51'z哦GC&@V#6238ZD&^-j$qsD-~_zU8f|ro8 7 MOe*ΕYS擦{HԆ@%g Ǒ$5 nvsCQ򇟄(#3Gas)a .*P:;dCƯK1ه!4V!`ei}qYlFḑT7ݟ6\ܥ)Vh7OB5cM2[y:k1#ieEFL> ɓOe]^=@BjT=5a%aͯQLgO&{_DQ{~fqDE[TSݡ5n{iCy) Ҧ'KCno߿|d",S6tl19g'mFLcMͲGt~&3Þ09f-G–5_n7W2I]Sp<5 k>9W"T dH-y~$fc;-,11!fT~P~Lnup$iɝM4[4IN\hvLsDvy+F\s 3;%]=ËudMw:4H _EX0,ҭeMl256/& Gzaŷ( S0&|"2&rcBb$iOyo7(8H><jpt`ń8Hձ0 .VH$%T#Df|n>1Y`xQ=-AU[%^(,) ПR+vuD6FalZtfSE΅*rݓ&ad˙HIBzMʿx}H ?sC /bjf0<Eau4 bm7CCp,>+  \ )HϱWE{n@o6Xd )f *Q*O;98ݸ(<{Ek3y_^)lj:9P_%)Vʖ'WC}1:8t4ᙃ4gG==N n+4Ԉp §$G~ .wWGr)Dv"$4;!k,!*)m)oc) $b.}3G~ڏ|;59SL\ҠddD% JGEOp843|NT]Tɫ{/FkYº8D0T;EMܞ-l2/{MW7~' )[ǻK&ve@h&@iW_Ga@ЉqRr>>dro6kixj%:TOA43;bYH&=jPSk/G;/- :d〢DρU OR5 BA(|WU6~PdjҏFLvmgEg5o3Vq@Z2/[ꭹ]e%q=b?3Sm9 ?U O[ brJtknɂ`I0K?|,ztǗT@fbfyEodKn'x6?0CP/5n+C BNcA]jYlxE쯻;XtNy1? !F$lN0'm#'MKM׽Xv~) Rk<@`Rkꚟ핚tz$QLI1w%w> ..pRUeJq) 2AqEyv5{oڟfI{n|aQڎ &9fW2LUUh$ ]pieseH'V^bI,'&6(p54|p$|Xo.':^/`/Zt-[P?IiM?Y}6VuoNsw=Fj!9卶"dww wfT7TV1h4dTEBP?te{FNu(L.)akpTԤΟ{^0,;ҿT*ZbjU`vB^قQN6V(i,S&NLK.yFq,.wDs@aai`ŨMqX]t3J ~RY-uK>LtvU۞9#5^dMjU[2 }ڵ5:DUg^WDJ_"#¿=4ZU^ 79J=iqL*ْȸo;q-%m >,-UøR1׬&E$aPC?BZ2DP;'&"fY}Bf\ğ BSh.iYQKzg*K|r げخ٬zxKFlFX8 DTv!'Gޫ[}ʜZv] ObQocCtf/`;Rm N;)-ssZ}gù+"bu_ɬ{7o{ Wpm့v?#>o%<@_=3/eLH B1nCN3$Vc)n':HCbg9A1}OS\ S[ 3@Td8] ʖu?1Ǫ؂f'pz[4Gb(b<97(Ҧ<ЧM*tgO3^4b8wIX=BЈK-9(d~4>1PMV%n~ C%dZj!-(*f(>O< >}\ȼ;3MivRa& n5? l%ܿ$nG$ z6+ʬiZ KLSA074 1a<4WǢ>B2C^xS9Q׃^#N}$:9EX EGz|N='a["ٺ^3Gqp x|xN=вbefwG=L~6gjF2*R]%l  X;NHe(L1X%XŸjX8YpYxJތoYtdL1ONitaTp7AeJ.jGXsum2hJZEYT\*^Dq fN65⭖SS=[|qNWU*s,.3,%ڬoO~OͶcA+'G{ wAPr>?j\IN=xˇ>v#w["v(U2 bȳ iFE6.(PHU.'Lѭ҅eUjȢ !.Zd2pY!'0?S>r؂vc s,[1#0/>V xa JL |Aڣ q/.!U.ֶy)Ԗ ~PJn{2Kʲgy?hE6bMF)ʗ%nZa8R"Nʥ:*}uSRX"hNwyA!/5>&$8G 'm (B[(ļ]{.Qnt]}0"[J$as}3ެFyvϻ sKɣ ~ai<\oʺцYeeJ~ JjhKOFd;-AnLF?elF:-R)d~,ks^΢QZ J@4M#6H|1dw.KQ8Դ ҵ&[zh}'WS%F*דtか8*@ VAqbl̦nWOE Uhow -SŝnZRZK8H\?M#d8KX(P uτa<$]ea}k1eDu̇ܐ פSqVE0򚹏|9V̜:[磻8޼"MjB:Jh# hDx6`a]Ej25=lH4JpxN\pB47C!?tlX+T;?_{*`zfqu0ByPp!䪖þq^#Oʱ1F>FaL!2DqD@,^ 17i\%آ6VPbBG(Ϡ /-JQaЯG C{09? ϔaM/34`8.`NSVk4ҿ=¿V|yg*CIۓrG1!̾ĉF~vRቶK߽qڷUt* ʔ=d_G_r ,xo元ۨr1i\k;fg;H`6}6q5N'I?7]%(K-}NU_%UUܥNo&J7:F*jmm$+ l{ jUH*;)0"}Њ ?/`2у ud o+>Dua<<<_hY[l U9xh1c]OfGO3(@:Q]W291>+\n>O28eI ހfSFn$P7RQ IcªNdV\r(&vm}-2K'V9,l>Ma fW>^:C'o9O0dFxK8c6^Ԍ2yklu{/% gĺ |_c>bTO7UdtՎ/i;U7m+|󟜵+yKQFᤝjtʷ3cV<~).SzuׯNU[>:~(H "n#Dm m2|cX6a9Ke5td]N/Pݜi֣W d C8A,*Q:m5~f.05Uo}3V$m$6f'Ъ_n8 'HouCaF+Q=G\` #\Jh5-o.FzGĬÁQXr@Q0TޔMa۾ i<v7[dLWI#("P?X0X_3y&ڙQJ^_q0{=CK)\ +7ڈ1MMrCFMa*-X~H4P 7Pd5h$MV M7qIR[2 ߱w\{6˖SaK^zZgb]MV&N0;!˜i"dzP(ح |{7&qeRUTqj@WOf`K|rʈmJ !q&B٘Ao4U">\'$( XRCҺ#;[FZ1n-6q͟:-5l)GCfrKo 2jx Y}<?约Rݫ^f,,^5_s}7nP)`o[ɭ͍oCqosuKɓ+_$"@hM$#%{ #RRcy>F!w"  o,jJjBy"FUWBœrz|9NJߓ40pσY  65+fT@+)HZ*ux()=x$~?9O@9bD%'"R=wz>f%8x경Ӭ z'Q4R{cl+||b 7*=j{2UQ_oI =M\ jTHklìi#{nЛ$=:Ji? 3iq5:)i1o[.ټW6| (sNc*7c?$kXyfȋfW"zlQ]0KBi.:yb'pXU,L^J7!3X|k8%Xt/3P+p%Ġu÷șoKC z 8y/m~H_R 3[#"iXhl ,7jӠ,wbYt/t$T"gIcy~G+л(&ȼv1Ы.Bz_fY|]D11"A|y|ÀpN&|x{ w6yanŴ5uϬ^ LZҽXW8f~+<ƒat.]Q1uxi=M :w[iTUF }0aoZDVJjGbNU9aK դox SЀ@mo2"nր4Izl7`xWk:\ͷ40/v=ݱ(HF':}jkF/d\̛2^2]'F^9y<>/4[+7~iTü:V5B.fɗ.#8 3 , ӓ9aޮ3`s<>{ڱGY~Bc5N΃[]d nZσgiV+ejH):ICF.B_zm Pb4EzʳD4+q_$QV%E٥ȟj}n\)R6B-:Po(C|7N'hm&o639Ѕc\&N>{[iCQe)D& -g)"rjĬ!WtHº[ļQB$*Db]ݿIvσgV/Q4⫌PT(=P%2l@U,}7E$Ur?G}3Cg0$hV۞en2* Mǔ3EN(7tЁ:#j ([uC**W'mчq_AqC'lB R{c%s-R-ڧ=oЈXia"R7DʺEMۿ[x{ץبl 93m"RJ H:v cF'b<ۿj.%e[>1󖬠/۫&7"{N=7 JrX VН> >fQUE'?n۞m4vä6oa`'JQjDi+ㅄEy;|ӡeKBvN׋Dr jْE8"Gb@ ޤ|mT ͟C6|S\E^_*ZkCKE.|vZ9~W?i*hhEsclM^X< +^q#MD݇qE,+h y <7six@Ph-p RjPfdNz$KKѝfs>͘Ν߆ʖfAZWކ决u3 J\9=*E|/f'E3tXZ<9X8Xj26t<1;:X1(,M08G'qj&Rxy/4@|01 eY,#L|BAW MtG҇}ͼw:gR,zVTBZ'"}/6-xuasQmmvHw W[c-]>0crs#gs wxÊs0Ov7`x{hI/Zd':Ƞ4en),9>wN&'cjZ#dO^("$I XG QQLV)E\R/fA,%MM֫8K8 O/ˌs N%ׇ$7yi؏ n|]xt9!6T'AU LAy3c%c< 30ZRcƝA4X`=p8B9 NjXl.Ar-pXcjI#]"B0Rΐ>1nTfR[76Z!Z垝}T<:*ߕiD=o< S1d/f1Y qwКY Yψ.VTrvWkVޘg<߽0@A䮭 @pt+䠎i|5B]سGF&TWVgpƶGӥ8ǿ ؞go2Yod[bƋCcWkwgI,IN.ڐZ WҢHFq KuTX%?:da>%,{DT#|l u:: 度oɋ-vsU"$X/<.4/G*v> Nh?9i}hQ ]t{nidW2.gjN"#iT D!f;#ҲsakaXC]iK?`q0|3ZCZp;8ԉ!2z cl$qsz:-Df[ZݛEwqG݉O?Oxh_b lᕇŝZB'=-j.TNxA?w/`W-df~s7JLbfy=i|eGwR@d {j)DtR'8:y x;U,Mc}f59w~BŷwJ HwZ,CZ ~= ءa:>zٲpuCCG}@Q}>iv(OepanlBҨG 6GZ['B|vQzMp)奃|ko _yJ56#]zg2x D?3s3 !NYsv0ge@FϝQy" d`ڊ.chg}A^Fg^pLH`!Rwsfmҳ)*JΞnsȶ;OuzY;gMtܙE'WDVS<`&tBmXc呁>''ZȫǺj~Hg.>BWM\h]'G<)V&;nA*uWJ 21%=dDP{[@c^)h8=mM XzT8hGE=H{V47!%i .*9ùloU7DoF~uo E’J0`LC<Ci(8˚ K̩s[yӑ; mXokZsG޹eNЂP6MI }ZLd?#D]fk u7)Q݅EVδlš = dW$F ;v&׻.Z!zQ',Rg+\CM? &*؞ԏ]:Mfة| SLl{Q"W )sSK'+Z@óB xZ]MTpbK0s'nv@xd~ANA 3^#a(7oY0Ou)w;wWϽK-jwK`b1rʧe8I+)> s(*be:6#`wWWltc8*ބ` yee%YG}h|G#`-Ŝ빊W mo0vg3h6;_,B Gfd yd<'\")t>3f ɺZ$v2TGcnkM i;2z:~Y^j:Y vpsVD}!X%O z1d>L endstream endobj 538 0 obj << /Length1 1306 /Length2 1345 /Length3 0 /Length 2180 /Filter /FlateDecode >> stream xڍS 8Tޱ]EOQ-O2AR*Yk̬1&Q;]RNH؅JEI]ӖP.]8g h9Y]O1l ōidpqQ St' OvX"E0+pfJ gfjA[eA:j I,8c(,%bb p |8DB(pp,"^BBqWL a`%q"ɐHJ$ֆF@$e`-$'K#N8<0>.$0 B R"Cy'WN ` liMt qH  |DulW2)P|(B?OlzN'J1.%KF2 f{gD0KI %L7hاAy|e<"2nCH_l0T܌`r 1<)D abL Dp8‡?R .a_;H4!\J0;1  6S U|B(B)[re)o3b˄qo~H{| ' !2ѷ^'"v?P\L0\{kBgH"$*:10O<8t\BF1 |LBR)4$b;'G>0 sIM1eL`~LK,qG D/a@QVCSOY7;9Vq5hi JۍvZ=F*w\ɏ+ܕi0o(/Ź.ީ-/!k$%i14TbJY饹6y2eҾ55o_ݹOgxvhҖݭ)vH>Tů4,g5Pi/Xgn5 7D7Պ:3ya AM5o|I_Ԑ'{wζbAOliEiGs 2_fj4rgz9Gf[Wk3}/J9h~?Uk|4R[ٜNTش@__vdݼcp"=Oy\ظ+t38cZs2.-ӱ('5u]팴^Hb+M:wUz.& [G6Z̸9!k&lĕԭR?:I=tm/#Xa RG"2dtOW'=nU$ǃ/:^-2YeINVyé<-GDUn+˝qcxitz8gdYBR%GMܸ}ŗʧns7xfkP*3SLP~PoT$\1 w7Wu}}flYSW-*Nyi/ }xzGxVQ³:3 yFœ9.^o2js> stream xڍS 8TouK̓{50`; *ն3ga3fXh$ERZPm)G6Id[6՞սs3s/́ѩ4p4Fc\O$X`(/'1  -݊EfhAH, E!")By "$`?!B( (3?˓pňP%PQ" eED(.!)sF0h{dQ,W̃P$R ;OS qY0htKG8+0WJ#]D"`‡?R.²fHt:!\Jaԝi耦}:}Mȋt|<7zqfL`ƤYB4$B}vvGJǔ`2`f,- L>| Iu"R JBDi3c.R!,UoH#4Tyy~LDÄg\X @b1KJ`0 NQSQ '\HYD+P΍x]0sI0_}`wSc\5˰wPQX0o>hGJSeH=^k1?}_RjKl_{^^LƆ< 䮖:=ퟸLjSkICc >EK^.,=6'bF endstream endobj 468 0 obj << /Type /ObjStm /N 100 /First 917 /Length 5268 /Filter /FlateDecode >> stream x\Yoھ98g߀q'n$uA.ʒMίeH %S\_/ pwwRU>TV5J;2ýl24; +MJC7\SV>$v讔 pUUOVW2UB? I_t{6U%X/TQGHOP **P؈%I-XXF} !=cG Álc5Vle#@D$,bRĖTyc՞v$; [:J-Z7 Z쓪?$8.95 ,Ҥ=0\J S@ w-f:{i+tFh4Oikpd=$  KZP Yp'z=8Xgp,2yU\K5H+āaI fbHB!d#!?%CJnOkdq8 xXmҌ u[ࢊI\jA=%aq'{⤞MӳzF:KMpp0V}QSLa,_qɒTǟQ /FMCXJ)8D̀m|\LM;vXNa%No] ںx8O`Odؐ%x2{`2=4,#蓢$ vԾqwߏvho*tr:'F$ nu;7Fכּ :ShFw`> M?;#Dվƫ 2qͶ[cٰn-}T#P&k`p0:} b6QL2^m!XX`!r@WHĵ,cq.c ɠ*B)pZcB ~2ö|IvIgh-ݹ0 }I%" |QBB%` *Ũ@UbBPHPʂ@>r-h{ wS,)Tkq\=@GڦQM#hg|}xºL4++pa^{R 0\0 @2rdƇ#w[!+@s˜b|Z2zfvs? }ߘJ3Ρ]J% n&feKyy .o쪃=Y2UMeA$@F@&/ATgL*QClѽ) *R dDEȃ <Ty)򙞌: eh2}Cqs`~X:>"0Tђ0?S9VB 5S.jt &eh#3"V y%6Ŝe S) B%$Tb.QzbΗHe6XSen($)X1UrbKNҀDS}U5)bt 442-1Pu&Oˡa#8RmlcMH5Sg[dA;bD^cFgK{KrI|ԭ$"\w, KTXhL/ZZⳍH)/2 KN, -xClB9I ^R@a.JJWVZc*%8X>[nKV@K>EJD&z$M?i&"̔,.S>| %h3{`o"gb],@"1R gR\ȟ)9r4H A(pQB'cEHx#IL~&fE2qA&zmy[1ҙ`ߔ&z@QeYv< $vj-:&J]pLb; ++Hd(tINS oѨ? ņziQbLv59Bk͊@l 170yx, 6SUƵ\"/C9Nla\\ҳE㌛E ʖs63/b`Zpͳs`y]5|MQ Qkz9G,70̐i"ZDs44j Yh gYJgs]n tטּ A4.  }D?l^2b%(/㳻T|e(-ԪH;B3Щ& Tf$!$%t.$kc|xЃ$V/J>^9X8-MUk$ Es8[3Ȑy\[:qJ5eglۗF-̕Vpmc Ը/Z jt-4GEAnvDLj.#M!jb~·\R|K>ٴ|f)^PK¡[5a-SֱP}ً1BT\27tx=LL}u8>\ J>8Ρhp1,<^"^OiO<\?gTbTWrOW`x!{s\_@<x&~I/LM\u(.Pĕkq-b&fob.Ӻ?&b!~toH|~l~||¦7 -Eہ oL=؞#@{Ep6m4g.%@ ='x6`z3fڢypց1Yu^˨/ٯ|T /./_7wS\ɚy"2aKY{WR|q6?ήGb%?y~?yU:6C@a*FmYQIIIllB:%jQ Fח`^/굨gCP%хËi=Sң_HF/1g31b\ YOs񛘍K1.0E]60=Feش#9L⺳W%뻏>5l(7;]l6v_ ]V> { V>G*Y#R.G@ ֶo^~h; Xm̛}Vvϊhk[*ZT"rp)z S{#S#N[%޳ؿW Wcb4| g[C!%s4oHRpG:YL)|~}Y[B!iK^ 1bzۢ߃d^ѰGݲ)ʬY;Qgcs9םTme?z}#L ! 59/DS(KB{c.}Ln^۸<;}{բ[~sJfܸKu??υ1ab{`p1_+< tF-uDVxd45HJ*; i/"!S1N'EL*֭}Xg8:)䦫j1G߳B`̹XA঳ vݓ]@o &~ o1`Ojhnfne/><;8B&:w!1ƣq][f+N&ɋSHqi6~bRa7dYfZM/C\,O.'#` (,5uKGq+ gdo@< 캧gszL?;[ؖ\`#N/h-(mFkx1IvHXgi)3[yO~zz8eYT2eIqy`gĉ _7s3[?o EJH׬H_b-}VǴЧ< ^+m>ao0Og~ 1yI LuN*(RvuXXV Aڟ2̇nTƐ$f5Lj)+2,ˤluȈ4ʞվ*[4vn(!ŭ*bL.Vɕd+R~8>Pw~Vz\0(7ŕ}gqueMkݫgm Gz>OW1`wR| I3VZ5GWFxYԗ8 d5pBF6#K*j8 IoOD/&_$o/CRmnQF($LRPceW0WbeR(oL3;rϯh%ARK3~ ҵ+ZU 5~,a1 9壠;n||ym?FYM?)}vwp: |0x?<_6mH_O7t0JdAafWhSi6{@)킶sl:tHSKbi ef]L/eaffl/?wZoJYX̕,;_5K qoY0)*yʪzk ͯdWZ/tY\.5*}d}_jR֩}.br5ՠ&Kߴ n=_uC`\'rȼJߚꂾB7ug =g vB*9k`X{ŭ/:3ܞ¼-Ŗ킲פ"8Kj)v5ҫENE3/ X4r(&Jﳄry`Z,{e|[i>AC("TFk ç-;_=ce2 ;pPy58lf[V02|sg>4W6aElG2TLp~z׍t[צV73 4 endstream endobj 566 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.18)/Keywords() /CreationDate (D:20180312152029+11'00') /ModDate (D:20180312152029+11'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017) kpathsea version 6.2.3) >> endobj 546 0 obj << /Type /ObjStm /N 38 /First 304 /Length 1123 /Filter /FlateDecode >> stream xڕWM6 ϯ1S Qe  zi89 6bݙS-k$[^'[4H2; xb2\,P$p&;.tmt`b=#h Xbp:@nǂN"rl;ΌH`VTZ>pFٮ<}N;tzv_op4<tf||y-.>ޘung(KF(nŖ(mA](P euݶTf u]V;'2,\VBs5T"mh˾HkέZ]RS-b5fyoQCR% kˆKlRlnw5z`nˮ~,5nwuhhALgűswO–vH3c^}ܽ}8>{c>i/Ny?~~껮pZ gˠDiX},y@)p]*N}#!Tk#!qTR쳢2={)?p*|X,T{N,rA,ΗQ,iE2ZJ+hzּeE KCΔЊ<]ILf b"R Ry"]iQyb#8`v!5hj"۫"sUR RL"|TK5{R<ΗEr<]#ɠ+ ^ mV$Y/'$)9y4.'BΎD Ik# .˵4+K5+Q+-$g^yNd%;mǿ@km: ^C. 6奟62/͸IW9lu/9{aӑ=,t.iS&8p*O6^6]KJiFs4:#?7]_;-gM}˿W𡿊O Xh.z|*oY?yo1?ܳ endstream endobj 567 0 obj << /Type /XRef /Index [0 568] /Size 568 /W [1 3 1] /Root 565 0 R /Info 566 0 R /ID [ ] /Length 1482 /Filter /FlateDecode >> stream x%[l?3` 0`.m0`&``@pSUmҪMCԋTMQ*yhVBڨ[KDTU*ꍤR/Kz/̜uk !QOED ؁@ -$* *`0A%)4G.pG܍KP~-ESch~bX;y@sKR%hn 4mFs-`Z濵7WhѼ$m` Wm5hjE k: փ `#flݠO!mm`t'ѽ8ip΀ 8 E,Ԃ`>n+.C 8=)=t#`Ts.t k)¡W8ӣ8&> Y0ش5IpL#9'|y S W?M/(ꍓ2]S#2C֘E(vJ價^.^ANIz5f+2[يһs<zZ _/[ zA}Z]ŻqN9*)C>0dKm޽sM8kX(7sf!R2X}ʗ*ΎG|%` L(5kg %_ Ff&N V{U|*S)sNwL+3Ω3qF9c*|%(]4^r*#62ukePyJo{U:0bGBґ_9eKr|ҋWzMW7)}_NWfs|L,Jj{A^t#ahWoZ[:^5`-X:tK_wlT+N7^Uoh͛4QsPW~{Au:S,le _ua[V#V9G)gTɔscFSOsΨ|V6 9[n~BIk9W~JּI?@tL)k.pvye/.څ<%A*#Z"U̔8`M%e*0a]tQ`اۢa+[xXwD/~)K TAٕjJTXM*=5GU-**ݾ[;9ڦ/8ڮ/]ףbS偻zU>O{Ԋ~|.snUh@h*߰m XÙY>*7n1h[ @3hr V A;kZU~tC7 endstream endobj startxref 569597 %%EOF glmnet/inst/doc/Coxnet.rnw0000644000176200001440000000643711746376534015304 0ustar liggesusers\documentclass[a4paper]{article} \usepackage{graphicx} % \VignetteIndexEntry{Fitting the Penalized Cox Model} \title{Coxnet: Regularized Cox Regression} \author{Noah Simon\\ Jerome Friedman\\ Trevor Hastie\\ Rob Tibshirani} \begin{document} \maketitle \section{Introduction} We will give a short tutorial on using coxnet. Coxnet is a function which fits the Cox Model regularized by an elastic net penalty. It is used for underdetermined (or nearly underdetermined systems) and chooses a small number of covariates to include in the model. Because the Cox Model is rarely used for actual prediction, we will rather focus on finding and interpretating an appropriate model. We give a simple example of how to format data and run the Cox Model in glmnet with cross validation. \section{Example} We first load our data and set up the response. In this case $x$ must be an $n$ by $p$ matrix of covariate values --- each row corresponds to a patient and each column a covariate. $y$ is an $n$ length vector of failure/censoring times, and status is an $n$ length vector with each entry, a $1$ or a $0$, indicating whether the corresponding entry in $y$ is indicative of a failure time or right censoring time ($1$ for failure, $0$ for censoring) <<>>= library("glmnet") library("survival") load("VignetteExample.rdata") attach(patient.data) @ We then call our functions to fit with the lasso penalty ($\alpha=1$), and cross validate. We set {\tt maxit = 1000} (increasing the maximum number of iterations to $1000$) because our data is relatively high dimensional, so more iterations are needed for convergence. In practice, the function will spit out an error if convergence isn't reached by the maximum number of iterations. <<>>= cv.fit <- cv.glmnet(x, Surv(time, status), family="cox", maxit = 1000) fit <- glmnet(x, Surv(time,status), family = "cox", maxit = 1000) @ The {\tt Surv} function packages the survival data into the form expected by glmnet. Once fit, we can view the optimal $\lambda$ value and a cross validated error plot to help evaluate our model. \begin{center} \setkeys{Gin}{width = 3 in} <>= plot(cv.fit) @ \end{center} <<>>= cv.fit$lambda.min @ The left vertical line in our plot shows us where the CV-error curve hits its minimum. The right vertical line shows us the most regularized model with CV-error within $1$ standard deviation of the minimum. In this case, we see that the minimum was achieved by a fairly regularized model, however the right line indicates that the null model (no coefficients included) is within $1$ sd of the minimum. This might lead us to believe that in actuality the covariates are not explaining any variability. For the time being we will concern ourselves with the minimum CV-error model. We can check which covariates our model chose to be active, and see the coefficients of those covariates. <<>>= Coefficients <- coef(fit, s = cv.fit$lambda.min) Active.Index <- which(Coefficients != 0) Active.Coefficients <- Coefficients[Active.Index] @ {\tt coef(fit, s = cv.fit\$lambda.min)} returns the $p$ length coefficient vector of the solution corresponding to $\lambda = ${\tt cv.fit\$lambda.min}. <<>>= Active.Index Active.Coefficients @ We see that our optimal model chose 2 active covariates ($X80$ and $X394$) each with a small positive effect on hazard. \end{document} glmnet/inst/doc/Coxnet.R0000644000176200001440000000252613251400017014643 0ustar liggesusers### R code from vignette source 'Coxnet.rnw' ################################################### ### code chunk number 1: Coxnet.rnw:30-34 ################################################### library("glmnet") library("survival") load("VignetteExample.rdata") attach(patient.data) ################################################### ### code chunk number 2: Coxnet.rnw:44-46 ################################################### cv.fit <- cv.glmnet(x, Surv(time, status), family="cox", maxit = 1000) fit <- glmnet(x, Surv(time,status), family = "cox", maxit = 1000) ################################################### ### code chunk number 3: Coxnet.rnw:56-57 ################################################### plot(cv.fit) ################################################### ### code chunk number 4: Coxnet.rnw:60-61 ################################################### cv.fit$lambda.min ################################################### ### code chunk number 5: Coxnet.rnw:74-77 ################################################### Coefficients <- coef(fit, s = cv.fit$lambda.min) Active.Index <- which(Coefficients != 0) Active.Coefficients <- Coefficients[Active.Index] ################################################### ### code chunk number 6: Coxnet.rnw:82-84 ################################################### Active.Index Active.Coefficients glmnet/inst/doc/glmnet_beta.R0000644000176200001440000002774613251400013015673 0ustar liggesusers## ---- eval=FALSE--------------------------------------------------------- # install.packages("glmnet", repos = "https://cran.us.r-project.org") ## ------------------------------------------------------------------------ library(glmnet) ## ------------------------------------------------------------------------ data(QuickStartExample) ## ------------------------------------------------------------------------ fit = glmnet(x, y) ## ------------------------------------------------------------------------ plot(fit) ## ----height = 4---------------------------------------------------------- print(fit) ## ------------------------------------------------------------------------ coef(fit,s=0.1) ## ------------------------------------------------------------------------ nx = matrix(rnorm(10*20),10,20) predict(fit,newx=nx,s=c(0.1,0.05)) ## ------------------------------------------------------------------------ cvfit = cv.glmnet(x, y) ## ------------------------------------------------------------------------ plot(cvfit) ## ------------------------------------------------------------------------ cvfit$lambda.min ## ------------------------------------------------------------------------ coef(cvfit, s = "lambda.min") ## ------------------------------------------------------------------------ predict(cvfit, newx = x[1:5,], s = "lambda.min") ## ------------------------------------------------------------------------ fit = glmnet(x, y, alpha = 0.2, weights = c(rep(1,50),rep(2,50)), nlambda = 20) ## ------------------------------------------------------------------------ print(fit) ## ------------------------------------------------------------------------ plot(fit, xvar = "lambda", label = TRUE) ## ------------------------------------------------------------------------ plot(fit, xvar = "dev", label = TRUE) ## ------------------------------------------------------------------------ fit = glmnet(x, y) any(fit$lambda == 0.5) coef.apprx = coef(fit, s = 0.5, exact = FALSE) coef.exact = coef(fit, s = 0.5, exact = TRUE, x=x, y=y) cbind2(coef.exact, coef.apprx) ## ------------------------------------------------------------------------ predict(fit, newx = x[1:5,], type = "response", s = 0.05) ## ------------------------------------------------------------------------ cvfit = cv.glmnet(x, y, type.measure = "mse", nfolds = 20) ## ---- eval=FALSE--------------------------------------------------------- # require(doMC) # registerDoMC(cores=2) # X = matrix(rnorm(1e4 * 200), 1e4, 200) # Y = rnorm(1e4) ## ---- eval=FALSE--------------------------------------------------------- # system.time(cv.glmnet(X, Y)) ## ---- echo=FALSE--------------------------------------------------------- structure(c(2.44, 0.08, 2.518, 0, 0), class = "proc_time", .Names = c("user.self", "sys.self", "elapsed", "user.child", "sys.child")) ## ---- eval=FALSE--------------------------------------------------------- # system.time(cv.glmnet(X, Y, parallel = TRUE)) ## ---- echo=FALSE--------------------------------------------------------- structure(c(0.508999999999999, 0.057, 1.56699999999999, 1.941, 0.1), class = "proc_time", .Names = c("user.self", "sys.self", "elapsed", "user.child", "sys.child")) ## ------------------------------------------------------------------------ cvfit$lambda.min coef(cvfit, s = "lambda.min") predict(cvfit, newx = x[1:5,], s = "lambda.min") ## ------------------------------------------------------------------------ foldid=sample(1:10,size=length(y),replace=TRUE) cv1=cv.glmnet(x,y,foldid=foldid,alpha=1) cv.5=cv.glmnet(x,y,foldid=foldid,alpha=.5) cv0=cv.glmnet(x,y,foldid=foldid,alpha=0) ## ------------------------------------------------------------------------ par(mfrow=c(2,2)) plot(cv1);plot(cv.5);plot(cv0) plot(log(cv1$lambda),cv1$cvm,pch=19,col="red",xlab="log(Lambda)",ylab=cv1$name) points(log(cv.5$lambda),cv.5$cvm,pch=19,col="grey") points(log(cv0$lambda),cv0$cvm,pch=19,col="blue") legend("topleft",legend=c("alpha= 1","alpha= .5","alpha 0"),pch=19,col=c("red","grey","blue")) ## ------------------------------------------------------------------------ tfit=glmnet(x,y,lower=-.7,upper=.5) plot(tfit) ## ------------------------------------------------------------------------ p.fac = rep(1, 20) p.fac[c(5, 10, 15)] = 0 pfit = glmnet(x, y, penalty.factor = p.fac) plot(pfit, label = TRUE) ## ------------------------------------------------------------------------ set.seed(101) x=matrix(rnorm(1000),100,10) y=rnorm(100) vn=paste("var",1:10) fit=glmnet(x,y) plot(fit) ## ------------------------------------------------------------------------ par(mar=c(4.5,4.5,1,4)) plot(fit) vnat=coef(fit) vnat=vnat[-1,ncol(vnat)] # remove the intercept, and get the coefficients at the end of the path axis(4, at=vnat,line=-.5,label=vn,las=1,tick=FALSE, cex.axis=0.5) ## ------------------------------------------------------------------------ data(MultiGaussianExample) ## ------------------------------------------------------------------------ mfit = glmnet(x, y, family = "mgaussian") ## ------------------------------------------------------------------------ plot(mfit, xvar = "lambda", label = TRUE, type.coef = "2norm") ## ------------------------------------------------------------------------ predict(mfit, newx = x[1:5,], s = c(0.1, 0.01)) ## ------------------------------------------------------------------------ cvmfit = cv.glmnet(x, y, family = "mgaussian") ## ------------------------------------------------------------------------ plot(cvmfit) ## ------------------------------------------------------------------------ cvmfit$lambda.min cvmfit$lambda.1se ## ------------------------------------------------------------------------ data(BinomialExample) ## ------------------------------------------------------------------------ fit = glmnet(x, y, family = "binomial") ## ------------------------------------------------------------------------ plot(fit, xvar = "dev", label = TRUE) ## ------------------------------------------------------------------------ predict(fit, newx = x[1:5,], type = "class", s = c(0.05, 0.01)) ## ------------------------------------------------------------------------ cvfit = cv.glmnet(x, y, family = "binomial", type.measure = "class") ## ------------------------------------------------------------------------ plot(cvfit) ## ------------------------------------------------------------------------ cvfit$lambda.min cvfit$lambda.1se ## ------------------------------------------------------------------------ coef(cvfit, s = "lambda.min") ## ------------------------------------------------------------------------ predict(cvfit, newx = x[1:10,], s = "lambda.min", type = "class") ## ------------------------------------------------------------------------ data(MultinomialExample) ## ------------------------------------------------------------------------ fit = glmnet(x, y, family = "multinomial", type.multinomial = "grouped") ## ------------------------------------------------------------------------ plot(fit, xvar = "lambda", label = TRUE, type.coef = "2norm") ## ------------------------------------------------------------------------ cvfit=cv.glmnet(x, y, family="multinomial", type.multinomial = "grouped", parallel = TRUE) plot(cvfit) ## ------------------------------------------------------------------------ predict(cvfit, newx = x[1:10,], s = "lambda.min", type = "class") ## ------------------------------------------------------------------------ data(PoissonExample) ## ------------------------------------------------------------------------ fit = glmnet(x, y, family = "poisson") ## ------------------------------------------------------------------------ plot(fit) ## ------------------------------------------------------------------------ coef(fit, s = 1) predict(fit, newx = x[1:5,], type = "response", s = c(0.1,1)) ## ------------------------------------------------------------------------ cvfit = cv.glmnet(x, y, family = "poisson") ## ------------------------------------------------------------------------ plot(cvfit) ## ------------------------------------------------------------------------ opt.lam = c(cvfit$lambda.min, cvfit$lambda.1se) coef(cvfit, s = opt.lam) ## ------------------------------------------------------------------------ data(CoxExample) y[1:5,] ## ------------------------------------------------------------------------ fit = glmnet(x, y, family = "cox") ## ------------------------------------------------------------------------ plot(fit) ## ------------------------------------------------------------------------ coef(fit, s = 0.05) ## ------------------------------------------------------------------------ cvfit = cv.glmnet(x, y, family = "cox") ## ------------------------------------------------------------------------ plot(cvfit) ## ------------------------------------------------------------------------ cvfit$lambda.min cvfit$lambda.1se ## ------------------------------------------------------------------------ coef.min = coef(cvfit, s = "lambda.min") active.min = which(coef.min != 0) index.min = coef.min[active.min] ## ------------------------------------------------------------------------ index.min coef.min ## ------------------------------------------------------------------------ data(SparseExample) ## ------------------------------------------------------------------------ class(x) ## ------------------------------------------------------------------------ fit = glmnet(x, y) ## ------------------------------------------------------------------------ cvfit = cv.glmnet(x, y) plot(cvfit) ## ------------------------------------------------------------------------ i = sample(1:5, size = 25, replace = TRUE) j = sample(1:20, size = 25, replace = TRUE) x = rnorm(25) nx = sparseMatrix(i = i, j = j, x = x, dims = c(5, 20)) predict(cvfit, newx = nx, s = "lambda.min") ## ------------------------------------------------------------------------ data(QuickStartExample) fit = glmnet(x, y) print(fit) ## ------------------------------------------------------------------------ glmnet.control(fdev = 0) fit = glmnet(x, y) print(fit) ## ------------------------------------------------------------------------ glmnet.control(factory = TRUE) ## ------------------------------------------------------------------------ glmnet.control() ## ---- echo=FALSE--------------------------------------------------------- data(QuickStartExample) ## ----eval=FALSE---------------------------------------------------------- # fit = glmnet(x, y, intercept = F, standardize = F, lambda = 8/(2*dim(x)[1]), thresh = 1e-20) ## ----eval=FALSE---------------------------------------------------------- # beta_glmnet = as.matrix(predict(fit, type = "coefficients")[-1,]) ## ------------------------------------------------------------------------ fit = glmnet(x, y, intercept = F, standardize = F, thresh = 1e-20) beta_glmnet = as.matrix(predict(fit, s = 8/(2*dim(x)[1]), type = "coefficients", exact = TRUE, x=x, y=y)[-1,]) ## ---- eval=FALSE--------------------------------------------------------- # library(CVXfromR) # setup.dir = "change/this/to/your/cvx/directory" # n = dim(x)[1]; p = dim(x)[2] # cvxcode = paste("variables beta(p)", # "minimize(square_pos(norm(y - x * beta, 2)) + lambda * norm(beta, 1))", # sep = ";") # Lasso = CallCVX(cvxcode, const.var = list(p = p, x = x, y = y, lambda = 8), opt.var.names = "beta", setup.dir = setup.dir, matlab.call = "change/this/to/path/to/matlab") # beta_CVX = Lasso$beta ## ------------------------------------------------------------------------ data(CVXResults) ## ----message=FALSE------------------------------------------------------- require(lars) ## ------------------------------------------------------------------------ fit_lars = lars(x, y, type = "lasso", intercept = F, normalize = F) beta_lars = predict(fit_lars, s = 8/2, type = "coefficients", mode = "lambda")$coefficients ## ------------------------------------------------------------------------ cmp = round(cbind(beta_glmnet, beta_lars, beta_CVX), digits = 6) colnames(cmp) = c("beta_glmnet", "beta_lars", "beta_CVX") cmp glmnet/inst/doc/glmnet_beta.Rmd0000644000176200001440000015176313154602476016234 0ustar liggesusers--- output: pdf_document --- # Glmnet Vignette ### Trevor Hastie and Junyang Qian #### Stanford September 13, 2016 > [Introduction](#intro) > [Installation](#install) > [Quick Start](#qs) > [Linear Regression](#lin) > [Logistic Regression](#log) > [Poisson Models](#poi) > [Cox Models](#cox) > [Sparse Matrices](#spa) > [Appendix 0: Convergence Criteria](#con) > [Appendix 1: Internal Parameters](#int) > [Appendix 2: Comparison with Otherther Packages](#cmp) ## Introduction Glmnet is a package that fits a generalized linear model via penalized maximum likelihood. The regularization path is computed for the lasso or elasticnet penalty at a grid of values for the regularization parameter lambda. The algorithm is extremely fast, and can exploit sparsity in the input matrix `x`. It fits linear, logistic and multinomial, poisson, and Cox regression models. A variety of predictions can be made from the fitted models. It can also fit multi-response linear regression. The authors of glmnet are Jerome Friedman, Trevor Hastie, Rob Tibshirani and Noah Simon, and the R package is maintained by Trevor Hastie. The matlab version of glmnet is maintained by Junyang Qian. This vignette describes the usage of glmnet in R. `glmnet` solves the following problem $$ \min_{\beta_0,\beta} \frac{1}{N} \sum_{i=1}^{N} w_i l(y_i,\beta_0+\beta^T x_i) + \lambda\left[(1-\alpha)||\beta||_2^2/2 + \alpha ||\beta||_1\right], $$ over a grid of values of $\lambda$ covering the entire range. Here $l(y,\eta)$ is the negative log-likelihood contribution for observation $i$; e.g. for the Gaussian case it is $\frac{1}{2}(y-\eta)^2$. The _elastic-net_ penalty is controlled by $\alpha$, and bridges the gap between lasso ($\alpha=1$, the default) and ridge ($\alpha=0$). The tuning parameter $\lambda$ controls the overall strength of the penalty. It is known that the ridge penalty shrinks the coefficients of correlated predictors towards each other while the lasso tends to pick one of them and discard the others. The elastic-net penalty mixes these two; if predictors are correlated in groups, an $\alpha=0.5$ tends to select the groups in or out together. This is a higher level parameter, and users might pick a value upfront, else experiment with a few different values. One use of $\alpha$ is for numerical stability; for example, the elastic net with $\alpha = 1 - \epsilon$ for some small $\epsilon > 0$ performs much like the lasso, but removes any degeneracies and wild behavior caused by extreme correlations. The `glmnet` algorithms use cyclical coordinate descent, which successively optimizes the objective function over each parameter with others fixed, and cycles repeatedly until convergence. The package also makes use of the strong rules for efficient restriction of the active set. Due to highly efficient updates and techniques such as warm starts and active-set convergence, our algorithms can compute the solution path very fast. The code can handle sparse input-matrix formats, as well as range constraints on coefficients. The core of `glmnet` is a set of fortran subroutines, which make for very fast execution. The package also includes methods for prediction and plotting, and a function that performs K-fold cross-validation. ## Installation Like many other R packages, the simplest way to obtain `glmnet` is to install it directly from CRAN. Type the following command in R console: ```{r, eval=FALSE} install.packages("glmnet", repos = "https://cran.us.r-project.org") ``` Users may change the `repos` options depending on their locations and preferences. Other options such as the directories where to install the packages can be altered in the command. For more details, see `help(install.packages)`. Here the R package has been downloaded and installed to the default directories. Alternatively, users can download the package source at https://cran.r-project.org/package=glmnet and type Unix commands to install it to the desired location. [Back to Top](#top) ## Quick Start The purpose of this section is to give users a general sense of the package, including the components, what they do and some basic usage. We will briefly go over the main functions, see the basic operations and have a look at the outputs. Users may have a better idea after this section what functions are available, which one to choose, or at least where to seek help. More details are given in later sections. First, we load the `glmnet` package: ```{r} library(glmnet) ``` The default model used in the package is the Guassian linear model or "least squares", which we will demonstrate in this section. We load a set of data created beforehand for illustration. Users can either load their own data or use those saved in the workspace. ```{r} data(QuickStartExample) ``` The command loads an input matrix `x` and a response vector `y` from this saved R data archive. We fit the model using the most basic call to `glmnet`. ```{r} fit = glmnet(x, y) ``` "fit" is an object of class `glmnet` that contains all the relevant information of the fitted model for further use. We do not encourage users to extract the components directly. Instead, various methods are provided for the object such as `plot`, `print`, `coef` and `predict` that enable us to execute those tasks more elegantly. We can visualize the coefficients by executing the `plot` function: ```{r} plot(fit) ``` Each curve corresponds to a variable. It shows the path of its coefficient against the $\ell_1$-norm of the whole coefficient vector at as $\lambda$ varies. The axis above indicates the number of nonzero coefficients at the current $\lambda$, which is the effective degrees of freedom (_df_) for the lasso. Users may also wish to annotate the curves; this can be done by setting `label = TRUE` in the plot command. A summary of the `glmnet` path at each step is displayed if we just enter the object name or use the `print` function: ```{r height = 4} print(fit) ``` It shows from left to right the number of nonzero coefficients (`Df`), the percent (of null) deviance explained (`%dev`) and the value of $\lambda$ (`Lambda`). Although by default `glmnet` calls for 100 values of `lambda` the program stops early if `%dev% does not change sufficently from one lambda to the next (typically near the end of the path.) We can obtain the actual coefficients at one or more $\lambda$'s within the range of the sequence: ```{r} coef(fit,s=0.1) ``` (why `s` and not `lambda`? In case later we want to allow one to specify the model size in other ways.) Users can also make predictions at specific $\lambda$'s with new input data: ```{r} nx = matrix(rnorm(10*20),10,20) predict(fit,newx=nx,s=c(0.1,0.05)) ``` The function `glmnet` returns a sequence of models for the users to choose from. In many cases, users may prefer the software to select one of them. Cross-validation is perhaps the simplest and most widely used method for that task. `cv.glmnet` is the main function to do cross-validation here, along with various supporting methods such as plotting and prediction. We still act on the sample data loaded before. ```{r} cvfit = cv.glmnet(x, y) ``` `cv.glmnet` returns a `cv.glmnet` object, which is "cvfit" here, a list with all the ingredients of the cross-validation fit. As for `glmnet`, we do not encourage users to extract the components directly except for viewing the selected values of $\lambda$. The package provides well-designed functions for potential tasks. We can plot the object. ```{r} plot(cvfit) ``` It includes the cross-validation curve (red dotted line), and upper and lower standard deviation curves along the $\lambda$ sequence (error bars). Two selected $\lambda$'s are indicated by the vertical dotted lines (see below). We can view the selected $\lambda$'s and the corresponding coefficients. For example, ```{r} cvfit$lambda.min ``` `lambda.min` is the value of $\lambda$ that gives minimum mean cross-validated error. The other $\lambda$ saved is `lambda.1se`, which gives the most regularized model such that error is within one standard error of the minimum. To use that, we only need to replace `lambda.min` with `lambda.1se` above. ```{r} coef(cvfit, s = "lambda.min") ``` Note that the coefficients are represented in the sparse matrix format. The reason is that the solutions along the regularization path are often sparse, and hence it is more efficient in time and space to use a sparse format. If you prefer non-sparse format, pipe the output through `as.matrix()`. Predictions can be made based on the fitted `cv.glmnet` object. Let's see a toy example. ```{r} predict(cvfit, newx = x[1:5,], s = "lambda.min") ``` `newx` is for the new input matrix and `s`, as before, is the value(s) of $\lambda$ at which predictions are made. That is the end of `glmnet` 101. With the tools introduced so far, users are able to fit the entire elastic net family, including ridge regression, using squared-error loss. In the package, there are many more options that give users a great deal of flexibility. To learn more, move on to later sections. [Back to Top](#top) ## Linear Regression Linear regression here refers to two families of models. One is `gaussian`, the Gaussian family, and the other is `mgaussian`, the multiresponse Gaussian family. We first discuss the ordinary Gaussian and the multiresponse one after that. ### Gaussian Family `gaussian ` is the default family option in the function `glmnet`. Suppose we have observations $x_i \in \mathbb{R}^p$ and the responses $y_i \in \mathbb{R}, i = 1, \ldots, N$. The objective function for the Gaussian family is $$ \min_{(\beta_0, \beta) \in \mathbb{R}^{p+1}}\frac{1}{2N} \sum_{i=1}^N (y_i -\beta_0-x_i^T \beta)^2+\lambda \left[ (1-\alpha)||\beta||_2^2/2 + \alpha||\beta||_1\right], $$ where $\lambda \geq 0$ is a complexity parameter and $0 \leq \alpha \leq 1$ is a compromise between ridge ($\alpha = 0$) and lasso ($\alpha = 1$). Coordinate descent is applied to solve the problem. Specifically, suppose we have current estimates $\tilde{\beta_0}$ and $\tilde{\beta}_\ell$ $\forall j\in 1,]\ldots,p$. By computing the gradient at $\beta_j = \tilde{\beta}_j$ and simple calculus, the update is $$ \tilde{\beta}_j \leftarrow \frac{S(\frac{1}{N}\sum_{i=1}^N x_{ij}(y_i-\tilde{y}_i^{(j)}),\lambda \alpha)}{1+\lambda(1-\alpha)}, $$ where $\tilde{y}_i^{(j)} = \tilde{\beta}_0 + \sum_{\ell \neq j} x_{i\ell} \tilde{\beta}_\ell$, and $S(z, \gamma)$ is the soft-thresholding operator with value $\text{sign}(z)(|z|-\gamma)_+$. This formula above applies when the `x` variables are standardized to have unit variance (the default); it is slightly more complicated when they are not. Note that for "family=gaussian", `glmnet` standardizes $y$ to have unit variance before computing its lambda sequence (and then unstandardizes the resulting coefficients); if you wish to reproduce/compare results with other software, best to supply a standardized $y$ first (Using the "1/N" variance formula). `glmnet` provides various options for users to customize the fit. We introduce some commonly used options here and they can be specified in the `glmnet` function. * `alpha` is for the elastic-net mixing parameter $\alpha$, with range $\alpha \in [0,1]$. $\alpha = 1$ is the lasso (default) and $\alpha = 0$ is the ridge. * `weights` is for the observation weights. Default is 1 for each observation. (Note: `glmnet` rescales the weights to sum to N, the sample size.) * `nlambda` is the number of $\lambda$ values in the sequence. Default is 100. * `lambda` can be provided, but is typically not and the program constructs a sequence. When automatically generated, the $\lambda$ sequence is determined by `lambda.max` and `lambda.min.ratio`. The latter is the ratio of smallest value of the generated $\lambda$ sequence (say `lambda.min`) to `lambda.max`. The program then generated `nlambda` values linear on the log scale from `lambda.max` down to `lambda.min`. `lambda.max` is not given, but easily computed from the input $x$ and $y$; it is the smallest value for `lambda` such that all the coefficients are zero. For `alpha=0` (ridge) `lambda.max` would be $\infty$; hence for this case we pick a value corresponding to a small value for `alpha` close to zero.) * `standardize` is a logical flag for `x` variable standardization, prior to fitting the model sequence. The coefficients are always returned on the original scale. Default is `standardize=TRUE`. For more information, type `help(glmnet)` or simply `?glmnet`. As an example, we set $\alpha = 0.2$ (more like a ridge regression), and give double weights to the latter half of the observations. To avoid too long a display here, we set `nlambda` to 20. In practice, however, the number of values of $\lambda$ is recommended to be 100 (default) or more. In most cases, it does not come with extra cost because of the warm-starts used in the algorithm, and for nonlinear models leads to better convergence properties. ```{r} fit = glmnet(x, y, alpha = 0.2, weights = c(rep(1,50),rep(2,50)), nlambda = 20) ``` We can then print the `glmnet` object. ```{r} print(fit) ``` This displays the call that produced the object `fit` and a three-column matrix with columns `Df` (the number of nonzero coefficients), `%dev` (the percent deviance explained) and `Lambda` (the corresponding value of $\lambda$). (Note that the `digits` option can used to specify significant digits in the printout.) Here the actual number of $\lambda$'s here is less than specified in the call. The reason lies in the stopping criteria of the algorithm. According to the default internal settings, the computations stop if either the fractional change in deviance down the path is less than $10^{-5}$ or the fraction of explained deviance reaches $0.999$. From the last few lines , we see the fraction of deviance does not change much and therefore the computation ends when meeting the stopping criteria. We can change such internal parameters. For details, see the Appendix section or type `help(glmnet.control)`. We can plot the fitted object as in the previous section. There are more options in the `plot` function. Users can decide what is on the X-axis. `xvar` allows three measures: "norm" for the $\ell_1$-norm of the coefficients (default), "lambda" for the log-lambda value and "dev" for %deviance explained. Users can also label the curves with variable sequence numbers simply by setting `label = TRUE`. Let's plot "fit" against the log-lambda value and with each curve labeled. ```{r} plot(fit, xvar = "lambda", label = TRUE) ``` Now when we plot against %deviance we get a very different picture. This is percent deviance explained on the training data. What we see here is that toward the end of the path this value are not changing much, but the coefficients are "blowing up" a bit. This lets us focus attention on the parts of the fit that matter. This will especially be true for other models, such as logistic regression. ```{r} plot(fit, xvar = "dev", label = TRUE) ``` We can extract the coefficients and make predictions at certain values of $\lambda$. Two commonly used options are: * `s` specifies the value(s) of $\lambda$ at which extraction is made. * `exact` indicates whether the exact values of coefficients are desired or not. That is, if `exact = TRUE`, and predictions are to be made at values of `s` not included in the original fit, these values of `s` are merged with `object$lambda`, and the model is refit before predictions are made. If `exact=FALSE` (default), then the predict function uses linear interpolation to make predictions for values of `s` that do not coincide with lambdas used in the fitting algorithm. A simple example is: ```{r} fit = glmnet(x, y) any(fit$lambda == 0.5) coef.apprx = coef(fit, s = 0.5, exact = FALSE) coef.exact = coef(fit, s = 0.5, exact = TRUE, x=x, y=y) cbind2(coef.exact, coef.apprx) ``` The left column is for `exact = TRUE` and the right for `FALSE`. We see from the above that 0.5 is not in the sequence and that hence there are some difference, though not much. Linear interpolation is mostly enough if there are no special requirements. Notice that with `exact=TRUE` we have to supply by named argument any data that was used in creating the original fit, in this case `x` and `y`. Users can make predictions from the fitted object. In addition to the options in `coef`, the primary argument is `newx`, a matrix of new values for `x`. The `type` option allows users to choose the type of prediction: * "link" gives the fitted values * "response" the sames as "link" for "gaussian" family. * "coefficients" computes the coefficients at values of `s` * "nonzero" retuns a list of the indices of the nonzero coefficients for each value of `s`. For example, ```{r} predict(fit, newx = x[1:5,], type = "response", s = 0.05) ``` gives the fitted values for the first 5 observations at $\lambda = 0.05$. If multiple values of `s` are supplied, a matrix of predictions is produced. Users can customize K-fold cross-validation. In addition to all the `glmnet` parameters, `cv.glmnet` has its special parameters including `nfolds` (the number of folds), `foldid` (user-supplied folds), `type.measure`(the loss used for cross-validation): * "deviance" or "mse" uses squared loss * "mae" uses mean absolute error As an example, ```{r} cvfit = cv.glmnet(x, y, type.measure = "mse", nfolds = 20) ``` does 20-fold cross-validation, based on mean squared error criterion (default though). Parallel computing is also supported by `cv.glmnet`. To make it work, users must register parallel beforehand. We give a simple example of comparison here. Unfortunately, the package `doMC` is not available on Windows platforms (it is on others), so we cannot run the code here, but we make it looks as if we have. ```{r, eval=FALSE} require(doMC) registerDoMC(cores=2) X = matrix(rnorm(1e4 * 200), 1e4, 200) Y = rnorm(1e4) ``` ```{r, eval=FALSE} system.time(cv.glmnet(X, Y)) ``` ```{r, echo=FALSE} structure(c(2.44, 0.08, 2.518, 0, 0), class = "proc_time", .Names = c("user.self", "sys.self", "elapsed", "user.child", "sys.child")) ``` ```{r, eval=FALSE} system.time(cv.glmnet(X, Y, parallel = TRUE)) ``` ```{r, echo=FALSE} structure(c(0.508999999999999, 0.057, 1.56699999999999, 1.941, 0.1), class = "proc_time", .Names = c("user.self", "sys.self", "elapsed", "user.child", "sys.child")) ``` As suggested from the above, parallel computing can significantly speed up the computation process especially for large-scale problems. Functions `coef` and `predict` on cv.glmnet object are similar to those for a `glmnet` object, except that two special strings are also supported by `s` (the values of $\lambda$ requested): * "lambda.1se": the largest $\lambda$ at which the MSE is within one standard error of the minimal MSE. * "lambda.min": the $\lambda$ at which the minimal MSE is achieved. ```{r} cvfit$lambda.min coef(cvfit, s = "lambda.min") predict(cvfit, newx = x[1:5,], s = "lambda.min") ``` Users can control the folds used. Here we use the same folds so we can also select a value for $\alpha$. ```{r} foldid=sample(1:10,size=length(y),replace=TRUE) cv1=cv.glmnet(x,y,foldid=foldid,alpha=1) cv.5=cv.glmnet(x,y,foldid=foldid,alpha=.5) cv0=cv.glmnet(x,y,foldid=foldid,alpha=0) ``` There are no built-in plot functions to put them all on the same plot, so we are on our own here: ```{r} par(mfrow=c(2,2)) plot(cv1);plot(cv.5);plot(cv0) plot(log(cv1$lambda),cv1$cvm,pch=19,col="red",xlab="log(Lambda)",ylab=cv1$name) points(log(cv.5$lambda),cv.5$cvm,pch=19,col="grey") points(log(cv0$lambda),cv0$cvm,pch=19,col="blue") legend("topleft",legend=c("alpha= 1","alpha= .5","alpha 0"),pch=19,col=c("red","grey","blue")) ``` We see that lasso (`alpha=1`) does about the best here. We also see that the range of lambdas used differs with alpha. #### Coefficient upper and lower bounds These are recently added features that enhance the scope of the models. Suppose we want to fit our model, but limit the coefficients to be bigger than -0.7 and less than 0.5. This is easily achieved via the `upper.limits` and `lower.limits` arguments: ```{r} tfit=glmnet(x,y,lower=-.7,upper=.5) plot(tfit) ``` These are rather arbitrary limits; often we want the coefficients to be positive, so we can set only `lower.limit` to be 0. (Note, the lower limit must be no bigger than zero, and the upper limit no smaller than zero.) These bounds can be a vector, with different values for each coefficient. If given as a scalar, the same number gets recycled for all. #### Penalty factors This argument allows users to apply separate penalty factors to each coefficient. Its default is 1 for each parameter, but other values can be specified. In particular, any variable with `penalty.factor` equal to zero is not penalized at all! Let $v_j$ denote the penalty factor for $j$ th variable. The penalty term becomes $$ \lambda \sum_{j=1}^p \boldsymbol{v_j} P_\alpha(\beta_j) = \lambda \sum_{j=1}^p \boldsymbol{v_j} \left[ (1-\alpha)\frac{1}{2} \beta_j^2 + \alpha |\beta_j| \right]. $$ Note the penalty factors are internally rescaled to sum to nvars. This is very useful when people have prior knowledge or preference over the variables. In many cases, some variables may be so important that one wants to keep them all the time, which can be achieved by setting corresponding penalty factors to 0: ```{r} p.fac = rep(1, 20) p.fac[c(5, 10, 15)] = 0 pfit = glmnet(x, y, penalty.factor = p.fac) plot(pfit, label = TRUE) ``` We see from the labels that the three variables with 0 penalty factors always stay in the model, while the others follow typical regularization paths and shrunken to 0 eventually. Some other useful arguments. `exclude` allows one to block certain variables from being the model at all. Of course, one could simply subset these out of `x`, but sometimes `exclude` is more useful, since it returns a full vector of coefficients, just with the excluded ones set to zero. There is also an `intercept` argument which defaults to `TRUE`; if `FALSE` the intercept is forced to be zero. #### Customizing plots Sometimes, especially when the number of variables is small, we want to add variable labels to a plot. Since `glmnet` is intended primarily for wide data, this is not supprted in `plot.glmnet`. However, it is easy to do, as the following little toy example shows. We first generate some data, with 10 variables, and for lack of imagination and ease we give them simple character names. We then fit a glmnet model, and make the standard plot. ```{r} set.seed(101) x=matrix(rnorm(1000),100,10) y=rnorm(100) vn=paste("var",1:10) fit=glmnet(x,y) plot(fit) ``` We wish to label the curves with the variable names. Here s a simple way to do this, using the `axis` command in R (and a little research into how to customize it). We need to have the positions of the coefficients at the end of the path, and we need to make some space using the `par` command, so that our labels will fit in. This requires knowing how long your labels are, but here they are all quite short. ```{r} par(mar=c(4.5,4.5,1,4)) plot(fit) vnat=coef(fit) vnat=vnat[-1,ncol(vnat)] # remove the intercept, and get the coefficients at the end of the path axis(4, at=vnat,line=-.5,label=vn,las=1,tick=FALSE, cex.axis=0.5) ``` We have done nothing here to avoid overwriting of labels, in the event that they are close together. This would be a bit more work, but perhaps best left alone, anyway. ### Multiresponse Gaussian Family The multiresponse Gaussian family is obtained using `family = "mgaussian"` option in `glmnet`. It is very similar to the single-response case above. This is useful when there are a number of (correlated) responses - the so-called "multi-task learning" problem. Here the sharing involves which variables are selected, since when a variable is selected, a coefficient is fit for each response. Most of the options are the same, so we focus here on the differences with the single response model. Obviously, as the name suggests, $y$ is not a vector, but a matrix of quantitative responses in this section. The coefficients at each value of lambda are also a matrix as a result. Here we solve the following problem: $$ \min_{(\beta_0, \beta) \in \mathbb{R}^{(p+1)\times K}}\frac{1}{2N} \sum_{i=1}^N ||y_i -\beta_0-\beta^T x_i||^2_F+\lambda \left[ (1-\alpha)||\beta||_F^2/2 + \alpha\sum_{j=1}^p||\beta_j||_2\right]. $$ Here $\beta_j$ is the jth row of the $p\times K$ coefficient matrix $\beta$, and we replace the absolute penalty on each single coefficient by a group-lasso penalty on each coefficient K-vector $\beta_j$ for a single predictor $x_j$. We use a set of data generated beforehand for illustration. ```{r} data(MultiGaussianExample) ``` We fit the data, with an object "mfit" returned. ```{r} mfit = glmnet(x, y, family = "mgaussian") ``` For multiresponse Gaussian, the options in `glmnet` are almost the same as the single-response case, such as `alpha`, `weights`, `nlambda`, `standardize`. A exception to be noticed is that `standardize.response` is only for `mgaussian` family. The default value is `FALSE`. If `standardize.response = TRUE`, it standardizes the response variables. To visualize the coefficients, we use the `plot` function. ```{r} plot(mfit, xvar = "lambda", label = TRUE, type.coef = "2norm") ``` Note that we set `type.coef = "2norm"`. Under this setting, a single curve is plotted per variable, with value equal to the $\ell_2$ norm. The default setting is `type.coef = "coef"`, where a coefficient plot is created for each response (multiple figures). `xvar` and `label` are two other options besides ordinary graphical parameters. They are the same as the single-response case. We can extract the coefficients at requested values of $\lambda$ by using the function `coef` and make predictions by `predict`. The usage is similar and we only provide an example of `predict` here. ```{r} predict(mfit, newx = x[1:5,], s = c(0.1, 0.01)) ``` The prediction result is saved in a three-dimensional array with the first two dimensions being the prediction matrix for each response variable and the third indicating the response variables. We can also do k-fold cross-validation. The options are almost the same as the ordinary Gaussian family and we do not expand here. ```{r} cvmfit = cv.glmnet(x, y, family = "mgaussian") ``` We plot the resulting `cv.glmnet` object "cvmfit". ```{r} plot(cvmfit) ``` To show explicitly the selected optimal values of $\lambda$, type ```{r} cvmfit$lambda.min cvmfit$lambda.1se ``` As before, the first one is the value at which the minimal mean squared error is achieved and the second is for the most regularized model whose mean squared error is within one standard error of the minimal. Prediction for `cv.glmnet` object works almost the same as for `glmnet` object. We omit the details here. [Back to Top](#top) ## Logistic Regression Logistic regression is another widely-used model when the response is categorical. If there are two possible outcomes, we use the binomial distribution, else we use the multinomial. ### Binomial Models For the binomial model, suppose the response variable takes value in $\mathcal{G}=\{1,2\}$. Denote $y_i = I(g_i=1)$. We model $$\mbox{Pr}(G=2|X=x)=\frac{e^{\beta_0+\beta^Tx}}{1+e^{\beta_0+\beta^Tx}},$$ which can be written in the following form $$\log\frac{\mbox{Pr}(G=2|X=x)}{\mbox{Pr}(G=1|X=x)}=\beta_0+\beta^Tx,$$ the so-called "logistic" or log-odds transformation. The objective function for the penalized logistic regression uses the negative binomial log-likelihood, and is $$ \min_{(\beta_0, \beta) \in \mathbb{R}^{p+1}} -\left[\frac{1}{N} \sum_{i=1}^N y_i \cdot (\beta_0 + x_i^T \beta) - \log (1+e^{(\beta_0+x_i^T \beta)})\right] + \lambda \big[ (1-\alpha)||\beta||_2^2/2 + \alpha||\beta||_1\big]. $$ Logistic regression is often plagued with degeneracies when $p > N$ and exhibits wild behavior even when $N$ is close to $p$; the elastic-net penalty alleviates these issues, and regularizes and selects variables as well. Our algorithm uses a quadratic approximation to the log-likelihood, and then coordinate descent on the resulting penalized weighted least-squares problem. These constitute an outer and inner loop. For illustration purpose, we load pre-generated input matrix `x` and the response vector `y` from the data file. ```{r} data(BinomialExample) ``` The input matrix $x$ is the same as other families. For binomial logistic regression, the response variable $y$ should be either a factor with two levels, or a two-column matrix of counts or proportions. Other optional arguments of `glmnet` for binomial regression are almost same as those for Gaussian family. Don't forget to set `family` option to "binomial". ```{r} fit = glmnet(x, y, family = "binomial") ``` Like before, we can print and plot the fitted object, extract the coefficients at specific $\lambda$'s and also make predictions. For plotting, the optional arguments such as `xvar` and `label` are similar to the Gaussian. We plot against the deviance explained and show the labels. ```{r} plot(fit, xvar = "dev", label = TRUE) ``` Prediction is a little different for logistic from Gaussian, mainly in the option `type`. "link" and "response" are never equivalent and "class" is only available for logistic regression. In summary, * "link" gives the linear predictors * "response" gives the fitted probabilities * "class" produces the class label corresponding to the maximum probability. * "coefficients" computes the coefficients at values of `s` * "nonzero" retuns a list of the indices of the nonzero coefficients for each value of `s`. For "binomial" models, results ("link", "response", "coefficients", "nonzero") are returned only for the class corresponding to the second level of the factor response. In the following example, we make prediction of the class labels at $\lambda = 0.05, 0.01$. ```{r} predict(fit, newx = x[1:5,], type = "class", s = c(0.05, 0.01)) ``` For logistic regression, `cv.glmnet` has similar arguments and usage as Gaussian. `nfolds`, `weights`, `lambda`, `parallel` are all available to users. There are some differences in `type.measure`: "deviance" and "mse" do not both mean squared loss and "class" is enabled. Hence, * "mse" uses squared loss. * "deviance" uses actual deviance. * "mae" uses mean absolute error. * "class" gives misclassification error. * "auc" (for two-class logistic regression ONLY) gives area under the ROC curve. For example, ```{r} cvfit = cv.glmnet(x, y, family = "binomial", type.measure = "class") ``` It uses misclassification error as the criterion for 10-fold cross-validation. We plot the object and show the optimal values of $\lambda$. ```{r} plot(cvfit) ``` ```{r} cvfit$lambda.min cvfit$lambda.1se ``` `coef` and `predict` are simliar to the Gaussian case and we omit the details. We review by some examples. ```{r} coef(cvfit, s = "lambda.min") ``` As mentioned previously, the results returned here are only for the second level of the factor response. ```{r} predict(cvfit, newx = x[1:10,], s = "lambda.min", type = "class") ``` Like other GLMs, glmnet allows for an "offset". This is a fixed vector of N numbers that is added into the linear predictor. For example, you may have fitted some other logistic regression using other variables (and data), and now you want to see if the present variables can add anything. So you use the predicted logit from the other model as an offset in. ### Multinomial Models For the multinomial model, suppose the response variable has $K$ levels ${\cal G}=\{1,2,\ldots,K\}$. Here we model $$\mbox{Pr}(G=k|X=x)=\frac{e^{\beta_{0k}+\beta_k^Tx}}{\sum_{\ell=1}^Ke^{\beta_{0\ell}+\beta_\ell^Tx}}.$$ Let ${Y}$ be the $N \times K$ indicator response matrix, with elements $y_{i\ell} = I(g_i=\ell)$. Then the elastic-net penalized negative log-likelihood function becomes $$ \ell(\{\beta_{0k},\beta_{k}\}_1^K) = -\left[\frac{1}{N} \sum_{i=1}^N \Big(\sum_{k=1}^Ky_{il} (\beta_{0k} + x_i^T \beta_k)- \log \big(\sum_{k=1}^K e^{\beta_{0k}+x_i^T \beta_k}\big)\Big)\right] +\lambda \left[ (1-\alpha)||\beta||_F^2/2 + \alpha\sum_{j=1}^p||\beta_j||_q\right]. $$ Here we really abuse notation! $\beta$ is a $p\times K$ matrix of coefficients. $\beta_k$ refers to the kth column (for outcome category k), and $\beta_j$ the jth row (vector of K coefficients for variable j). The last penalty term is $||\beta_j||_q$, we have two options for q: $q\in \{1,2\}$. When q=1, this is a lasso penalty on each of the parameters. When q=2, this is a grouped-lasso penalty on all the K coefficients for a particular variables, which makes them all be zero or nonzero together. The standard Newton algorithm can be tedious here. Instead, we use a so-called partial Newton algorithm by making a partial quadratic approximation to the log-likelihood, allowing only $(\beta_{0k}, \beta_k)$ to vary for a single class at a time. For each value of $\lambda$, we first cycle over all classes indexed by $k$, computing each time a partial quadratic approximation about the parameters of the current class. Then the inner procedure is almost the same as for the binomial case. This is the case for lasso (q=1). When q=2, we use a different approach, which we wont dwell on here. For the multinomial case, the usage is similar to logistic regression, and we mainly illustrate by examples and address any differences. We load a set of generated data. ```{r} data(MultinomialExample) ``` The optional arguments in `glmnet` for multinomial logistic regression are mostly similar to binomial regression except for a few cases. The response variable can be a `nc >= 2` level factor, or a `nc`-column matrix of counts or proportions. Internally glmnet will make the rows of this matrix sum to 1, and absorb the total mass into the weight for that observation. `offset` should be a `nobs x nc` matrix if there is one. A special option for multinomial regression is `type.multinomial`, which allows the usage of a grouped lasso penalty if `type.multinomial = "grouped"`. This will ensure that the multinomial coefficients for a variable are all in or out together, just like for the multi-response Gaussian. ```{r} fit = glmnet(x, y, family = "multinomial", type.multinomial = "grouped") ``` We plot the resulting object "fit". ```{r} plot(fit, xvar = "lambda", label = TRUE, type.coef = "2norm") ``` The options are `xvar`, `label` and `type.coef`, in addition to other ordinary graphical parameters. `xvar` and `label` are the same as other families while `type.coef` is only for multinomial regression and multiresponse Gaussian model. It can produce a figure of coefficients for each response variable if `type.coef = "coef"` or a figure showing the $\ell_2$-norm in one figure if `type.coef = "2norm"` We can also do cross-validation and plot the returned object. ```{r} cvfit=cv.glmnet(x, y, family="multinomial", type.multinomial = "grouped", parallel = TRUE) plot(cvfit) ``` Note that although `type.multinomial` is not a typical argument in `cv.glmnet`, in fact any argument that can be passed to `glmnet` is valid in the argument list of `cv.glmnet`. We also use parallel computing to accelerate the calculation. Users may wish to predict at the optimally selected $\lambda$: ```{r} predict(cvfit, newx = x[1:10,], s = "lambda.min", type = "class") ``` [Back to Top](#top) ## Poisson Models Poisson regression is used to model count data under the assumption of Poisson error, or otherwise non-negative data where the mean and variance are proportional. Like the Gaussian and binomial model, the Poisson is a member of the exponential family of distributions. We usually model its positive mean on the log scale: $\log \mu(x) = \beta_0+\beta' x$. The log-likelihood for observations $\{x_i,y_i\}_1^N$ is given my $$ l(\beta|X, Y) = \sum_{i=1}^N \left(y_i (\beta_0+\beta' x_i) - e^{\beta_0+\beta^Tx_i}\right). $$ As before, we optimize the penalized log-lielihood: $$ \min_{\beta_0,\beta} -\frac1N l(\beta|X, Y) + \lambda \left((1-\alpha) \sum_{i=1}^N \beta_i^2/2) +\alpha \sum_{i=1}^N |\beta_i|\right). $$ Glmnet uses an outer Newton loop, and an inner weighted least-squares loop (as in logistic regression) to optimize this criterion. First, we load a pre-generated set of Poisson data. ```{r} data(PoissonExample) ``` We apply the function `glmnet` with the `"poisson"` option. ```{r} fit = glmnet(x, y, family = "poisson") ``` The optional input arguments of `glmnet` for `"poisson"` family are similar to those for others. `offset` is a useful argument particularly in Poisson models. When dealing with rate data in Poisson models, the counts collected are often based on different exposures, such as length of time observed, area and years. A poisson rate $\mu(x)$ is relative to a unit exposure time, so if an observation $y_i$ was exposed for $E_i$ units of time, then the expected count would be $E_i\mu(x)$, and the log mean would be $\log(E_i)+\log(\mu(x))$. In a case like this, we would supply an *offset* $\log(E_i)$ for each observation. Hence `offset` is a vector of length `nobs` that is included in the linear predictor. Other families can also use options, typically for different reasons. (Warning: if `offset` is supplied in `glmnet`, offsets must also also be supplied to `predict` to make reasonable predictions.) Again, we plot the coefficients to have a first sense of the result. ```{r} plot(fit) ``` Like before, we can extract the coefficients and make predictions at certain $\lambda$'s by using `coef` and `predict` respectively. The optional input arguments are similar to those for other families. In function `predict`, the option `type`, which is the type of prediction required, has its own specialties for Poisson family. That is, * "link" (default) gives the linear predictors like others * "response" gives the fitted mean * "coefficients" computes the coefficients at the requested values for `s`, which can also be realized by `coef` function * "nonzero" returns a a list of the indices of the nonzero coefficients for each value of `s`. For example, we can do as follows. ```{r} coef(fit, s = 1) predict(fit, newx = x[1:5,], type = "response", s = c(0.1,1)) ``` We may also use cross-validation to find the optimal $\lambda$'s and thus make inferences. ```{r} cvfit = cv.glmnet(x, y, family = "poisson") ``` Options are almost the same as the Gaussian family except that for `type.measure`, * "deviance" (default) gives the deviance * "mse" stands for mean squared error * "mae" is for mean absolute error. We can plot the `cv.glmnet` object. ```{r} plot(cvfit) ``` We can also show the optimal $\lambda$'s and the corresponding coefficients. ```{r} opt.lam = c(cvfit$lambda.min, cvfit$lambda.1se) coef(cvfit, s = opt.lam) ``` The `predict` method is similar and we do not repeat it here. [Back to Top](#top) ## Cox Models The Cox proportional hazards model is commonly used for the study of the relationship beteween predictor variables and survival time. In the usual survival analysis framework, we have data of the form $(y_1, x_1, \delta_1), \ldots, (y_n, x_n, \delta_n)$ where $y_i$, the observed time, is a time of failure if $\delta_i$ is 1 or right-censoring if $\delta_i$ is 0. We also let $t_1 < t_2 < \ldots < t_m$ be the increasing list of unique failure times, and $j(i)$ denote the index of the observation failing at time $t_i$. The Cox model assumes a semi-parametric form for the hazard $$ h_i(t) = h_0(t) e^{x_i^T \beta}, $$ where $h_i(t)$ is the hazard for patient $i$ at time $t$, $h_0(t)$ is a shared baseline hazard, and $\beta$ is a fixed, length $p$ vector. In the classic setting $n \geq p$, inference is made via the partial likelihood $$ L(\beta) = \prod_{i=1}^m \frac{e^{x_{j(i)}^T \beta}}{\sum_{j \in R_i} e^{x_j^T \beta}}, $$ where $R_i$ is the set of indices $j$ with $y_j \geq t_i$ (those at risk at time $t_i$). Note there is no intercept in the Cox mode (its built into the baseline hazard, and like it, would cancel in the partial likelihood.) We penalize the negative log of the partial likelihood, just like the other models, with an elastic-net penalty. We use a pre-generated set of sample data and response. Users can load their own data and follow a similar procedure. In this case $x$ must be an $n\times p$ matrix of covariate values - each row corresponds to a patient and each column a covariate. $y$ is an $n \times 2$ matrix, with a column "time" of failure/censoring times, and "status" a 0/1 indicator, with 1 meaning the time is a failure time, and zero a censoring time. ```{r} data(CoxExample) y[1:5,] ``` The `Surv` function in the package `survival` can create such a matrix. Note, however, that the `coxph` and related linear models can handle interval and other fors of censoring, while glmnet can only handle right censoring in its present form. We apply the `glmnet` function to compute the solution path under default settings. ```{r} fit = glmnet(x, y, family = "cox") ``` All the standard options are available such as `alpha`, `weights`, `nlambda` and `standardize`. Their usage is similar as in the Gaussian case and we omit the details here. Users can also refer to the help file `help(glmnet)`. We can plot the coefficients. ```{r} plot(fit) ``` As before, we can extract the coefficients at certain values of $\lambda$. ```{r} coef(fit, s = 0.05) ``` Since the Cox Model is not commonly used for prediction, we do not give an illustrative example on prediction. If needed, users can refer to the help file by typing `help(predict.glmnet)`. Also, the function `cv.glmnet` can be used to compute $k$-fold cross-validation for the Cox model. The usage is similar to that for other families except for two main differences. One is that `type.measure` only supports "deviance"(also default), which gives the partial-likelihood. The other is in the option `grouped`. `grouped = TRUE` obtains the CV partial likelihood for the Kth fold by subtraction; by subtracting the log partial likelihood evaluated on the full dataset from that evaluated on the on the (K-1)/K dataset. This makes more efficient use of risk sets. With `grouped=FALSE` the log partial likelihood is computed only on the Kth fold, which is only reasonable if each fold has a large number of observations. ```{r} cvfit = cv.glmnet(x, y, family = "cox") ``` Once fit, we can view the optimal $\lambda$ value and a cross validated error plot to help evaluate our model. ```{r} plot(cvfit) ``` As previously, the left vertical line in our plot shows us where the CV-error curve hits its minimum. The right vertical line shows us the most regularized model with CV-error within 1 standard deviation of the minimum. We also extract such optimal $\lambda$'s. ```{r} cvfit$lambda.min cvfit$lambda.1se ``` We can check the active covariates in our model and see their coefficients. ```{r} coef.min = coef(cvfit, s = "lambda.min") active.min = which(coef.min != 0) index.min = coef.min[active.min] ``` ```{r} index.min coef.min ``` [Back to Top](#top) ## Sparse Matrices Our package supports sparse input matrices, which allow efficient storage and operations of large matrices but with only a few nonzero entries. It is available for all families except for the `cox` family. The usage of sparse matrices (inherit from class `"sparseMatrix"` as in package `Matrix`) in `glmnet ` is the same as if a regular matrix is provided. We load a set of sample data created beforehand. ```{r} data(SparseExample) ``` It loads `x`, a 100*20 sparse input matrix and `y`, the response vector. ```{r} class(x) ``` Users can create a sparse matrix with the function `sparseMatrix` by providing the locations and values of the nonzero entries. Alternatively, `Matrix` function can also be used to contruct a sparse matrix by setting `sparse = TRUE`, but this defeats the purpose somewhat. We can fit the model the same way as before. ```{r} fit = glmnet(x, y) ``` We also do the cross-validation and plot the resulting object. ```{r} cvfit = cv.glmnet(x, y) plot(cvfit) ``` The usage of other functions are similar and we do not expand here. Note that sparse matrices can also be used for `newx`, the new input matrix in the `predict` function. For example, ```{r} i = sample(1:5, size = 25, replace = TRUE) j = sample(1:20, size = 25, replace = TRUE) x = rnorm(25) nx = sparseMatrix(i = i, j = j, x = x, dims = c(5, 20)) predict(cvfit, newx = nx, s = "lambda.min") ``` [Back to Top](#top) ## Appendix 0: Convergence Criteria Glmnet uses a convergence criterion that focuses not on coefficient change but rather the impact of the change on the fitted values, and hence the loss part of the objective. The net result is a weighted norm of the coefficient change vector. For gaussian models it uses the following. Suppose observation $i$ has weight $w_i$. Let $v_j$ be the (weighted) sum-of-squares for variable $x_j$: $$v_j=\sum_{i=1}^Nw_ix_{ij}^2.$$ If there is an intercept in the model, these $x_j$ will be centered by the weighted mean, and hence this would be a weighted variance. After $\hat\beta_j^o$ has been updated to $\hat\beta_j^n$, we compute $\Delta_j=v_j(\hat\beta_j^o-\hat\beta_j^n)^2$. After a complete cycle of coordinate descent, we look at $\Delta_{max}=\max_j\Delta_j$. Why this measure? We can write $$\Delta_j=\frac1N\sum_{i=1}^N w_j(x_{ij}\hat\beta_j^o-x_{ij}\hat\beta_j^n)^2,$$ which measures the weighted sum of squares of changes in fitted values for this term. This measures the impact of the change in this coefficient on the fit. If the largest such change is negligible, we stop. For logistic regression, and other non-Gaussian models it is similar for the inner loop. Only now the weights for each observation are more complex. For example, for logisitic regression the weights are those that arise from the current Newton step, namely $w_i^*=w_i\hat p_i(1-\hat p_i)$. Here $\hat p_i$ are the fitted probabilities as we entered the current inner loop. The intuition is the same --- it measures the impact of the coefficient change on the current weighted least squares loss, or quadratic approximation to the log-likelihood loss. What about outer-loop convergence? We use the same measure, except now $\hat\beta^o$ is the coefficient vector before we entered this inner loop, and $\hat\beta^n$ the converged solution for this inner loop. Hence if this Newton step had no impact, we declare outer-loop convergence. [Back to Top](#top) ## Appendix 1: Internal Parameters Our package has a set of internal parameters which control some aspects of the computation of the path. The *factory default* settings are expected to serve in most cases, and users do not need to make changes unless there are special requirements. There are several parameters that users can change: `fdev` - minimum fractional change in deviance for stopping path; factory default = 1.0e-5 `devmax` - maximum fraction of explained deviance for stopping path; factory default = 0.999 * `eps` - minimum value of lambda.min.ratio (see glmnet); factory default= 1.0e-6 * `big` - large floating point number; factory default = 9.9e35. Inf in definition of upper.limit is set to big * `mnlam` - minimum number of path points (lambda values) allowed; factory default = 5 * `pmin` - minimum null probability for any class; factory default = 1.0e-5 * `exmx` - maximum allowed exponent; factory default = 250.0 * `prec` - convergence threshold for multi-response bounds adjustment solution; factory default = 1.0e-10 * `mxit` - maximum iterations for multiresponse bounds adjustment solution; factory default = 100 * `factory` - If `TRUE`, reset all the parameters to the factory default; default is `FALSE` We illustrate the usage by an example. Note that any changes made hold for the duration of the R session, or unless they are changed by the user with a subsequent call to `glmnet.control`. ```{r} data(QuickStartExample) fit = glmnet(x, y) print(fit) ``` We can change the minimum fractional change in deviance for stopping path and compare the results. ```{r} glmnet.control(fdev = 0) fit = glmnet(x, y) print(fit) ``` We set `fdev = 0` to continue all along the path, even without much change. The length of the sequence becomes 100, which is the default of `nlambda`. Users can also reset to the default settings. ```{r} glmnet.control(factory = TRUE) ``` The current settings are obtained as follows. ```{r} glmnet.control() ``` [Back to Top](#top) ## Appendix 2: Comparison with Other Packages Some people may want to use `glmnet` to solve the Lasso or elastic-net problem at a single $\lambda$. We compare here the solution by `glmnet` with other packages (such as CVX), and also as an illustration of parameter settings in this situation. __Warning__: Though such problems can be solved by `glmnet`, it is __not recommended__ and is not the spirit of the package. `glmnet` fits the __entire__ solution path for Lasso or elastic-net problems efficiently with various techniques such as warm start. Those advantages will disappear if the $\lambda$ sequence is forced to be only one value. Nevertheless, we still illustrate with a typical example in linear model in the following for the purpose of comparison. Given $X, Y$ and $\lambda_0 > 0$, we want to find $\beta$ such that $$ \min_{\beta} ||Y - X\beta||_2^2 + \lambda_0 ||\beta||_1, $$ where, say, $\lambda_0 = 8$. We first solve using `glmnet`. Notice that there is no intercept term in the objective function, and the columns of $X$ are not necessarily standardized. Corresponding parameters have to be set to make it work correctly. In addition, there is a $1/(2n)$ factor before the quadratic term by default, we need to adjust $\lambda$ accordingly. For the purpose of comparison, the `thresh` option is specified to be 1e-20. However, this is not necessary in many practical applications. ```{r, echo=FALSE} data(QuickStartExample) ``` ```{r,eval=FALSE} fit = glmnet(x, y, intercept = F, standardize = F, lambda = 8/(2*dim(x)[1]), thresh = 1e-20) ``` We then extract the coefficients (with no intercept). ```{r,eval=FALSE} beta_glmnet = as.matrix(predict(fit, type = "coefficients")[-1,]) ``` In linear model as here this approach worked because we were using squared error loss, but with any nonlinear family, it will probably fail. The reason is we are not using step length optimization, and so rely on very good warm starts to put us in the quadratic region of the loss function. Alternatively, a more stable and __strongly recommended__ way to perform this task is to first fit the entire Lasso or elastic-net path without specifying `lambda`, but then provide the requested $\lambda_0$ to `predict` function to extract the corresponding coefficients. In fact, if $\lambda_0$ is not in the $\lambda$ sequence generated by `glmnet`, the path will be refitted along a new $\lambda$ sequence that includes the requested value $\lambda_0$ and the old sequence, and the coefficients will be returned at $\lambda_0$ based on the new fit. Remember to set `exact = TRUE` in `predict` function to get the exact solution. Otherwise, it will be approximated by linear interpolation. ```{r} fit = glmnet(x, y, intercept = F, standardize = F, thresh = 1e-20) beta_glmnet = as.matrix(predict(fit, s = 8/(2*dim(x)[1]), type = "coefficients", exact = TRUE, x=x, y=y)[-1,]) ``` We also use CVX, a general convex optimization solver, to solve this specific Lasso problem. Users could also call CVX from R using the `CVXfromR` package and solve the problem as follows. ```{r, eval=FALSE} library(CVXfromR) setup.dir = "change/this/to/your/cvx/directory" n = dim(x)[1]; p = dim(x)[2] cvxcode = paste("variables beta(p)", "minimize(square_pos(norm(y - x * beta, 2)) + lambda * norm(beta, 1))", sep = ";") Lasso = CallCVX(cvxcode, const.var = list(p = p, x = x, y = y, lambda = 8), opt.var.names = "beta", setup.dir = setup.dir, matlab.call = "change/this/to/path/to/matlab") beta_CVX = Lasso$beta ``` For convenience here, the results were saved in `CVXResult.RData`, and we simply load in the results. ```{r} data(CVXResults) ``` In addition, we use `lars` to solve the same problem. ```{r,message=FALSE} require(lars) ``` ```{r} fit_lars = lars(x, y, type = "lasso", intercept = F, normalize = F) beta_lars = predict(fit_lars, s = 8/2, type = "coefficients", mode = "lambda")$coefficients ``` The results are listed below up to 6 decimal digits (due to convergence thresholds). ```{r} cmp = round(cbind(beta_glmnet, beta_lars, beta_CVX), digits = 6) colnames(cmp) = c("beta_glmnet", "beta_lars", "beta_CVX") cmp ``` [Back to Top](#top) ## References

Jerome Friedman, Trevor Hastie and Rob Tibshirani. (2008).
Regularization Paths for Generalized Linear Models via Coordinate Descent
Journal of Statistical Software, Vol. 33(1), 1-22 Feb 2010.

Noah Simon, Jerome Friedman, Trevor Hastie and Rob Tibshirani. (2011).
Regularization Paths for Cox's Proportional Hazards Model via Coordinate Descent
Journal of Statistical Software, Vol. 39(5) 1-13.

Robert Tibshirani, Jacob Bien, Jerome Friedman, Trevor Hastie, Noah Simon, Jonathan Taylor, Ryan J. Tibshirani. (2010).
Strong Rules for Discarding Predictors in Lasso-type Problems
Journal of the Royal Statistical Society: Series B (Statistical Methodology), 74(2), 245-266.

Noah Simon, Jerome Friedman and Trevor Hastie (2013).
A Blockwise Descent Algorithm for Group-penalized Multiresponse and Multinomial Regression
(in arXiv, submitted)

glmnet/inst/mortran/0000755000176200001440000000000013240602077014200 5ustar liggesusersglmnet/inst/mortran/glmnet5dp.m0000644000176200001440000045057113251374510016271 0ustar liggesusers" c c newGLMnet (5/12/14) c c c Elastic net with squared-error loss c c dense predictor matrix: c c call elnet(ka,parm,no,ni,x,y,w,jd,vp,cl,ne,nx,nlam,flmin,ulam,thr,isd, c intr,maxit,lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr) c c x(no,ni) = predictor data matrix flat file (overwritten) c c c sparse predictor matrix: c c call spelnet(ka,parm,no,ni,x,ix,jx,y,w,jd,vp,cl,ne,nx,nlam,flmin,ulam,thr, c isd,intr,maxit,lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr) c c x, ix, jx = predictor data matrix in compressed sparse row format c c c other inputs: c c ka = algorithm flag c ka=1 => covariance updating algorithm c ka=2 => naive algorithm c parm = penalty member index (0 <= parm <= 1) c = 0.0 => ridge c = 1.0 => lasso c no = number of observations c ni = number of predictor variables c y(no) = response vector (overwritten) c w(no)= observation weights (overwritten) c jd(jd(1)+1) = predictor variable deletion flag c jd(1) = 0 => use all variables c jd(1) != 0 => do not use variables jd(2)...jd(jd(1)+1) c vp(ni) = relative penalties for each predictor variable c vp(j) = 0 => jth variable unpenalized c cl(2,ni) = interval constraints on coefficient values (overwritten) c cl(1,j) = lower bound for jth coefficient value (<= 0.0) c cl(2,j) = upper bound for jth coefficient value (>= 0.0) c ne = maximum number of variables allowed to enter largest model c (stopping criterion) c nx = maximum number of variables allowed to enter all models c along path (memory allocation, nx > ne). c nlam = (maximum) number of lamda values c flmin = user control of lamda values (>=0) c flmin < 1.0 => minimum lamda = flmin*(largest lamda value) c flmin >= 1.0 => use supplied lamda values (see below) c ulam(nlam) = user supplied lamda values (ignored if flmin < 1.0) c thr = convergence threshold for each lamda solution. c iterations stop when the maximum reduction in the criterion value c as a result of each parameter update over a single pass c is less than thr times the null criterion value. c (suggested value, thr=1.0e-5) c isd = predictor variable standarization flag: c isd = 0 => regression on original predictor variables c isd = 1 => regression on standardized predictor variables c Note: output solutions always reference original c variables locations and scales. c intr = intercept flag c intr = 0/1 => don't/do include intercept in model c maxit = maximum allowed number of passes over the data for all lambda c values (suggested values, maxit = 100000) c c output: c c lmu = actual number of lamda values (solutions) c a0(lmu) = intercept values for each solution c ca(nx,lmu) = compressed coefficient values for each solution c ia(nx) = pointers to compressed coefficients c nin(lmu) = number of compressed coefficients for each solution c rsq(lmu) = R**2 values for each solution c alm(lmu) = lamda values corresponding to each solution c nlp = actual number of passes over the data for all lamda values c jerr = error flag: c jerr = 0 => no error c jerr > 0 => fatal error - no output returned c jerr < 7777 => memory allocation error c jerr = 7777 => all used predictors have zero variance c jerr = 10000 => maxval(vp) <= 0.0 C jerr < 0 => non fatal error - partial output: c Solutions for larger lamdas (1:(k-1)) returned. c jerr = -k => convergence for kth lamda value not reached c after maxit (see above) iterations. c jerr = -10000-k => number of non zero coefficients along path c exceeds nx (see above) at kth lamda value. c c c c least-squares utility routines: c c c uncompress coefficient vectors for all solutions: c c call solns(ni,nx,lmu,ca,ia,nin,b) c c input: c c ni,nx = input to elnet c lmu,ca,ia,nin = output from elnet c c output: c c b(ni,lmu) = all elnet returned solutions in uncompressed format c c c uncompress coefficient vector for particular solution: c c call uncomp(ni,ca,ia,nin,a) c c input: c c ni = total number of predictor variables c ca(nx) = compressed coefficient values for the solution c ia(nx) = pointers to compressed coefficients c nin = number of compressed coefficients for the solution c c output: c c a(ni) = uncompressed coefficient vector c referencing original variables c c c evaluate linear model from compressed coefficients and c uncompressed predictor matrix: c c call modval(a0,ca,ia,nin,n,x,f); c c input: c c a0 = intercept c ca(nx) = compressed coefficient values for a solution c ia(nx) = pointers to compressed coefficients c nin = number of compressed coefficients for solution c n = number of predictor vectors (observations) c x(n,ni) = full (uncompressed) predictor matrix c c output: c c f(n) = model predictions c c c evaluate linear model from compressed coefficients and c compressed predictor matrix: c c call cmodval(a0,ca,ia,nin,x,ix,jx,n,f); c c input: c c a0 = intercept c ca(nx) = compressed coefficient values for a solution c ia(nx) = pointers to compressed coefficients c nin = number of compressed coefficients for solution c x, ix, jx = predictor matrix in compressed sparse row format c n = number of predictor vectors (observations) c c output: c c f(n) = model predictions c c c c c Multiple response c elastic net with squared-error loss c c dense predictor matrix: c c call multelnet(parm,no,ni,nr,x,y,w,jd,vp,cl,ne,nx,nlam,flmin,ulam,thr,isd, c jsd,intr,maxit,lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr) c c x(no,ni) = predictor data matrix flat file (overwritten) c c c sparse predictor matrix: c c call multspelnet(parm,no,ni,nr,x,ix,jx,y,w,jd,vp,cl,ne,nx,nlam,flmin,ulam,thr, c isd,jsd,intr,maxit,lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr) c c x, ix, jx = predictor data matrix in compressed sparse row format c c other inputs: c c nr = number of response variables c y(no,nr) = response data matrix (overwritten) c jsd = response variable standardization flag c jsd = 0 => regression using original response variables c jsd = 1 => regression using standardized response variables c Note: output solutions always reference original c variables locations and scales. c all other inputs same as elnet/spelnet above c c output: c c a0(nr,lmu) = intercept values for each solution c ca(nx,nr,lmu) = compressed coefficient values for each solution c all other outputs same as elnet/spelnet above c (jerr = 90000 => bounds adjustment non convergence) c c c c multiple response least-squares utility routines: c c c uncompress coefficient matrix for all solutions: c c call multsolns(ni,nx,nr,lmu,ca,ia,nin,b) c c input: c c ni,nx,nr = input to multelnet c lmu,ca,ia,nin = output from multelnet c c output: c c b(ni,nr,lmu) = all multelnet returned solutions in uncompressed format c c c uncompress coefficient matrix for particular solution: c c call multuncomp(ni,nr,nx,ca,ia,nin,a) c c input: c c ni,nr,nx = input to multelnet c ca(nx,nr) = compressed coefficient values for the solution c ia(nx) = pointers to compressed coefficients c nin = number of compressed coefficients for the solution c c output: c c a(ni,nr) = uncompressed coefficient matrix c referencing original variables c c c evaluate linear model from compressed coefficients and c uncompressed predictor matrix: c c call multmodval(nx,nr,a0,ca,ia,nin,n,x,f); c c input: c c nx,nr = input to multelnet c a0(nr) = intercepts c ca(nx,nr) = compressed coefficient values for a solution c ia(nx) = pointers to compressed coefficients c nin = number of compressed coefficients for solution c n = number of predictor vectors (observations) c x(n,ni) = full (uncompressed) predictor matrix c c output: c c f(nr,n) = model predictions c c c evaluate linear model from compressed coefficients and c compressed predictor matrix: c c call multcmodval(nx,nr,a0,ca,ia,nin,x,ix,jx,n,f); c c input: c c nx,nr = input to multelnet c a0(nr) = intercepts c ca(nx,nr) = compressed coefficient values for a solution c ia(nx) = pointers to compressed coefficients c nin = number of compressed coefficients for solution c x, ix, jx = predictor matrix in compressed sparse row format c n = number of predictor vectors (observations) c c output: c c f(nr,n) = model predictions c c c c c Symmetric binomial/multinomial logistic elastic net c c c dense predictor matrix: c c call lognet (parm,no,ni,nc,x,y,o,jd,vp,cl,ne,nx,nlam,flmin,ulam,thr,isd, c intr,maxit,kopt,lmu,a0,ca,ia,nin,dev0,fdev,alm,nlp,jerr) c c x(no,ni) = predictor data matrix flat file (overwritten) c c c sparse predictor matrix: c c call splognet (parm,no,ni,nc,x,ix,jx,y,o,jd,vp,cl,ne,nx,nlam,flmin, c ulam,thr,isd,intr,maxit,kopt,lmu,a0,ca,ia,nin,dev0,fdev,alm,nlp,jerr) c c x, ix, jx = predictor data matrix in compressed sparse row format c c c other inputs: c c parm,no,ni,jd,vp,cl,ne,nx,nlam,flmin,ulam,thr,isd,intr,maxit c = same as elnet above. c c nc = number of classes (distinct outcome values) c nc=1 => binomial two-class logistic regression c (all output references class 1) c y(no,max(2,nc)) = number of each class at each design point c entries may have fractional values or all be zero (overwritten) c o(no,nc) = observation off-sets for each class c kopt = optimization flag c kopt = 0 => Newton-Raphson (recommended) c kpot = 1 => modified Newton-Raphson (sometimes faster) c kpot = 2 => nonzero coefficients same for each class (nc > 1) c c c output: c c lmu,ia,nin,alm,nlp = same as elent above c c a0(nc,lmu) = intercept values for each class at each solution c ca(nx,nc,lmu) = compressed coefficient values for each class at c each solution c dev0 = null deviance (intercept only model) c fdev(lmu) = fraction of devience explained by each solution c jerr = error flag c jerr = 0 => no error c jerr > 0 => fatal error - no output returned c jerr < 7777 => memory allocation error c jerr = 7777 => all used predictors have zero variance c jerr = 8000 + k => null probability < 1.0e-5 for class k c jerr = 9000 + k => null probability for class k c > 1.0 - 1.0e-5 c jerr = 10000 => maxval(vp) <= 0.0 c jerr = 90000 => bounds adjustment non convergence C jerr < 0 => non fatal error - partial output: c Solutions for larger lamdas (1:(k-1)) returned. c jerr = -k => convergence for kth lamda value not reached c after maxit (see above) iterations. c jerr = -10000-k => number of non zero coefficients along path c exceeds nx (see above) at kth lamda value. c jerr = -20000-k => max(p*(1-p)) < 1.0e-6 at kth lamda value. c o(no,nc) = training data values for last (lmu_th) solution linear c combination. c c c c logistic/multinomial utilitity routines: c c c uncompress coefficient vectors for all solutions: c c call lsolns(ni,nx,nc,lmu,ca,ia,nin,b) c c input: c c ni,nx,nc = input to lognet c lmu,ca,ia,nin = output from lognet c c output: c c b(ni,nc,lmu) = all lognet returned solutions in uncompressed format c c c uncompress coefficient vector for particular solution: c c call luncomp(ni,nx,nc,ca,ia,nin,a) c c input: c c ni, nx, nc = same as above c ca(nx,nc) = compressed coefficient values (for each class) c ia(nx) = pointers to compressed coefficients c nin = number of compressed coefficients c c output: c c a(ni,nc) = uncompressed coefficient vectors c referencing original variables c c c evaluate linear model from compressed coefficients and c uncompressed predictor vectors: c c call lmodval(nt,x,nc,nx,a0,ca,ia,nin,ans); c c input: c c nt = number of observations c x(nt,ni) = full (uncompressed) predictor vectors c nc, nx = same as above c a0(nc) = intercepts c ca(nx,nc) = compressed coefficient values (for each class) c ia(nx) = pointers to compressed coefficients c nin = number of compressed coefficients c c output: c c ans(nc,nt) = model predictions c c c evaluate linear model from compressed coefficients and c compressed predictor matrix: c c call lcmodval(nc,nx,a0,ca,ia,nin,x,ix,jx,n,f); c c input: c c nc, nx = same as above c a0(nc) = intercept c ca(nx,nc) = compressed coefficient values for a solution c ia(nx) = pointers to compressed coefficients c nin = number of compressed coefficients for solution c x, ix, jx = predictor matrix in compressed sparse row format c n = number of predictor vectors (observations) c c output: c c f(nc,n) = model predictions c c c c c Poisson elastic net c c c dense predictor matrix: c c call fishnet (parm,no,ni,x,y,o,w,jd,vp,cl,ne,nx,nlam,flmin,ulam,thr, c isd,intr,maxit,lmu,a0,ca,ia,nin,dev0,fdev,alm,nlp,jerr) c c x(no,ni) = predictor data matrix flat file (overwritten) c c sparse predictor matrix: c c call spfishnet (parm,no,ni,x,ix,jx,y,o,w,jd,vp,cl,ne,nx,nlam,flmin,ulam,thr, c isd,intr,maxit,lmu,a0,ca,ia,nin,dev0,fdev,alm,nlp,jerr) c c x, ix, jx = predictor data matrix in compressed sparse row format c c other inputs: c c y(no) = observation response counts c o(no) = observation off-sets c parm,no,ni,w,jd,vp,cl,ne,nx,nlam,flmin,ulam,thr,isd,intr,maxit c = same as elnet above c c output: c c lmu,a0,ca,ia,nin,alm = same as elnet above c dev0,fdev = same as lognet above c nlp = total number of passes over predictor variables c jerr = error flag c jerr = 0 => no error c jerr > 0 => fatal error - no output returned c jerr < 7777 => memory allocation error c jerr = 7777 => all used predictors have zero variance c jerr = 8888 => negative response count y values c jerr = 9999 => no positive observations weights c jerr = 10000 => maxval(vp) <= 0.0 C jerr < 0 => non fatal error - partial output: c Solutions for larger lamdas (1:(k-1)) returned. c jerr = -k => convergence for kth lamda value not reached c after maxit (see above) iterations. c jerr = -10000-k => number of non zero coefficients along path c exceeds nx (see above) at kth lamda value. c o(no) = training data values for last (lmu_th) solution linear c combination. c c c Poisson utility routines: c c c same as elnet above: c c call solns(ni,nx,lmu,ca,ia,nin,b) c call uncomp(ni,ca,ia,nin,a) c call modval(a0,ca,ia,nin,n,x,f); c call cmodval(a0,ca,ia,nin,x,ix,jx,n,f); c c compute deviance for given uncompressed data and set of uncompressed c solutions c c call deviance(no,ni,x,y,o,w,nsol,a0,a,flog,jerr) c c input: c c no = number of observations c ni = number of predictor variables c x(no,ni) = predictor data matrix flat file c y(no) = observation response counts c o(no) = observation off-sets c w(no)= observation weights c nsol = number of solutions c a0(nsol) = intercept for each solution c a(ni,nsol) = solution coefficient vectors (uncompressed) c c output: c c flog(nsol) = respective deviance values minus null deviance c jerr = error flag - see above c c c compute deviance for given compressed data and set of uncompressed solutions c c call spdeviance(no,ni,x,ix,jx,y,o,w,nsol,a0,a,flog,jerr) c c input: c c no = number of observations c ni = number of predictor variables c x, ix, jx = predictor data matrix in compressed sparse row format c y(no) = observation response counts c o(no) = observation off-sets c w(no)= observation weights c nsol = number of solutions c a0(nsol) = intercept for each solution c a(ni,nsol) = solution coefficient vectors (uncompressed) c c output c c flog(nsol) = respective deviance values minus null deviance c jerr = error flag - see above c c c compute deviance for given compressed data and compressed solutions c c call cspdeviance(no,x,ix,jx,y,o,w,nx,lmu,a0,ca,ia,nin,flog,jerr) c c input: c c no = number of observations c x, ix, jx = predictor data matrix in compressed sparse row format c y(no) = observation response counts c o(no) = observation off-sets c w(no)= observation weights c nx = input to spfishnet c lmu,a0(lmu),ca(nx,lmu),ia(nx),nin(lmu) = output from spfishnet c c output c c flog(lmu) = respective deviance values minus null deviance c jerr = error flag - see above c c c c Elastic net with Cox proportional hazards model c c c dense predictor matrix: c c call coxnet (parm,no,ni,x,y,d,o,w,jd,vp,cl,ne,nx,nlam,flmin,ulam,thr, c maxit,isd,lmu,ca,ia,nin,dev0,fdev,alm,nlp,jerr) c c input: c c x(no,ni) = predictor data matrix flat file (overwritten) c y(no) = observation times c d(no) = died/censored indicator c d(i)=0.0 => y(i) = censoring time c d(i)=1.0 => y(i) = death time c o(no) = observation off-sets c parm,no,ni,w,jd,vp,cl,ne,nx,nlam,flmin,ulam,thr,maxit c = same as fishnet above c c output: c c lmu,ca,ia,nin,dev0,fdev,alm,nlp = same as fishnet above c jerr = error flag c jerr = 0 => no error - output returned c jerr > 0 => fatal error - no output returned c jerr < 7777 => memory allocation error c jerr = 7777 => all used predictors have zero variance c jerr = 8888 => all observations censored (d(i)=0.0) c jerr = 9999 => no positive observations weights c jerr = 10000 => maxval(vp) <= 0.0 c jerr = 20000, 30000 => initialization numerical error C jerr < 0 => non fatal error - partial output: c Solutions for larger lamdas (1:(k-1)) returned. c jerr = -k => convergence for kth lamda value not reached c after maxit (see above) iterations. c jerr = -10000-k => number of non zero coefficients along path c exceeds nx (see above) at kth lamda value. c jerr = -30000-k => numerical error at kth lambda value c o(no) = training data values for last (lmu_th) solution linear c combination. c c c c coxnet utility routines: c c c same as elnet above: c c call solns(ni,nx,lmu,ca,ia,nin,b) c call uncomp(ni,ca,ia,nin,a) c c c evaluate linear model from compressed coefficients and c uncompressed predictor matrix: c c call cxmodval(ca,ia,nin,n,x,f); c c input: c c ca(nx) = compressed coefficient values for a solution c ia(nx) = pointers to compressed coefficients c nin = number of compressed coefficients for solution c n = number of predictor vectors (observations) c x(n,ni) = full (uncompressed) predictor matrix c c output: c c f(n) = model predictions c c c compute log-likelihood for given data set and vectors of coefficients c c call loglike(no,ni,x,y,d,o,w,nvec,a,flog,jerr) c c input: c c no = number of observations c ni = number of predictor variables c x(no,ni) = predictor data matrix flat file c y(no) = observation times c d(no) = died/censored indicator c d(i)=0.0 => y(i) = censoring time c d(i)=1.0 => y(i) = death time c o(no) = observation off-sets c w(no)= observation weights c nvec = number of coefficient vectors c a(ni,nvec) = coefficient vectors (uncompressed) c c output c c flog(nvec) = respective log-likelihood values c jerr = error flag - see coxnet above c c c c c Changing internal parameter values c c c call chg_fract_dev(fdev) c fdev = minimum fractional change in deviance for stopping path c default = 1.0e-5 c c call chg_dev_max(devmax) c devmax = maximum fraction of explained deviance for stopping path c default = 0.999 c c call chg_min_flmin(eps) c eps = minimum value of flmin (see above). default= 1.0e-6 c c call chg_big(big) c big = large floating point number. default = 9.9e35 c c call chg_min_lambdas(mnlam) c mnlam = minimum number of path points (lambda values) allowed c default = 5 c c call chg_min_null_prob(pmin) c pmin = minimum null probability for any class. default = 1.0e-9 c c call chg _max_exp(exmx) c exmx = maximum allowed exponent. default = 250.0 c c call chg_bnorm(prec,mxit) c prec = convergence threshold for multi response bounds adjustment c solution. default = 1.0e-10. c mxit = maximum iterations for multiresponse bounds adjustment solution c default = 100. c c c Obtain current internal parameter values c c call get_int_parms(fdev,eps,big,mnlam,devmax,pmin,exmx) c call get_bnorm(prec,mxit); c c c " subroutine get_int_parms(sml,eps,big,mnlam,rsqmax,pmin,exmx); implicit double precision(a-h,o-z); data sml0,eps0,big0,mnlam0,rsqmax0,pmin0,exmx0 /1.0d-5,1.0d-6,9.9d35,5,0.999,1.0d-9,250.0/; sml=sml0; eps=eps0; big=big0; mnlam=mnlam0; rsqmax=rsqmax0; pmin=pmin0; exmx=exmx0; return; entry chg_fract_dev(arg); sml0=arg; return; entry chg_dev_max(arg); rsqmax0=arg; return; entry chg_min_flmin(arg); eps0=arg; return; entry chg_big(arg); big0=arg; return; entry chg_min_lambdas(irg); mnlam0=irg; return; entry chg_min_null_prob(arg); pmin0=arg; return; entry chg_max_exp(arg); exmx0=arg; return; end; subroutine elnet (ka,parm,no,ni,x,y,w,jd,vp,cl,ne,nx,nlam,flmin,ulam,thr,isd,intr,maxit, lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr); implicit double precision(a-h,o-z); double precision x(no,ni),y(no),w(no),vp(ni),ca(nx,nlam),cl(2,ni); double precision ulam(nlam),a0(nlam),rsq(nlam),alm(nlam); integer jd(*),ia(nx),nin(nlam); %fortran double precision, dimension (:), allocatable :: vq; %mortran if maxval(vp).le.0.0 < jerr=10000; return;> allocate(vq(1:ni),stat=jerr); if(jerr.ne.0) return; vq=max(0d0,vp); vq=vq*ni/sum(vq); if ka.eq.1 < call elnetu (parm,no,ni,x,y,w,jd,vq,cl,ne,nx,nlam,flmin,ulam,thr,isd,intr,maxit, lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr); > else < call elnetn (parm,no,ni,x,y,w,jd,vq,cl,ne,nx,nlam,flmin,ulam,thr,isd,intr,maxit, lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr); > deallocate(vq); return; end; subroutine elnetu (parm,no,ni,x,y,w,jd,vp,cl,ne,nx,nlam,flmin,ulam,thr,isd,intr,maxit, lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr); implicit double precision(a-h,o-z); double precision x(no,ni),y(no),w(no),vp(ni),ulam(nlam),cl(2,ni); double precision ca(nx,nlam),a0(nlam),rsq(nlam),alm(nlam); integer jd(*),ia(nx),nin(nlam); %fortran double precision, dimension (:), allocatable :: xm,xs,g,xv,vlam integer, dimension (:), allocatable :: ju %mortran allocate(g(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(xm(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(xs(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(ju(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(xv(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(vlam(1:nlam),stat=jerr); if(jerr.ne.0) return; call chkvars(no,ni,x,ju); if(jd(1).gt.0) ju(jd(2:(jd(1)+1)))=0; if maxval(ju).le.0 < jerr=7777; return;> call standard(no,ni,x,y,w,isd,intr,ju,g,xm,xs,ym,ys,xv,jerr); if(jerr.ne.0) return; cl=cl/ys; if isd.gt.0 < > if(flmin.ge.1.0) vlam=ulam/ys; call elnet1(parm,ni,ju,vp,cl,g,no,ne,nx,x,nlam,flmin,vlam,thr,maxit,xv, lmu,ca,ia,nin,rsq,alm,nlp,jerr); if(jerr.gt.0) return; a0(k)=0.0; if(intr.ne.0) a0(k)=ym-dot_product(ca(1:nk,k),xm(ia(1:nk))); > deallocate(xm,xs,g,ju,xv,vlam); return; end; subroutine standard (no,ni,x,y,w,isd,intr,ju,g,xm,xs,ym,ys,xv,jerr); implicit double precision(a-h,o-z); double precision x(no,ni),y(no),w(no),g(ni),xm(ni),xs(ni),xv(ni); integer ju(ni); %fortran double precision, dimension (:), allocatable :: v %mortran allocate(v(1:no),stat=jerr); if(jerr.ne.0) return; w=w/sum(w); v=sqrt(w); if intr.eq.0 < ym=0.0; y=v*y; ys=sqrt(dot_product(y,y)-dot_product(v,y)**2); y=y/ys; else < xs(j)=1.0;> > > else < if isd.eq.0 < xs=1.0;> else < xv=1.0; > ym=dot_product(w,y); y=v*(y-ym); ys=sqrt(dot_product(y,y)); y=y/ys; > g=0.0; deallocate(v); return; end; subroutine elnet1 (beta,ni,ju,vp,cl,g,no,ne,nx,x,nlam,flmin,ulam,thr,maxit,xv, lmu,ao,ia,kin,rsqo,almo,nlp,jerr); implicit double precision(a-h,o-z); double precision vp(ni),g(ni),x(no,ni),ulam(nlam),ao(nx,nlam); double precision rsqo(nlam),almo(nlam),xv(ni); double precision cl(2,ni); integer ju(ni),ia(nx),kin(nlam); %fortran double precision, dimension (:), allocatable :: a,da integer, dimension (:), allocatable :: mm double precision, dimension (:,:), allocatable :: c allocate(c(1:ni,1:nx),stat=jerr) if(jerr.ne.0) return; %mortran call get_int_parms(sml,eps,big,mnlam,rsqmax,pmin,exmx); allocate(a(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(mm(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(da(1:ni),stat=jerr); if(jerr.ne.0) return; bta=beta; omb=1.0-bta; if flmin.lt.1.0 < eqs=max(eps,flmin); alf=eqs**(1.0/(nlam-1));> rsq=0.0; a=0.0; mm=0; /nlp,nin/=0; iz=0; mnl=min(mnlam,nlam); "Begin: added by Naras" alm=0.0; "End: added by Naras" elseif m.gt.2 < alm=alm*alf;> elseif m.eq.1 < alm=big;> else < alm=0.0; alm=alf*alm/max(bta,1.0d-3); > dem=alm*omb; ab=alm*bta; rsq0=rsq; jz=1; loop < if(iz*jz.ne.0) go to :b:; nlp=nlp+1; dlx=0.0; if j.eq.k < c(j,nin)=xv(j); next;> c(j,nin)=dot_product(x(:,j),x(:,k)); > mm(k)=nin; ia(nin)=k; > del=a(k)-ak; rsq=rsq+del*(2.0*g(k)-del*xv(k)); dlx=max(xv(k)*del**2,dlx); > if(dlx.lt.thr) exit; if(nin.gt.nx) exit; if nlp.gt.maxit < jerr=-m; return;> :b: iz=1; da(1:nin)=a(ia(1:nin)); loop < nlp=nlp+1; dlx=0.0; > if(dlx.lt.thr) exit; if nlp.gt.maxit < jerr=-m; return;> > da(1:nin)=a(ia(1:nin))-da(1:nin); jz=0; > if nin.gt.nx < jerr=-10000-m; exit;> if(nin.gt.0) ao(1:nin,m)=a(ia(1:nin)); kin(m)=nin; rsqo(m)=rsq; almo(m)=alm; lmu=m; if(m.lt.mnl) next; if(flmin.ge.1.0) next; me=0; if(me.gt.ne) exit; if(rsq-rsq0.lt.sml*rsq) exit; if(rsq.gt.rsqmax) exit; > deallocate(a,mm,c,da); return; end; subroutine elnetn (parm,no,ni,x,y,w,jd,vp,cl,ne,nx,nlam,flmin,ulam,thr,isd, intr,maxit,lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr); implicit double precision(a-h,o-z); double precision vp(ni),x(no,ni),y(no),w(no),ulam(nlam),cl(2,ni); double precision ca(nx,nlam),a0(nlam),rsq(nlam),alm(nlam); integer jd(*),ia(nx),nin(nlam); %fortran double precision, dimension (:), allocatable :: xm,xs,xv,vlam integer, dimension (:), allocatable :: ju %mortran allocate(xm(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(xs(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(ju(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(xv(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(vlam(1:nlam),stat=jerr); if(jerr.ne.0) return; call chkvars(no,ni,x,ju); if(jd(1).gt.0) ju(jd(2:(jd(1)+1)))=0; if maxval(ju).le.0 < jerr=7777; return;> call standard1(no,ni,x,y,w,isd,intr,ju,xm,xs,ym,ys,xv,jerr); if(jerr.ne.0) return; cl=cl/ys; if isd.gt.0 < > if(flmin.ge.1.0) vlam=ulam/ys; call elnet2(parm,ni,ju,vp,cl,y,no,ne,nx,x,nlam,flmin,vlam,thr,maxit,xv, lmu,ca,ia,nin,rsq,alm,nlp,jerr); if(jerr.gt.0) return; a0(k)=0.0; if(intr.ne.0) a0(k)=ym-dot_product(ca(1:nk,k),xm(ia(1:nk))); > deallocate(xm,xs,ju,xv,vlam); return; end; subroutine standard1 (no,ni,x,y,w,isd,intr,ju,xm,xs,ym,ys,xv,jerr); implicit double precision(a-h,o-z); double precision x(no,ni),y(no),w(no),xm(ni),xs(ni),xv(ni); integer ju(ni); %fortran double precision, dimension (:), allocatable :: v %mortran allocate(v(1:no),stat=jerr); if(jerr.ne.0) return; w=w/sum(w); v=sqrt(w); if intr.eq.0 < ym=0.0; y=v*y; ys=sqrt(dot_product(y,y)-dot_product(v,y)**2); y=y/ys; else < xs(j)=1.0;> > go to :out:; > if isd.eq.0 < xs=1.0;> else < xv=1.0; > ym=dot_product(w,y); y=v*(y-ym); ys=sqrt(dot_product(y,y)); y=y/ys; :out:deallocate(v); return; end; subroutine elnet2(beta,ni,ju,vp,cl,y,no,ne,nx,x,nlam,flmin,ulam,thr,maxit,xv, lmu,ao,ia,kin,rsqo,almo,nlp,jerr); implicit double precision(a-h,o-z); double precision vp(ni),y(no),x(no,ni),ulam(nlam),ao(nx,nlam); double precision rsqo(nlam),almo(nlam),xv(ni); double precision cl(2,ni); integer ju(ni),ia(nx),kin(nlam); %fortran double precision, dimension (:), allocatable :: a,g integer, dimension (:), allocatable :: mm,ix %mortran call get_int_parms(sml,eps,big,mnlam,rsqmax,pmin,exmx); allocate(a(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(mm(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(g(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(ix(1:ni),stat=jerr); if(jerr.ne.0) return; bta=beta; omb=1.0-bta; ix=0; "Begin: added by Naras" alf=1.0; "End: added by Naras" if flmin.lt.1.0 < eqs=max(eps,flmin); alf=eqs**(1.0/(nlam-1));> rsq=0.0; a=0.0; mm=0; /nlp,nin/=0; iz=0; mnl=min(mnlam,nlam); alm=0.0; elseif m.gt.2 < alm=alm*alf;> elseif m.eq.1 < alm=big;> else < alm0=0.0; alm0=alm0/max(bta,1.0d-3); alm=alf*alm0; > dem=alm*omb; ab=alm*bta; rsq0=rsq; jz=1; tlam=bta*(2.0*alm-alm0); loop < if(iz*jz.ne.0) go to :b:; :again:nlp=nlp+1; dlx=0.0; del=a(k)-ak; rsq=rsq+del*(2.0*gk-del*xv(k)); y=y-del*x(:,k); dlx=max(xv(k)*del**2,dlx); > if(nin.gt.nx) exit; if dlx.lt.thr < ixx=0; > if(ixx.eq.1) go to :again:; exit; > if nlp.gt.maxit < jerr=-m; return;> :b: iz=1; loop < nlp=nlp+1; dlx=0.0; if(dlx.lt.thr) exit; if nlp.gt.maxit < jerr=-m; return;> > jz=0; > if nin.gt.nx < jerr=-10000-m; exit;> if(nin.gt.0) ao(1:nin,m)=a(ia(1:nin)); kin(m)=nin; rsqo(m)=rsq; almo(m)=alm; lmu=m; if(m.lt.mnl) next; if(flmin.ge.1.0) next; me=0; if(me.gt.ne) exit; if(rsq-rsq0.lt.sml*rsq) exit; if(rsq.gt.rsqmax) exit; > deallocate(a,mm,g,ix); return; end; subroutine chkvars(no,ni,x,ju); implicit double precision(a-h,o-z); double precision x(no,ni); integer ju(ni); > return; end; subroutine uncomp(ni,ca,ia,nin,a); implicit double precision(a-h,o-z); double precision ca(*),a(ni); integer ia(*); a=0.0; if(nin.gt.0) a(ia(1:nin))=ca(1:nin); return; end; subroutine modval(a0,ca,ia,nin,n,x,f); implicit double precision(a-h,o-z); double precision ca(nin),x(n,*),f(n); integer ia(nin); f=a0; if(nin.le.0) return; return; end; subroutine spelnet (ka,parm,no,ni,x,ix,jx,y,w,jd,vp,cl,ne,nx,nlam,flmin,ulam,thr,isd,intr, maxit,lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr); implicit double precision(a-h,o-z); double precision x(*),y(no),w(no),vp(ni),ulam(nlam),cl(2,ni); double precision ca(nx,nlam),a0(nlam),rsq(nlam),alm(nlam); integer ix(*),jx(*),jd(*),ia(nx),nin(nlam); %fortran double precision, dimension (:), allocatable :: vq; %mortran if maxval(vp).le.0.0 < jerr=10000; return;> allocate(vq(1:ni),stat=jerr); if(jerr.ne.0) return; vq=max(0d0,vp); vq=vq*ni/sum(vq); if ka.eq.1 < call spelnetu (parm,no,ni,x,ix,jx,y,w,jd,vq,cl,ne,nx,nlam,flmin,ulam,thr,isd, intr,maxit,lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr); > else < call spelnetn (parm,no,ni,x,ix,jx,y,w,jd,vq,cl,ne,nx,nlam,flmin,ulam,thr,isd,intr, maxit,lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr); > deallocate(vq); return; end; subroutine spelnetu (parm,no,ni,x,ix,jx,y,w,jd,vp,cl,ne,nx,nlam,flmin,ulam,thr,isd,intr, maxit,lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr); implicit double precision(a-h,o-z); double precision x(*),y(no),w(no),vp(ni),ulam(nlam),cl(2,ni); double precision ca(nx,nlam),a0(nlam),rsq(nlam),alm(nlam); integer ix(*),jx(*),jd(*),ia(nx),nin(nlam); %fortran double precision, dimension (:), allocatable :: xm,xs,g,xv,vlam integer, dimension (:), allocatable :: ju %mortran allocate(g(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(xm(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(xs(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(ju(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(xv(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(vlam(1:nlam),stat=jerr); if(jerr.ne.0) return; call spchkvars(no,ni,x,ix,ju); if(jd(1).gt.0) ju(jd(2:(jd(1)+1)))=0; if maxval(ju).le.0 < jerr=7777; return;> call spstandard(no,ni,x,ix,jx,y,w,ju,isd,intr,g,xm,xs,ym,ys,xv,jerr); if(jerr.ne.0) return; cl=cl/ys; if isd.gt.0 < > if(flmin.ge.1.0) vlam=ulam/ys; call spelnet1(parm,ni,g,no,w,ne,nx,x,ix,jx,ju,vp,cl,nlam,flmin,vlam,thr,maxit, xm,xs,xv,lmu,ca,ia,nin,rsq,alm,nlp,jerr); if(jerr.gt.0) return; a0(k)=0.0; if(intr.ne.0) a0(k)=ym-dot_product(ca(1:nk,k),xm(ia(1:nk))); > deallocate(xm,xs,g,ju,xv,vlam); return; end; subroutine spstandard (no,ni,x,ix,jx,y,w,ju,isd,intr,g,xm,xs,ym,ys,xv,jerr); implicit double precision(a-h,o-z); double precision x(*),y(no),w(no),g(ni),xm(ni),xs(ni),xv(ni); integer ix(*),jx(*),ju(ni); w=w/sum(w); if intr.eq.0 < ym=0.0; ys=sqrt(dot_product(w,y**2)-dot_product(w,y)**2); y=y/ys; else < xs(j)=1.0;> > > else < if isd.eq.0 < xs=1.0;> else < xv=1.0;> ym=dot_product(w,y); y=y-ym; ys=sqrt(dot_product(w,y**2)); y=y/ys; > g=0.0; return; end; subroutine spelnet1(beta,ni,g,no,w,ne,nx,x,ix,jx,ju,vp,cl,nlam,flmin,ulam, thr,maxit,xm,xs,xv,lmu,ao,ia,kin,rsqo,almo,nlp,jerr); implicit double precision(a-h,o-z); double precision g(ni),vp(ni),x(*),ulam(nlam),w(no); double precision ao(nx,nlam),rsqo(nlam),almo(nlam); double precision xm(ni),xs(ni),xv(ni),cl(2,ni); integer ix(*),jx(*),ju(ni),ia(nx),kin(nlam); %fortran double precision, dimension (:), allocatable :: a,da integer, dimension (:), allocatable :: mm double precision, dimension (:,:), allocatable :: c allocate(c(1:ni,1:nx),stat=jerr) if(jerr.ne.0) return; %mortran call get_int_parms(sml,eps,big,mnlam,rsqmax,pmin,exmx); allocate(a(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(mm(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(da(1:ni),stat=jerr); if(jerr.ne.0) return; bta=beta; omb=1.0-bta; "Begin: added by Naras" alm=0.0; alf=1.0; "End: added by Naras" if flmin.lt.1.0 < eqs=max(eps,flmin); alf=eqs**(1.0/(nlam-1));> rsq=0.0; a=0.0; mm=0; /nlp,nin/=0; iz=0; mnl=min(mnlam,nlam); elseif m.gt.2 < alm=alm*alf;> elseif m.eq.1 < alm=big;> else < alm=0.0; alm=alf*alm/max(bta,1.0d-3); > dem=alm*omb; ab=alm*bta; rsq0=rsq; jz=1; loop < if(iz*jz.ne.0) go to :b:; nlp=nlp+1; dlx=0.0; if j.eq.k < c(j,nin)=xv(j); next;> c(j,nin)= (row_prod(j,k,ix,jx,x,w)-xm(j)*xm(k))/(xs(j)*xs(k)); > mm(k)=nin; ia(nin)=k; > del=a(k)-ak; rsq=rsq+del*(2.0*g(k)-del*xv(k)); dlx=max(xv(k)*del**2,dlx); > if(dlx.lt.thr) exit; if(nin.gt.nx) exit; if nlp.gt.maxit < jerr=-m; return;> :b: iz=1; da(1:nin)=a(ia(1:nin)); loop < nlp=nlp+1; dlx=0.0; > if(dlx.lt.thr) exit; if nlp.gt.maxit < jerr=-m; return;> > da(1:nin)=a(ia(1:nin))-da(1:nin); jz=0; > if nin.gt.nx < jerr=-10000-m; exit;> if(nin.gt.0) ao(1:nin,m)=a(ia(1:nin)); kin(m)=nin; rsqo(m)=rsq; almo(m)=alm; lmu=m; if(m.lt.mnl) next; if(flmin.ge.1.0) next; me=0; if(me.gt.ne) exit; if(rsq-rsq0.lt.sml*rsq) exit; if(rsq.gt.rsqmax) exit; > deallocate(a,mm,c,da); return; end; subroutine spelnetn(parm,no,ni,x,ix,jx,y,w,jd,vp,cl,ne,nx,nlam,flmin,ulam, thr,isd,intr,maxit,lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr); implicit double precision(a-h,o-z); double precision x(*),vp(ni),y(no),w(no),ulam(nlam),cl(2,ni); double precision ca(nx,nlam),a0(nlam),rsq(nlam),alm(nlam); integer ix(*),jx(*),jd(*),ia(nx),nin(nlam); %fortran double precision, dimension (:), allocatable :: xm,xs,xv,vlam integer, dimension (:), allocatable :: ju %mortran allocate(xm(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(xs(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(ju(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(xv(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(vlam(1:nlam),stat=jerr); if(jerr.ne.0) return; call spchkvars(no,ni,x,ix,ju); if(jd(1).gt.0) ju(jd(2:(jd(1)+1)))=0; if maxval(ju).le.0 < jerr=7777; return;> call spstandard1(no,ni,x,ix,jx,y,w,ju,isd,intr,xm,xs,ym,ys,xv,jerr); if(jerr.ne.0) return; cl=cl/ys; if isd.gt.0 < > if(flmin.ge.1.0) vlam=ulam/ys; call spelnet2(parm,ni,y,w,no,ne,nx,x,ix,jx,ju,vp,cl,nlam,flmin,vlam,thr,maxit, xm,xs,xv,lmu,ca,ia,nin,rsq,alm,nlp,jerr); if(jerr.gt.0) return; a0(k)=0.0; if(intr.ne.0) a0(k)=ym-dot_product(ca(1:nk,k),xm(ia(1:nk))); > deallocate(xm,xs,ju,xv,vlam); return; end; subroutine spstandard1 (no,ni,x,ix,jx,y,w,ju,isd,intr,xm,xs,ym,ys,xv,jerr); implicit double precision(a-h,o-z); double precision x(*),y(no),w(no),xm(ni),xs(ni),xv(ni); integer ix(*),jx(*),ju(ni); w=w/sum(w); if intr.eq.0 < ym=0.0; ys=sqrt(dot_product(w,y**2)-dot_product(w,y)**2); y=y/ys; else < xs(j)=1.0;> > return; > if isd.eq.0 < xs=1.0;> else < xv=1.0;> ym=dot_product(w,y); y=y-ym; ys=sqrt(dot_product(w,y**2)); y=y/ys; return; end; subroutine spelnet2(beta,ni,y,w,no,ne,nx,x,ix,jx,ju,vp,cl,nlam,flmin,ulam, thr,maxit,xm,xs,xv,lmu,ao,ia,kin,rsqo,almo,nlp,jerr); implicit double precision(a-h,o-z); double precision y(no),w(no),x(*),vp(ni),ulam(nlam),cl(2,ni); double precision ao(nx,nlam),rsqo(nlam),almo(nlam),xm(ni),xs(ni),xv(ni); integer ix(*),jx(*),ju(ni),ia(nx),kin(nlam); %fortran double precision, dimension (:), allocatable :: a,g integer, dimension (:), allocatable :: mm,iy %mortran call get_int_parms(sml,eps,big,mnlam,rsqmax,pmin,exmx); allocate(a(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(mm(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(g(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(iy(1:ni),stat=jerr); if(jerr.ne.0) return; bta=beta; omb=1.0-bta; alm=0.0; iy=0; "Begin: added by Naras" alf=1.0; "End: added by Naras" if flmin.lt.1.0 < eqs=max(eps,flmin); alf=eqs**(1.0/(nlam-1));> rsq=0.0; a=0.0; mm=0; o=0.0; /nlp,nin/=0; iz=0; mnl=min(mnlam,nlam); elseif m.gt.2 < alm=alm*alf;> elseif m.eq.1 < alm=big;> else < alm0=0.0; alm0=alm0/max(bta,1.0d-3); alm=alf*alm0; > dem=alm*omb; ab=alm*bta; rsq0=rsq; jz=1; tlam=bta*(2.0*alm-alm0); loop < if(iz*jz.ne.0) go to :b:; :again:nlp=nlp+1; dlx=0.0; del=a(k)-ak; rsq=rsq+del*(2.0*gk-del*xv(k)); y(jx(jb:je))=y(jx(jb:je))-del*x(jb:je)/xs(k); o=o+del*xm(k)/xs(k); dlx=max(xv(k)*del**2,dlx); > if(nin.gt.nx) exit; if dlx.lt.thr < ixx=0; > if(ixx.eq.1) go to :again:; exit; > if nlp.gt.maxit < jerr=-m; return;> :b: iz=1; loop < nlp=nlp+1; dlx=0.0; if(dlx.lt.thr) exit; if nlp.gt.maxit < jerr=-m; return;> > jz=0; > if nin.gt.nx < jerr=-10000-m; exit;> if(nin.gt.0) ao(1:nin,m)=a(ia(1:nin)); kin(m)=nin; rsqo(m)=rsq; almo(m)=alm; lmu=m; if(m.lt.mnl) next; if(flmin.ge.1.0) next; me=0; if(me.gt.ne) exit; if(rsq-rsq0.lt.sml*rsq) exit; if(rsq.gt.rsqmax) exit; > deallocate(a,mm,g,iy); return; end; subroutine spchkvars(no,ni,x,ix,ju); implicit double precision(a-h,o-z); double precision x(*); integer ix(*),ju(ni); > else < t=x(jb); > > return; end; subroutine cmodval(a0,ca,ia,nin,x,ix,jx,n,f); implicit double precision(a-h,o-z); double precision ca(*),x(*),f(n); integer ia(*),ix(*),jx(*); f=a0; return; end; function row_prod(i,j,ia,ja,ra,w); implicit double precision(a-h,o-z); integer ia(*),ja(*); double precision ra(*),w(*); row_prod=dot(ra(ia(i)),ra(ia(j)),ja(ia(i)),ja(ia(j)), ia(i+1)-ia(i),ia(j+1)-ia(j),w); return; end; function dot(x,y,mx,my,nx,ny,w); implicit double precision(a-h,o-z); double precision x(*),y(*),w(*); integer mx(*),my(*); /i,j/=1; s=0.0; loop < until mx(i).ge.my(j) < i=i+1; if(i.gt.nx) go to :done:;> if(mx(i).eq.my(j)) go to :equal:; until my(j).ge.mx(i) < j=j+1; if(j.gt.ny) go to :done:;> if(mx(i).eq.my(j)) go to :equal:; next; :equal:s=s+w(mx(i))*x(i)*y(j); i=i+1; if(i.gt.nx) exit; j=j+1; if(j.gt.ny) exit; > :done: dot=s; return; end; subroutine lognet (parm,no,ni,nc,x,y,g,jd,vp,cl,ne,nx,nlam,flmin,ulam,thr, isd,intr,maxit,kopt,lmu,a0,ca,ia,nin,dev0,dev,alm,nlp,jerr); implicit double precision(a-h,o-z); double precision x(no,ni),y(no,max(2,nc)),g(no,nc),vp(ni),ulam(nlam); double precision ca(nx,nc,nlam),a0(nc,nlam),dev(nlam),alm(nlam),cl(2,ni); integer jd(*),ia(nx),nin(nlam); %fortran double precision, dimension (:), allocatable :: xm,xs,ww,vq,xv integer, dimension (:), allocatable :: ju %mortran if maxval(vp).le.0.0 < jerr=10000; return;> allocate(ww(1:no),stat=jerr); if(jerr.ne.0) return; allocate(ju(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(vq(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(xm(1:ni),stat=jerr); if(jerr.ne.0) return; if kopt.eq.2 < allocate(xv(1:ni),stat=jerr); if(jerr.ne.0) return;> if isd.gt.0 < allocate(xs(1:ni),stat=jerr); if(jerr.ne.0) return;> call chkvars(no,ni,x,ju); if(jd(1).gt.0) ju(jd(2:(jd(1)+1)))=0; if maxval(ju).le.0 < jerr=7777; return;> vq=max(0d0,vp); vq=vq*ni/sum(vq); sw=sum(ww); ww=ww/sw; if nc.eq.1 < call lstandard1(no,ni,x,ww,ju,isd,intr,xm,xs); if isd.gt.0 < > call lognet2n(parm,no,ni,x,y(:,1),g(:,1),ww,ju,vq,cl,ne,nx,nlam,flmin,ulam, thr,isd,intr,maxit,kopt,lmu,a0,ca,ia,nin,dev0,dev,alm,nlp,jerr); > elseif kopt.eq.2 < call multlstandard1(no,ni,x,ww,ju,isd,intr,xm,xs,xv); if isd.gt.0 < > call multlognetn(parm,no,ni,nc,x,y,g,ww,ju,vq,cl,ne,nx,nlam,flmin,ulam,thr, intr,maxit,xv,lmu,a0,ca,ia,nin,dev0,dev,alm,nlp,jerr); > else < call lstandard1(no,ni,x,ww,ju,isd,intr,xm,xs); if isd.gt.0 < > call lognetn(parm,no,ni,nc,x,y,g,ww,ju,vq,cl,ne,nx,nlam,flmin,ulam,thr, isd,intr,maxit,kopt,lmu,a0,ca,ia,nin,dev0,dev,alm,nlp,jerr); > if(jerr.gt.0) return; dev0=2.0*sw*dev0; > if intr.eq.0 < a0(ic,k)=0.0;> else < a0(ic,k)=a0(ic,k)-dot_product(ca(1:nk,ic,k),xm(ia(1:nk)));> > > deallocate(ww,ju,vq,xm); if(isd.gt.0) deallocate(xs); if(kopt.eq.2) deallocate(xv); return; end; subroutine lstandard1 (no,ni,x,w,ju,isd,intr,xm,xs); implicit double precision(a-h,o-z); double precision x(no,ni),w(no),xm(ni),xs(ni); integer ju(ni); if intr.eq.0 < > return; > > return; end; subroutine multlstandard1 (no,ni,x,w,ju,isd,intr,xm,xs,xv); implicit double precision(a-h,o-z); double precision x(no,ni),w(no),xm(ni),xs(ni),xv(ni); integer ju(ni); if intr.eq.0 < > return; > > return; end; subroutine lognet2n(parm,no,ni,x,y,g,w,ju,vp,cl,ne,nx,nlam,flmin,ulam,shri, isd,intr,maxit,kopt,lmu,a0,a,m,kin,dev0,dev,alm,nlp,jerr); implicit double precision(a-h,o-z); double precision x(no,ni),y(no),g(no),w(no),vp(ni),ulam(nlam),cl(2,ni); double precision a(nx,nlam),a0(nlam),dev(nlam),alm(nlam); integer ju(ni),m(nx),kin(nlam); %fortran double precision, dimension (:), allocatable :: b,bs,v,r,xv,q,ga integer, dimension (:), allocatable :: mm,ixx %mortran call get_int_parms(sml,eps,big,mnlam,devmax,pmin,exmx); allocate(b(0:ni),stat=jerr); if(jerr.ne.0) return; allocate(xv(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(ga(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(bs(0:ni),stat=jerr); if(jerr.ne.0) return; allocate(mm(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(ixx(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(r(1:no),stat=jerr); if(jerr.ne.0) return; allocate(v(1:no),stat=jerr); if(jerr.ne.0) return; allocate(q(1:no),stat=jerr); if(jerr.ne.0) return; fmax=log(1.0/pmin-1.0); fmin=-fmax; vmin=(1.0+pmin)*pmin*(1.0-pmin); bta=parm; omb=1.0-bta; q0=dot_product(w,y); if q0.le.pmin < jerr=8001; return;> if q0.ge.1.0-pmin < jerr=9001; return;> if(intr.eq.0.0) q0=0.5; ixx=0; al=0.0; bz=0.0; if(intr.ne.0) bz=log(q0/(1.0-q0)); if nonzero(no,g).eq.0 < vi=q0*(1.0-q0); b(0)=bz; v=vi*w; r=w*(y-q0); q=q0; xmz=vi; dev1=-(bz*q0+log(1.0-q0)); > else < b(0)=0.0; if intr.ne.0 < b(0)=azero(no,y,g,w,jerr); if(jerr.ne.0) return;> q=1.0/(1.0+exp(-b(0)-g)); v=w*q*(1.0-q); r=w*(y-q); xmz=sum(v); dev1=-(b(0)*q0+dot_product(w,y*g+log(1.0-q))); > if kopt.gt.0 < if isd.gt.0.and.intr.ne.0 < xv=0.25;> else < > > dev0=dev1; "Begin: added by Naras" alf=1.0; "End: added by Naras" if flmin.lt.1.0 < eqs=max(eps,flmin); alf=eqs**(1.0/(nlam-1));> m=0; mm=0; /nlp,nin/=0; mnl=min(mnlam,nlam); bs=0.0; b(1:ni)=0.0; shr=shri*dev0; elseif ilm.gt.2 < al=al*alf;> elseif ilm.eq.1 < al=big;> else < al0=0.0; al0=al0/max(bta,1.0d-3); al=alf*al0; > al2=al*omb; al1=al*bta; tlam=bta*(2.0*al-al0); :again:continue; loop < bs(0)=b(0); if(nin.gt.0) bs(m(1:nin))=b(m(1:nin)); if kopt.eq.0 < > loop < nlp=nlp+1; dlx=0.0; else < b(k)=max(cl(1,k),min(cl(2,k),sign(au,u)/(xv(k)+vp(k)*al2))); > d=b(k)-bk; if(abs(d).le.0.0) next; dlx=max(dlx,xv(k)*d**2); r=r-d*v*x(:,k); if mm(k).eq.0 < nin=nin+1; if(nin.gt.nx) exit; mm(k)=nin; m(nin)=k; > > if(nin.gt.nx) exit; d=0.0; if(intr.ne.0) d=sum(r)/xmz; if d.ne.0.0 < b(0)=b(0)+d; dlx=max(dlx,xmz*d**2); r=r-d*v;> if(dlx.lt.shr) exit; if nlp.gt.maxit < jerr=-ilm; return;> loop < nlp=nlp+1; dlx=0.0; else < b(k)=max(cl(1,k),min(cl(2,k),sign(au,u)/(xv(k)+vp(k)*al2))); > d=b(k)-bk; if(abs(d).le.0.0) next; dlx=max(dlx,xv(k)*d**2); r=r-d*v*x(:,k); > d=0.0; if(intr.ne.0) d=sum(r)/xmz; if d.ne.0.0 < b(0)=b(0)+d; dlx=max(dlx,xmz*d**2); r=r-d*v;> if(dlx.lt.shr) exit; if nlp.gt.maxit < jerr=-ilm; return;> > > if(nin.gt.nx) exit; elseif fi.gt.fmax < q(i)=1.0;> else < q(i)=1.0/(1.0+exp(-fi));> > v=w*q*(1.0-q); xmz=sum(v); if(xmz.le.vmin) exit; r=w*(y-q); if xmz*(b(0)-bs(0))**2.lt.shr < ix=0; if ix.eq.0 < > if(ix.eq.1) go to :again:; exit; > > > if nin.gt.nx < jerr=-10000-ilm; exit;> if(nin.gt.0) a(1:nin,ilm)=b(m(1:nin)); kin(ilm)=nin; a0(ilm)=b(0); alm(ilm)=al; lmu=ilm; devi=dev2(no,w,y,q,pmin); dev(ilm)=(dev1-devi)/dev0; if(xmz.le.vmin) exit; if(ilm.lt.mnl) next; if(flmin.ge.1.0) next; me=0; if(me.gt.ne) exit; if(dev(ilm).gt.devmax) exit; if(dev(ilm)-dev(ilm-1).lt.sml) exit; > g=log(q/(1.0-q)); deallocate(b,bs,v,r,xv,q,mm,ga,ixx); return; end; function dev2(n,w,y,p,pmin); implicit double precision(a-h,o-z); double precision w(n),y(n),p(n); pmax=1.0-pmin; s=0.0; dev2=s; return; end; function azero(n,y,g,q,jerr); implicit double precision(a-h,o-z); parameter(eps=1.0d-7); double precision y(n),g(n),q(n); %fortran double precision, dimension (:), allocatable :: e,p,w %mortran azero = 0.0; allocate(e(1:n),stat=jerr); if(jerr.ne.0) return; allocate(p(1:n),stat=jerr); if(jerr.ne.0) return; allocate(w(1:n),stat=jerr); if(jerr.ne.0) return; az=0.0; e=exp(-g); qy=dot_product(q,y); p=1.0/(1.0+e); loop < w=q*p*(1.0-p); d=(qy-dot_product(q,p))/sum(w); az=az+d; if(abs(d).lt.eps) exit; ea0=exp(-az); p=1.0/(1.0+ea0*e); > azero=az; deallocate(e,p,w); return; end; subroutine lognetn(parm,no,ni,nc,x,y,g,w,ju,vp,cl,ne,nx,nlam,flmin,ulam,shri, isd,intr,maxit,kopt,lmu,a0,a,m,kin,dev0,dev,alm,nlp,jerr); implicit double precision(a-h,o-z); double precision x(no,ni),y(no,nc),g(no,nc),w(no),vp(ni),ulam(nlam); double precision a(nx,nc,nlam),a0(nc,nlam),dev(nlam),alm(nlam),cl(2,ni); integer ju(ni),m(nx),kin(nlam); %fortran double precision, dimension (:,:), allocatable :: q double precision, dimension (:), allocatable :: sxp,sxpl double precision, dimension (:), allocatable :: di,v,r,ga double precision, dimension (:,:), allocatable :: b,bs,xv integer, dimension (:), allocatable :: mm,is,ixx allocate(b(0:ni,1:nc),stat=jerr) if(jerr.ne.0) return allocate(xv(1:ni,1:nc),stat=jerr) if(jerr.ne.0) return allocate(bs(0:ni,1:nc),stat=jerr) if(jerr.ne.0) return allocate(q(1:no,1:nc),stat=jerr) if(jerr.ne.0) return %mortran call get_int_parms(sml,eps,big,mnlam,devmax,pmin,exmx); exmn=-exmx; allocate(r(1:no),stat=jerr); if(jerr.ne.0) return; allocate(v(1:no),stat=jerr); if(jerr.ne.0) return; allocate(mm(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(is(1:max(nc,ni)),stat=jerr); if(jerr.ne.0) return; allocate(sxp(1:no),stat=jerr); if(jerr.ne.0) return; allocate(sxpl(1:no),stat=jerr); if(jerr.ne.0) return; allocate(di(1:no),stat=jerr); if(jerr.ne.0) return; allocate(ga(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(ixx(1:ni),stat=jerr); if(jerr.ne.0) return; pmax=1.0-pmin; emin=pmin/pmax; emax=1.0/emin; pfm=(1.0+pmin)*pmin; pfx=(1.0-pmin)*pmax; vmin=pfm*pmax; bta=parm; omb=1.0-bta; dev1=0.0; dev0=0.0; if q0.ge.1.0-pmin < jerr =9000+ic; return;> if intr.eq.0 < q0=1.0/nc; b(0,ic)=0.0;> else < b(0,ic)=log(q0); dev1=dev1-q0*b(0,ic);> b(1:ni,ic)=0.0; > if(intr.eq.0) dev1=log(float(nc)); ixx=0; al=0.0; if nonzero(no*nc,g).eq.0 < b(0,:)=b(0,:)-sum(b(0,:))/nc; sxp=0.0; > else < sxp=0.0; if intr.eq.0 < b(0,:)=0.0;> else < call kazero(nc,no,y,g,w,b(0,:),jerr); if(jerr.ne.0) return;> dev1=0.0; sxpl=w*log(sxp); > > dev0=dev0+dev1; if kopt.gt.0 < if isd.gt.0.and.intr.ne.0 < xv=0.25;> else < > > "Begin: added by Naras" alf=1.0; "End: added by Naras" if flmin.lt.1.0 < eqs=max(eps,flmin); alf=eqs**(1.0/(nlam-1));> m=0; mm=0; nin=0; nlp=0; mnl=min(mnlam,nlam); bs=0.0; shr=shri*dev0; ga=0.0; > elseif ilm.gt.2 < al=al*alf;> elseif ilm.eq.1 < al=big;> else < al0=0.0; al0=al0/max(bta,1.0d-3); al=alf*al0; > al2=al*omb; al1=al*bta; tlam=bta*(2.0*al-al0); :again:continue; loop < /ix,jx/=0; ig=0; elseif pic.gt.pfx < pic=1.0; v(i)=0.0;> else < v(i)=w(i)*pic*(1.0-pic); xmz=xmz+v(i);> r(i)=w(i)*(y(i,ic)-pic); > if(xmz.le.vmin) next; ig=1; if kopt.eq.0 < > loop < nlp=nlp+1; dlx=0.0; else < b(k,ic)=max(cl(1,k),min(cl(2,k),sign(au,u)/ (xv(k,ic)+vp(k)*al2))); > d=b(k,ic)-bk; if(abs(d).le.0.0) next; dlx=max(dlx,xv(k,ic)*d**2); r=r-d*v*x(:,k); if mm(k).eq.0 < nin=nin+1; if nin.gt.nx < jx=1; exit;> mm(k)=nin; m(nin)=k; > > if(jx.gt.0) exit; d=0.0; if(intr.ne.0) d=sum(r)/xmz; if d.ne.0.0 < b(0,ic)=b(0,ic)+d; dlx=max(dlx,xmz*d**2); r=r-d*v;> if(dlx.lt.shr) exit; if nlp.gt.maxit < jerr=-ilm; return;> loop < nlp=nlp+1; dlx=0.0; else < b(k,ic)=max(cl(1,k),min(cl(2,k),sign(au,u)/ (xv(k,ic)+vp(k)*al2))); > d=b(k,ic)-bk; if(abs(d).le.0.0) next; dlx=max(dlx,xv(k,ic)*d**2); r=r-d*v*x(:,k); > d=0.0; if(intr.ne.0) d=sum(r)/xmz; if d.ne.0.0 < b(0,ic)=b(0,ic)+d; dlx=max(dlx,xmz*d**2); r=r-d*v; > if(dlx.lt.shr) exit; if nlp.gt.maxit < jerr=-ilm; return;> > > if(jx.gt.0) exit; if(xmz*(b(0,ic)-bs(0,ic))**2.gt.shr) ix=1; if ix.eq.0 < > > > s=-sum(b(0,:))/nc; b(0,:)=b(0,:)+s; di=s; else < s=elc(parm,nc,cl(:,l),b(l,:),is);> b(l,:)=b(l,:)-s; di=di-s*x(:,l); > di=exp(di); sxp=sxp*di; if(jx.gt.0) exit; if(ig.eq.0) exit; if ix.eq.0 < > > if(ix.eq.1) go to :again:; exit; > > if jx.gt.0 < jerr=-10000-ilm; exit;> devi=0.0; > kin(ilm)=nin; alm(ilm)=al; lmu=ilm; dev(ilm)=(dev1-devi)/dev0; if(ig.eq.0) exit; if(ilm.lt.mnl) next; if(flmin.ge.1.0) next; if(nintot(ni,nx,nc,a(1,1,ilm),m,nin,is).gt.ne) exit; if(dev(ilm).gt.devmax) exit; if(dev(ilm)-dev(ilm-1).lt.sml) exit; > g=log(q); deallocate(sxp,b,bs,v,r,xv,q,mm,is,ga,ixx); return; end; subroutine kazero(kk,n,y,g,q,az,jerr); implicit double precision(a-h,o-z); parameter(eps=1.0d-7); double precision y(n,kk),g(n,kk),q(n),az(kk); %fortran double precision, dimension (:), allocatable :: s double precision, dimension (:,:), allocatable :: e allocate(e(1:n,1:kk),stat=jerr) if(jerr.ne.0) return %mortran allocate(s(1:n),stat=jerr); if(jerr.ne.0) return; az=0.0; e=exp(g); loop < dm=0.0; d=t/u; az(k)=az(k)+d; ed=exp(d); dm=max(dm,abs(d)); > > until dm.lt.eps; az=az-sum(az)/kk; deallocate(e,s); return; end; function elc(parm,n,cl,a,m); implicit double precision(a-h,o-z); double precision a(n),cl(2); integer m(n); fn=n; am=sum(a)/fn; if parm.eq.0.0.or.n.eq.2 < elc=am; go to :chk:;> call psort7(a,m,1,n); if a(m(1)).eq.a(m(n)) < elc=a(1); go to :chk:;> if mod(n,2).eq.1 < ad=a(m(n/2+1));> else < ad=0.5*(a(m(n/2+1))+a(m(n/2)));> if parm.eq.1.0 < elc=ad; go to :chk:;> b1=min(am,ad); b2=max(am,ad); k2=1; until a(m(k2)).gt.b1 < k2=k2+1;> k1=k2-1; until a(m(k2)).ge.b2 < k2=k2+1;> r=parm/((1.0-parm)*fn); is=0; sm=n-2*(k1-1); > if is.ne.0 < elc=s; go to :chk:;> r2=2.0*r; s1=a(m(k1)); am2=2.0*am; cri=r2*sum(abs(a-s1))+s1*(s1-am2); elc=s1; s1=s; > :chk:elc=max(maxval(a-cl(2)),min(minval(a-cl(1)),elc)); return; end; function nintot(ni,nx,nc,a,m,nin,is); implicit double precision(a-h,o-z); double precision a(nx,nc); integer m(nx),is(ni); is=0; nintot=0; > return; end; subroutine luncomp(ni,nx,nc,ca,ia,nin,a); implicit double precision(a-h,o-z); double precision ca(nx,nc),a(ni,nc); integer ia(nx); a=0.0; return; end; subroutine lmodval(nt,x,nc,nx,a0,ca,ia,nin,ans); implicit double precision(a-h,o-z); double precision a0(nc),ca(nx,nc),x(nt,*),ans(nc,nt); integer ia(nx); > return; end; subroutine splognet (parm,no,ni,nc,x,ix,jx,y,g,jd,vp,cl,ne,nx,nlam,flmin, ulam,thr,isd,intr,maxit,kopt,lmu,a0,ca,ia,nin,dev0,dev,alm,nlp,jerr); implicit double precision(a-h,o-z); double precision x(*),y(no,max(2,nc)),g(no,nc),vp(ni),ulam(nlam); double precision ca(nx,nc,nlam),a0(nc,nlam),dev(nlam),alm(nlam),cl(2,ni); integer ix(*),jx(*),jd(*),ia(nx),nin(nlam); %fortran double precision, dimension (:), allocatable :: xm,xs,ww,vq,xv integer, dimension (:), allocatable :: ju %mortran if maxval(vp).le.0.0 < jerr=10000; return;> allocate(ww(1:no),stat=jerr); if(jerr.ne.0) return; allocate(ju(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(vq(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(xm(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(xs(1:ni),stat=jerr); if(jerr.ne.0) return; if kopt.eq.2 < allocate(xv(1:ni),stat=jerr); if(jerr.ne.0) return;> call spchkvars(no,ni,x,ix,ju); if(jd(1).gt.0) ju(jd(2:(jd(1)+1)))=0; if maxval(ju).le.0 < jerr=7777; return;> vq=max(0d0,vp); vq=vq*ni/sum(vq); sw=sum(ww); ww=ww/sw; if nc.eq.1 < call splstandard2(no,ni,x,ix,jx,ww,ju,isd,intr,xm,xs); if isd.gt.0 < > call sprlognet2n(parm,no,ni,x,ix,jx,y(:,1),g(:,1),ww,ju,vq,cl,ne,nx,nlam, flmin,ulam,thr,isd,intr,maxit,kopt,xm,xs,lmu,a0,ca,ia,nin,dev0,dev, alm,nlp,jerr); > elseif kopt.eq.2 < call multsplstandard2(no,ni,x,ix,jx,ww,ju,isd,intr,xm,xs,xv); if isd.gt.0 < > call multsprlognetn(parm,no,ni,nc,x,ix,jx,y,g,ww,ju,vq,cl,ne,nx,nlam,flmin, ulam,thr,intr,maxit,xv,xm,xs,lmu,a0,ca,ia,nin,dev0,dev,alm,nlp,jerr); > else < call splstandard2(no,ni,x,ix,jx,ww,ju,isd,intr,xm,xs); if isd.gt.0 < > call sprlognetn(parm,no,ni,nc,x,ix,jx,y,g,ww,ju,vq,cl,ne,nx,nlam,flmin, ulam,thr,isd,intr,maxit,kopt,xm,xs,lmu,a0,ca, ia,nin,dev0,dev,alm,nlp,jerr); > if(jerr.gt.0) return; dev0=2.0*sw*dev0; > if intr.eq.0 < a0(ic,k)=0.0;> else < a0(ic,k)=a0(ic,k)-dot_product(ca(1:nk,ic,k),xm(ia(1:nk)));> > > deallocate(ww,ju,vq,xm,xs); if(kopt.eq.2) deallocate(xv); return; end; subroutine multsplstandard2(no,ni,x,ix,jx,w,ju,isd,intr,xm,xs,xv); implicit double precision(a-h,o-z); double precision x(*),w(no),xm(ni),xs(ni),xv(ni); integer ix(*),jx(*),ju(ni); if intr.eq.0 < else < xs(j)=1.0;> > return; > > if(isd.eq.0) xs=1.0; return; end; subroutine splstandard2(no,ni,x,ix,jx,w,ju,isd,intr,xm,xs); implicit double precision(a-h,o-z); double precision x(*),w(no),xm(ni),xs(ni); integer ix(*),jx(*),ju(ni); if intr.eq.0 < else < xs(j)=1.0;> > return; > if(isd.eq.0) xs=1.0; return; end; subroutine sprlognet2n (parm,no,ni,x,ix,jx,y,g,w,ju,vp,cl,ne,nx,nlam, flmin,ulam,shri,isd,intr,maxit,kopt,xb,xs, lmu,a0,a,m,kin,dev0,dev,alm,nlp,jerr); implicit double precision(a-h,o-z); double precision x(*),y(no),g(no),w(no),vp(ni),ulam(nlam),cl(2,ni); double precision a(nx,nlam),a0(nlam),dev(nlam),alm(nlam); double precision xb(ni),xs(ni); integer ix(*),jx(*),ju(ni),m(nx),kin(nlam); %fortran double precision, dimension (:), allocatable :: xm,b,bs,v,r double precision, dimension (:), allocatable :: sc,xv,q,ga integer, dimension (:), allocatable :: mm,ixx %mortran call get_int_parms(sml,eps,big,mnlam,devmax,pmin,exmx); allocate(b(0:ni),stat=jerr); if(jerr.ne.0) return; allocate(xm(0:ni),stat=jerr); if(jerr.ne.0) return; allocate(xv(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(bs(0:ni),stat=jerr); if(jerr.ne.0) return; allocate(ga(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(mm(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(ixx(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(q(1:no),stat=jerr); if(jerr.ne.0) return; allocate(r(1:no),stat=jerr); if(jerr.ne.0) return; allocate(v(1:no),stat=jerr); if(jerr.ne.0) return; allocate(sc(1:no),stat=jerr); if(jerr.ne.0) return; fmax=log(1.0/pmin-1.0); fmin=-fmax; vmin=(1.0+pmin)*pmin*(1.0-pmin); bta=parm; omb=1.0-bta; q0=dot_product(w,y); if q0.le.pmin < jerr=8001; return;> if q0.ge.1.0-pmin < jerr=9001; return;> if(intr.eq.0) q0=0.5; bz=0.0; if(intr.ne.0) bz=log(q0/(1.0-q0)); if nonzero(no,g).eq.0 < vi=q0*(1.0-q0); b(0)=bz; v=vi*w; r=w*(y-q0); q=q0; xm(0)=vi; dev1=-(bz*q0+log(1.0-q0)); > else < b(0)=0.0; if intr.ne.0 < b(0)=azero(no,y,g,w,jerr); if(jerr.ne.0) return;> q=1.0/(1.0+exp(-b(0)-g)); v=w*q*(1.0-q); r=w*(y-q); xm(0)=sum(v); dev1=-(b(0)*q0+dot_product(w,y*g+log(1.0-q))); > if kopt.gt.0 < if isd.gt.0.and.intr.ne.0 < xv=0.25;> else < > > b(1:ni)=0.0; dev0=dev1; "Begin: added by Naras" alf=1.0; "End: added by Naras" if flmin.lt.1.0 < eqs=max(eps,flmin); alf=eqs**(1.0/(nlam-1));> m=0; mm=0; nin=0; /o,svr/=0.0; mnl=min(mnlam,nlam); bs=0.0; /nlp,nin/=0; shr=shri*dev0; al=0.0; ixx=0; elseif ilm.gt.2 < al=al*alf;> elseif ilm.eq.1 < al=big;> else < al0=0.0; al0=al0/max(bta,1.0d-3); al=alf*al0; > al2=al*omb; al1=al*bta; tlam=bta*(2.0*al-al0); :again:continue; loop < bs(0)=b(0); if(nin.gt.0) bs(m(1:nin))=b(m(1:nin)); > loop < nlp=nlp+1; dlx=0.0; else < b(k)=max(cl(1,k),min(cl(2,k),sign(au,u)/(xv(k)+vp(k)*al2))); > d=b(k)-bk; if(abs(d).le.0.0) next; dlx=max(dlx,xv(k)*d**2); if mm(k).eq.0 < nin=nin+1; if(nin.gt.nx) exit; mm(k)=nin; m(nin)=k; sc(1:jn)=v(jx(jb:je)); xm(k)=dot_product(sc(1:jn),x(jb:je)); > r(jx(jb:je))=r(jx(jb:je))-d*v(jx(jb:je))*x(jb:je)/xs(k); o=o+d*(xb(k)/xs(k)); svr=svr-d*(xm(k)-xb(k)*xm(0))/xs(k); > if(nin.gt.nx) exit; d=0.0; if(intr.ne.0) d=svr/xm(0); if d.ne.0.0 < b(0)=b(0)+d; dlx=max(dlx,xm(0)*d**2); r=r-d*v; svr=svr-d*xm(0); > if(dlx.lt.shr) exit; if nlp.gt.maxit < jerr=-ilm; return;> loop < nlp=nlp+1; dlx=0.0; else < b(k)=max(cl(1,k),min(cl(2,k),sign(au,u)/(xv(k)+vp(k)*al2))); > d=b(k)-bk; if(abs(d).le.0.0) next; dlx=max(dlx,xv(k)*d**2); r(jx(jb:je))=r(jx(jb:je))-d*v(jx(jb:je))*x(jb:je)/xs(k); o=o+d*(xb(k)/xs(k)); svr=svr-d*(xm(k)-xb(k)*xm(0))/xs(k); > d=0.0; if(intr.ne.0) d=svr/xm(0); if d.ne.0.0 < b(0)=b(0)+d; dlx=max(dlx,xm(0)*d**2); r=r-d*v; svr=svr-d*xm(0); > if(dlx.lt.shr) exit; if nlp.gt.maxit < jerr=-ilm; return;> > > if(nin.gt.nx) exit; sc=b(0); b0=0.0; sc=sc+b0; elseif fi.gt.fmax < q(i)=1.0;> else < q(i)=1.0/(1.0+exp(-fi));> > v=w*q*(1.0-q); xm(0)=sum(v); if(xm(0).lt.vmin) exit; r=w*(y-q); svr=sum(r); o=0.0; if xm(0)*(b(0)-bs(0))**2.lt.shr < kx=0; if kx.eq.0 < > if(kx.eq.1) go to :again:; exit; > > > if nin.gt.nx < jerr=-10000-ilm; exit;> if(nin.gt.0) a(1:nin,ilm)=b(m(1:nin)); kin(ilm)=nin; a0(ilm)=b(0); alm(ilm)=al; lmu=ilm; devi=dev2(no,w,y,q,pmin); dev(ilm)=(dev1-devi)/dev0; if(ilm.lt.mnl) next; if(flmin.ge.1.0) next; me=0; if(me.gt.ne) exit; if(dev(ilm).gt.devmax) exit; if(dev(ilm)-dev(ilm-1).lt.sml) exit; if(xm(0).lt.vmin) exit; > g=log(q/(1.0-q)); deallocate(xm,b,bs,v,r,sc,xv,q,mm,ga,ixx); return; end; subroutine sprlognetn(parm,no,ni,nc,x,ix,jx,y,g,w,ju,vp,cl,ne,nx,nlam,flmin, ulam,shri,isd,intr,maxit,kopt,xb,xs,lmu,a0,a,m,kin,dev0,dev,alm,nlp,jerr); implicit double precision(a-h,o-z); double precision x(*),y(no,nc),g(no,nc),w(no),vp(ni),ulam(nlam),xb(ni),xs(ni); double precision a(nx,nc,nlam),a0(nc,nlam),dev(nlam),alm(nlam),cl(2,ni); integer ix(*),jx(*),ju(ni),m(nx),kin(nlam); %fortran double precision, dimension (:,:), allocatable :: q double precision, dimension (:), allocatable :: sxp,sxpl double precision, dimension (:), allocatable :: sc,xm,v,r,ga double precision, dimension (:,:), allocatable :: b,bs,xv integer, dimension (:), allocatable :: mm,is,iy allocate(b(0:ni,1:nc),stat=jerr) if(jerr.ne.0) return allocate(xv(1:ni,1:nc),stat=jerr) if(jerr.ne.0) return allocate(bs(0:ni,1:nc),stat=jerr) if(jerr.ne.0) return allocate(q(1:no,1:nc),stat=jerr) if(jerr.ne.0) return %mortran call get_int_parms(sml,eps,big,mnlam,devmax,pmin,exmx); exmn=-exmx; allocate(xm(0:ni),stat=jerr); if(jerr.ne.0) return; allocate(r(1:no),stat=jerr); if(jerr.ne.0) return; allocate(v(1:no),stat=jerr); if(jerr.ne.0) return; allocate(mm(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(ga(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(iy(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(is(1:max(nc,ni)),stat=jerr); if(jerr.ne.0) return; allocate(sxp(1:no),stat=jerr); if(jerr.ne.0) return; allocate(sxpl(1:no),stat=jerr); if(jerr.ne.0) return; allocate(sc(1:no),stat=jerr); if(jerr.ne.0) return; pmax=1.0-pmin; emin=pmin/pmax; emax=1.0/emin; pfm=(1.0+pmin)*pmin; pfx=(1.0-pmin)*pmax; vmin=pfm*pmax; bta=parm; omb=1.0-bta; dev1=0.0; dev0=0.0; if q0.ge.1.0-pmin < jerr =9000+ic; return;> if(intr.eq.0) q0=1.0/nc; b(1:ni,ic)=0.0; b(0,ic)=0.0; if intr.ne.0 < b(0,ic)=log(q0); dev1=dev1-q0*b(0,ic);> > if(intr.eq.0) dev1=log(float(nc)); iy=0; al=0.0; if nonzero(no*nc,g).eq.0 < b(0,:)=b(0,:)-sum(b(0,:))/nc; sxp=0.0; > else < sxp=0.0; if intr.eq.0 < b(0,:)=0.0;> else < call kazero(nc,no,y,g,w,b(0,:),jerr); if(jerr.ne.0) return;> dev1=0.0; sxpl=w*log(sxp); > > dev0=dev0+dev1; if kopt.gt.0 < if isd.gt.0.and.intr.ne.0 < xv=0.25;> else < > > "Begin: added by Naras" alf=1.0; "End: added by Naras" if flmin.lt.1.0 < eqs=max(eps,flmin); alf=eqs**(1.0/(nlam-1));> m=0; mm=0; nin=0; nlp=0; mnl=min(mnlam,nlam); bs=0.0; svr=0.0; o=0.0; shr=shri*dev0; ga=0.0; > elseif ilm.gt.2 < al=al*alf;> elseif ilm.eq.1 < al=big;> else < al0=0.0; al0=al0/max(bta,1.0d-3); al=alf*al0; > al2=al*omb; al1=al*bta; tlam=bta*(2.0*al-al0); :again:continue; loop < /ixx,jxx/=0; ig=0; elseif pic.gt.pfx < pic=1.0; v(i)=0.0;> else < v(i)=w(i)*pic*(1.0-pic); xm(0)=xm(0)+v(i);> r(i)=w(i)*(y(i,ic)-pic); svr=svr+r(i); > if(xm(0).le.vmin) next; ig=1; > loop < nlp=nlp+1; dlx=0.0; else < b(k,ic)=max(cl(1,k),min(cl(2,k),sign(au,u)/ (xv(k,ic)+vp(k)*al2))); > d=b(k,ic)-bk; if(abs(d).le.0.0) next; dlx=max(dlx,xv(k,ic)*d**2); if mm(k).eq.0 < nin=nin+1; if nin.gt.nx < jxx=1; exit;> mm(k)=nin; m(nin)=k; xm(k)=dot_product(v(jx(jb:je)),x(jb:je)); > r(jx(jb:je))=r(jx(jb:je))-d*v(jx(jb:je))*x(jb:je)/xs(k); o=o+d*(xb(k)/xs(k)); svr=svr-d*(xm(k)-xb(k)*xm(0))/xs(k); > if(jxx.gt.0) exit; d=0.0; if(intr.ne.0) d=svr/xm(0); if d.ne.0.0 < b(0,ic)=b(0,ic)+d; dlx=max(dlx,xm(0)*d**2); r=r-d*v; svr=svr-d*xm(0); > if(dlx.lt.shr) exit; if nlp.gt.maxit < jerr=-ilm; return;> loop < nlp=nlp+1; dlx=0.0; else < b(k,ic)=max(cl(1,k),min(cl(2,k),sign(au,u)/ (xv(k,ic)+vp(k)*al2))); > d=b(k,ic)-bk; if(abs(d).le.0.0) next; dlx=max(dlx,xv(k,ic)*d**2); r(jx(jb:je))=r(jx(jb:je))-d*v(jx(jb:je))*x(jb:je)/xs(k); o=o+d*(xb(k)/xs(k)); svr=svr-d*(xm(k)-xb(k)*xm(0))/xs(k); > d=0.0; if(intr.ne.0) d=svr/xm(0); if d.ne.0.0 < b(0,ic)=b(0,ic)+d; dlx=max(dlx,xm(0)*d**2); r=r-d*v; svr=svr-d*xm(0); > if(dlx.lt.shr) exit; if nlp.gt.maxit < jerr=-ilm; return;> > > if(jxx.gt.0) exit; if(xm(0)*(b(0,ic)-bs(0,ic))**2.gt.shr) ixx=1; if ixx.eq.0 < > > sc=b(0,ic)+g(:,ic); b0=0.0; sc=min(max(exmn,sc+b0),exmx); sxp=sxp-q(:,ic); q(:,ic)=min(max(emin*sxp,exp(sc)),emax*sxp); sxp=sxp+q(:,ic); > s=-sum(b(0,:))/nc; b(0,:)=b(0,:)+s; sc=s; b0=0.0; else < s=elc(parm,nc,cl(:,l),b(l,:),is);> b(l,:)=b(l,:)-s; jb=ix(l); je=ix(l+1)-1; sc(jx(jb:je))=sc(jx(jb:je))-s*x(jb:je)/xs(l); b0=b0+s*xb(l)/xs(l); > sc=sc+b0; sc=exp(sc); sxp=sxp*sc; if(jxx.gt.0) exit; if(ig.eq.0) exit; if ixx.eq.0 < > > if(ixx.eq.1) go to :again:; exit; > > if jxx.gt.0 < jerr=-10000-ilm; exit;> devi=0.0; > kin(ilm)=nin; alm(ilm)=al; lmu=ilm; dev(ilm)=(dev1-devi)/dev0; if(ig.eq.0) exit; if(ilm.lt.mnl) next; if(flmin.ge.1.0) next; if(nintot(ni,nx,nc,a(1,1,ilm),m,nin,is).gt.ne) exit; if(dev(ilm).gt.devmax) exit; if(dev(ilm)-dev(ilm-1).lt.sml) exit; > g=log(q); deallocate(sxp,b,bs,v,r,xv,q,mm,is,xm,sc,ga,iy); return; end; subroutine lcmodval(nc,nx,a0,ca,ia,nin,x,ix,jx,n,f); implicit double precision(a-h,o-z); double precision a0(nc),ca(nx,nc),x(*),f(nc,n); integer ia(*),ix(*),jx(*); > return; end; subroutine coxnet (parm,no,ni,x,y,d,g,w,jd,vp,cl,ne,nx,nlam,flmin,ulam,thr, maxit,isd,lmu,ca,ia,nin,dev0,dev,alm,nlp,jerr); implicit double precision(a-h,o-z); double precision x(no,ni),y(no),d(no),g(no),w(no),vp(ni),ulam(nlam); double precision ca(nx,nlam),dev(nlam),alm(nlam),cl(2,ni); integer jd(*),ia(nx),nin(nlam); %fortran double precision, dimension (:), allocatable :: xs,ww,vq integer, dimension (:), allocatable :: ju %mortran if maxval(vp).le.0.0 < jerr=10000; return;> allocate(ww(1:no),stat=jerr); if(jerr.ne.0) return; allocate(ju(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(vq(1:ni),stat=jerr); if(jerr.ne.0) return; if isd.gt.0 < allocate(xs(1:ni),stat=jerr); if(jerr.ne.0) return;> call chkvars(no,ni,x,ju); if(jd(1).gt.0) ju(jd(2:(jd(1)+1)))=0; if maxval(ju).le.0 < jerr=7777; return;> vq=max(0d0,vp); vq=vq*ni/sum(vq); ww=max(0d0,w); sw=sum(ww); if sw.le.0.0 < jerr=9999; return;> ww=ww/sw; call cstandard(no,ni,x,ww,ju,isd,xs); if isd.gt.0 < > call coxnet1(parm,no,ni,x,y,d,g,ww,ju,vq,cl,ne,nx,nlam,flmin,ulam,thr, isd,maxit,lmu,ca,ia,nin,dev0,dev,alm,nlp,jerr); if(jerr.gt.0) return; dev0=2.0*sw*dev0; if isd.gt.0 < > deallocate(ww,ju,vq); if(isd.gt.0) deallocate(xs); return; end; subroutine cstandard (no,ni,x,w,ju,isd,xs); implicit double precision(a-h,o-z); double precision x(no,ni),w(no),xs(ni); integer ju(ni); > return; end; subroutine coxnet1(parm,no,ni,x,y,d,g,q,ju,vp,cl,ne,nx,nlam,flmin,ulam,cthri, isd,maxit,lmu,ao,m,kin,dev0,dev,alm,nlp,jerr); implicit double precision(a-h,o-z); double precision x(no,ni),y(no),q(no),d(no),g(no),vp(ni),ulam(nlam); double precision ao(nx,nlam),dev(nlam),alm(nlam),cl(2,ni); integer ju(ni),m(nx),kin(nlam); %fortran double precision, dimension (:), allocatable :: w,dk,v,xs,wr double precision, dimension (:), allocatable :: a,as,f,dq double precision, dimension (:), allocatable :: e,uu,ga integer, dimension (:), allocatable :: jp,kp,mm,ixx %mortran call get_int_parms(sml,eps,big,mnlam,devmax,pmin,exmx); sml=sml*100.0; devmax=devmax*0.99/0.999; allocate(e(1:no),stat=jerr); if(jerr.ne.0)go to :done:; allocate(uu(1:no),stat=jerr); if(jerr.ne.0)go to :done:; allocate(f(1:no),stat=jerr); if(jerr.ne.0)go to :done:; allocate(w(1:no),stat=jerr); if(jerr.ne.0)go to :done:; allocate(v(1:ni),stat=jerr); if(jerr.ne.0)go to :done:; allocate(a(1:ni),stat=jerr); if(jerr.ne.0)go to :done:; allocate(as(1:ni),stat=jerr); if(jerr.ne.0)go to :done:; allocate(xs(1:ni),stat=jerr); if(jerr.ne.0)go to :done:; allocate(ga(1:ni),stat=jerr); if(jerr.ne.0)go to :done:; allocate(ixx(1:ni),stat=jerr); if(jerr.ne.0)go to :done:; allocate(jp(1:no),stat=jerr); if(jerr.ne.0)go to :done:; allocate(kp(1:no),stat=jerr); if(jerr.ne.0)go to :done:; allocate(dk(1:no),stat=jerr); if(jerr.ne.0)go to :done:; allocate(wr(1:no),stat=jerr); if(jerr.ne.0)go to :done:; allocate(dq(1:no),stat=jerr); if(jerr.ne.0)go to :done:; allocate(mm(1:ni),stat=jerr); if(jerr.ne.0)go to :done:; call groups(no,y,d,q,nk,kp,jp,t0,jerr); if(jerr.ne.0) go to :done:; alpha=parm; oma=1.0-alpha; nlm=0; ixx=0; al=0.0; dq=d*q; call died(no,nk,dq,kp,jp,dk); a=0.0; f(1)=0.0; fmax=log(huge(f(1))*0.1); if nonzero(no,g).ne.0 < f=g-dot_product(q,g); e=q*exp(sign(min(abs(f),fmax),f)); > else < f=0.0; e=q;> r0=risk(no,ni,nk,dq,dk,f,e,kp,jp,uu); rr=-(dot_product(dk(1:nk),log(dk(1:nk)))+r0); dev0=rr; > call outer(no,nk,dq,dk,kp,jp,e,wr,w,jerr,uu); if(jerr.ne.0) go to :done:; "Begin: added by Naras" alf=1.0; "End: added by Naras" if flmin.lt.1.0 < eqs=max(eps,flmin); alf=eqs**(1.0/(nlam-1));> m=0; mm=0; /nlp,nin/=0; mnl=min(mnlam,nlam); as=0.0; cthr=cthri*dev0; elseif ilm.gt.2 < al=al*alf;> elseif ilm.eq.1 < al=big;> else < al0=0.0; al0=al0/max(parm,1.0d-3); al=alf*al0; > sa=alpha*al; omal=oma*al; tlam=alpha*(2.0*al-al0); :again:continue; loop < if(nin.gt.0) as(m(1:nin))=a(m(1:nin)); call vars(no,ni,x,w,ixx,v); loop < nlp=nlp+1; dli=0.0; else < at=max(cl(1,j),min(cl(2,j),sign(abs(u)-vp(j)*sa,u)/ (v(j)+vp(j)*omal))); > if at.ne.a(j) < del=at-a(j); a(j)=at; dli=max(dli,v(j)*del**2); wr=wr-del*w*x(:,j); f=f+del*x(:,j); if mm(j).eq.0 < nin=nin+1; if(nin.gt.nx) exit; mm(j)=nin; m(nin)=j; > > > if(nin.gt.nx) exit; if(dli.lt.cthr) exit; if nlp.gt.maxit < jerr=-ilm; return;> loop < nlp=nlp+1; dli=0.0; else < at=max(cl(1,j),min(cl(2,j),sign(abs(u)-vp(j)*sa,u)/ (v(j)+vp(j)*omal))); > if at.ne.a(j) < del=at-a(j); a(j)=at; dli=max(dli,v(j)*del**2); wr=wr-del*w*x(:,j); f=f+del*x(:,j); > > if(dli.lt.cthr) exit; if nlp.gt.maxit < jerr=-ilm; return;> > > if(nin.gt.nx) exit; e=q*exp(sign(min(abs(f),fmax),f)); call outer(no,nk,dq,dk,kp,jp,e,wr,w,jerr,uu); if jerr.ne.0 < jerr=jerr-ilm; go to :done:;> ix=0; if ix.eq.0 < > if(ix.eq.1) go to :again:; exit; > > if nin.gt.nx < jerr=-10000-ilm; exit;> if(nin.gt.0) ao(1:nin,ilm)=a(m(1:nin)); kin(ilm)=nin; alm(ilm)=al; lmu=ilm; dev(ilm)=(risk(no,ni,nk,dq,dk,f,e,kp,jp,uu)-r0)/rr; if(ilm.lt.mnl) next; if(flmin.ge.1.0) next; me=0; if(me.gt.ne) exit; if((dev(ilm)-dev(ilm-mnl+1))/dev(ilm).lt.sml) exit; if(dev(ilm).gt.devmax) exit; > g=f; :done: deallocate(e,uu,w,dk,v,xs,f,wr,a,as,jp,kp,dq,mm,ga,ixx); return; end; subroutine cxmodval(ca,ia,nin,n,x,f); implicit double precision(a-h,o-z); double precision ca(nin),x(n,*),f(n); integer ia(nin); f=0.0; if(nin.le.0) return; return; end; subroutine groups(no,y,d,q,nk,kp,jp,t0,jerr); implicit double precision(a-h,o-z); double precision y(no),d(no),q(no); integer jp(no),kp(*"nk"); call psort7(y,jp,1,no); nj=0; if nj.eq.0 < jerr=20000; return;> j=1; until d(jp(j)).gt.0.0 < j=j+1;> until j.gt.nj; if j.ge.nj-1 < jerr=30000; return;> t0=y(jp(j)); j0=j-1; if j0.gt.0 < until y(jp(j0)).lt.t0 < j0=j0-1;> until j0.eq.0; if j0.gt.0 < nj=nj-j0; > > jerr=0; nk=0; yk=t0; j=2; loop < until d(jp(j)).gt.0.0.and.y(jp(j)).gt.yk < j=j+1;> until j.gt.nj; nk=nk+1; kp(nk)=j-1; if(j.gt.nj) exit; if j.eq.nj < nk=nk+1; kp(nk)=nj; exit;> yk=y(jp(j)); j=j+1; > return; end; subroutine outer(no,nk,d,dk,kp,jp,e,wr,w,jerr,u); implicit double precision(a-h,o-z); double precision d(no),dk(nk),wr(no),w(no); double precision e(no),u(no),b,c; integer kp(nk),jp(no); call usk(no,nk,kp,jp,e,u); b=dk(1)/u(1); c=dk(1)/u(1)**2; jerr=0; wr(i)=d(i)-e(i)*b; > wr(i)=d(i)-e(i)*b; > > return; end; subroutine vars(no,ni,x,w,ixx,v); implicit double precision(a-h,o-z); double precision x(no,ni),w(no),v(ni); integer ixx(ni); return; end; subroutine died(no,nk,d,kp,jp,dk); implicit double precision(a-h,o-z); double precision d(no),dk(nk); integer kp(nk),jp(no); dk(1)=sum(d(jp(1:kp(1)))); return; end; subroutine usk(no,nk,kp,jp,e,u); implicit double precision(a-h,o-z); double precision e(no),u(nk),h; integer kp(nk),jp(no); h=0.0; u(k)=h; > return; end; function risk(no,ni,nk,d,dk,f,e,kp,jp,u); implicit double precision(a-h,o-z); double precision d(no),dk(nk),f(no); integer kp(nk),jp(no); double precision e(no),u(nk),s; call usk(no,nk,kp,jp,e,u); u=log(u); risk=dot_product(d,f)-dot_product(dk,u); return; end; subroutine loglike(no,ni,x,y,d,g,w,nlam,a,flog,jerr); implicit double precision(a-h,o-z); double precision x(no,ni),y(no),d(no),g(no),w(no),a(ni,nlam),flog(nlam); %fortran double precision, dimension (:), allocatable :: dk,f,xm,dq,q double precision, dimension (:), allocatable :: e,uu integer, dimension (:), allocatable :: jp,kp %mortran allocate(e(1:no),stat=jerr); if(jerr.ne.0) go to :done:; allocate(q(1:no),stat=jerr); if(jerr.ne.0) go to :done:; allocate(uu(1:no),stat=jerr); if(jerr.ne.0) go to :done:; allocate(f(1:no),stat=jerr); if(jerr.ne.0) go to :done:; allocate(dk(1:no),stat=jerr); if(jerr.ne.0) go to :done:; allocate(jp(1:no),stat=jerr); if(jerr.ne.0) go to :done:; allocate(kp(1:no),stat=jerr); if(jerr.ne.0) go to :done:; allocate(dq(1:no),stat=jerr); if(jerr.ne.0) go to :done:; allocate(xm(1:ni),stat=jerr); if(jerr.ne.0) go to :done:; q=max(0d0,w); sw=sum(q); if sw.le.0.0 < jerr=9999; go to :done:;> call groups(no,y,d,q,nk,kp,jp,t0,jerr); if(jerr.ne.0) go to :done:; fmax=log(huge(e(1))*0.1); dq=d*q; call died(no,nk,dq,kp,jp,dk); gm=dot_product(q,g)/sw; flog(lam)=risk(no,ni,nk,dq,dk,f,e,kp,jp,uu); > :done: deallocate(e,uu,dk,f,jp,kp,dq); return; end; subroutine fishnet (parm,no,ni,x,y,g,w,jd,vp,cl,ne,nx,nlam,flmin,ulam,thr, isd,intr,maxit,lmu,a0,ca,ia,nin,dev0,dev,alm,nlp,jerr); implicit double precision(a-h,o-z); double precision x(no,ni),y(no),g(no),w(no),vp(ni),ulam(nlam); double precision ca(nx,nlam),a0(nlam),dev(nlam),alm(nlam),cl(2,ni); integer jd(*),ia(nx),nin(nlam); %fortran double precision, dimension (:), allocatable :: xm,xs,ww,vq integer, dimension (:), allocatable :: ju %mortran if maxval(vp).le.0.0 < jerr=10000; return;> if minval(y).lt.0.0 < jerr=8888; return;> allocate(ww(1:no),stat=jerr); if(jerr.ne.0) return; allocate(ju(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(vq(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(xm(1:ni),stat=jerr); if(jerr.ne.0) return; if isd.gt.0 < allocate(xs(1:ni),stat=jerr); if(jerr.ne.0) return;> call chkvars(no,ni,x,ju); if(jd(1).gt.0) ju(jd(2:(jd(1)+1)))=0; if maxval(ju).le.0 < jerr=7777; go to :done:;> vq=max(0d0,vp); vq=vq*ni/sum(vq); ww=max(0d0,w); sw=sum(ww); if sw.le.0.0 < jerr=9999; go to :done:;> ww=ww/sw; call lstandard1(no,ni,x,ww,ju,isd,intr,xm,xs); if isd.gt.0 < > call fishnet1(parm,no,ni,x,y,g,ww,ju,vq,cl,ne,nx,nlam,flmin,ulam,thr, isd,intr,maxit,lmu,a0,ca,ia,nin,dev0,dev,alm,nlp,jerr); if(jerr.gt.0) go to :done:; dev0=2.0*sw*dev0; else < a0(k)=a0(k)-dot_product(ca(1:nk,k),xm(ia(1:nk)));> > :done:deallocate(ww,ju,vq,xm); if(isd.gt.0) deallocate(xs); return; end; subroutine fishnet1(parm,no,ni,x,y,g,q,ju,vp,cl,ne,nx,nlam,flmin,ulam,shri, isd,intr,maxit,lmu,a0,ca,m,kin,dev0,dev,alm,nlp,jerr); implicit double precision(a-h,o-z); double precision x(no,ni),y(no),g(no),q(no),vp(ni),ulam(nlam); double precision ca(nx,nlam),a0(nlam),dev(nlam),alm(nlam),cl(2,ni); integer ju(ni),m(nx),kin(nlam); %fortran double precision, dimension (:), allocatable :: t,w,wr,v,a,f,as,ga integer, dimension (:), allocatable :: mm,ixx %mortran call get_int_parms(sml,eps,big,mnlam,devmax,pmin,exmx); sml=sml*10.0; allocate(a(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(as(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(t(1:no),stat=jerr); if(jerr.ne.0) return; allocate(mm(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(ga(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(ixx(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(wr(1:no),stat=jerr); if(jerr.ne.0) return; allocate(v(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(w(1:no),stat=jerr); if(jerr.ne.0) return; allocate(f(1:no),stat=jerr); if(jerr.ne.0) return; bta=parm; omb=1.0-bta; t=q*y; yb=sum(t); fmax=log(huge(bta)*0.1); if nonzero(no,g).eq.0 < if intr.ne.0 < w=q*yb; az=log(yb); f=az; dv0=yb*(az-1.0);> else < w=q; az=0.0; f=az; dv0=-1.0;> > else < w=q*exp(sign(min(abs(g),fmax),g)); v0=sum(w); if intr.ne.0 < eaz=yb/v0; w=eaz*w; az=log(eaz); f=az+g; dv0=dot_product(t,g)-yb*(1.0-az); > else < az=0.0; f=g; dv0=dot_product(t,g)-v0;> > a=0.0; as=0.0; wr=t-w; v0=1.0; if(intr.ne.0) v0=yb; dvr=-yb; dvr=dvr-dv0; dev0=dvr; "Begin: added by Naras" alf=1.0; "End: added by Naras" if flmin.lt.1.0 < eqs=max(eps,flmin); alf=eqs**(1.0/(nlam-1));> m=0; mm=0; /nlp,nin/=0; mnl=min(mnlam,nlam); shr=shri*dev0; ixx=0; al=0.0; elseif ilm.gt.2 < al=al*alf;> elseif ilm.eq.1 < al=big;> else < al0=0.0; al0=al0/max(bta,1.0d-3); al=alf*al0; > al2=al*omb; al1=al*bta; tlam=bta*(2.0*al-al0); :again:continue; loop < az0=az; if(nin.gt.0) as(m(1:nin))=a(m(1:nin)); loop < nlp=nlp+1; dlx=0.0; else < a(k)=max(cl(1,k),min(cl(2,k),sign(au,u)/(v(k)+vp(k)*al2))); > if(a(k).eq.ak) next; d=a(k)-ak; dlx=max(dlx,v(k)*d**2); wr=wr-d*w*x(:,k); f=f+d*x(:,k); if mm(k).eq.0 < nin=nin+1; if(nin.gt.nx) exit; mm(k)=nin; m(nin)=k; > > if(nin.gt.nx) exit; if intr.ne.0 < d=sum(wr)/v0; az=az+d; dlx=max(dlx,v0*d**2); wr=wr-d*w; f=f+d; > if(dlx.lt.shr) exit; if nlp.gt.maxit < jerr=-ilm; return;> loop < nlp=nlp+1; dlx=0.0; else < a(k)=max(cl(1,k),min(cl(2,k),sign(au,u)/(v(k)+vp(k)*al2))); > if(a(k).eq.ak) next; d=a(k)-ak; dlx=max(dlx,v(k)*d**2); wr=wr-d*w*x(:,k); f=f+d*x(:,k) > if intr.ne.0 < d=sum(wr)/v0; az=az+d; dlx=max(dlx,v0*d**2); wr=wr-d*w; f=f+d; > if(dlx.lt.shr) exit; if nlp.gt.maxit < jerr=-ilm; return;> > > if(nin.gt.nx) exit; w=q*exp(sign(min(abs(f),fmax),f)); v0=sum(w); wr=t-w; if v0*(az-az0)**2.lt.shr < ix=0; if ix.eq.0 < > if(ix.eq.1) go to :again:; exit; > > > if nin.gt.nx < jerr=-10000-ilm; exit;> if(nin.gt.0) ca(1:nin,ilm)=a(m(1:nin)); kin(ilm)=nin; a0(ilm)=az; alm(ilm)=al; lmu=ilm; dev(ilm)=(dot_product(t,f)-v0-dv0)/dvr; if(ilm.lt.mnl) next; if(flmin.ge.1.0) next; me=0; if(me.gt.ne) exit; if((dev(ilm)-dev(ilm-mnl+1))/dev(ilm).lt.sml) exit; if(dev(ilm).gt.devmax) exit; > g=f; :done:deallocate(t,w,wr,v,a,f,as,mm,ga,ixx); return; end; function nonzero(n,v); implicit double precision(a-h,o-z); double precision v(n); nonzero=0; > return; end; subroutine solns(ni,nx,lmu,a,ia,nin,b); implicit double precision(a-h,o-z); double precision a(nx,lmu),b(ni,lmu); integer ia(nx),nin(lmu); return; end; subroutine lsolns(ni,nx,nc,lmu,a,ia,nin,b); implicit double precision(a-h,o-z); double precision a(nx,nc,lmu),b(ni,nc,lmu); integer ia(nx),nin(lmu); return; end; subroutine deviance(no,ni,x,y,g,q,nlam,a0,a,flog,jerr); implicit double precision(a-h,o-z); double precision x(no,ni),y(no),g(no),q(no),a(ni,nlam),a0(nlam),flog(nlam); %fortran double precision, dimension (:), allocatable :: w %mortran if minval(y).lt.0.0 < jerr=8888; return;> allocate(w(1:no),stat=jerr); if(jerr.ne.0) return; w=max(0d0,q); sw=sum(w); if sw.le.0.0 < jerr=9999; go to :done:;> yb=dot_product(w,y)/sw; fmax=log(huge(y(1))*0.1); flog(lam)=2.0*(sw*yb*(log(yb)-1.0)-s); > :done: deallocate(w); return; end; subroutine spfishnet (parm,no,ni,x,ix,jx,y,g,w,jd,vp,cl,ne,nx,nlam,flmin, ulam,thr,isd,intr,maxit,lmu,a0,ca,ia,nin,dev0,dev,alm,nlp,jerr); implicit double precision(a-h,o-z); double precision x(*),y(no),g(no),w(no),vp(ni),ulam(nlam),cl(2,ni); double precision ca(nx,nlam),a0(nlam),dev(nlam),alm(nlam); integer ix(*),jx(*),jd(*),ia(nx),nin(nlam); %fortran double precision, dimension (:), allocatable :: xm,xs,ww,vq integer, dimension (:), allocatable :: ju %mortran if maxval(vp).le.0.0 < jerr=10000; return;> if minval(y).lt.0.0 < jerr=8888; return;> allocate(ww(1:no),stat=jerr); if(jerr.ne.0) return; allocate(ju(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(vq(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(xm(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(xs(1:ni),stat=jerr); if(jerr.ne.0) return; call spchkvars(no,ni,x,ix,ju); if(jd(1).gt.0) ju(jd(2:(jd(1)+1)))=0; if maxval(ju).le.0 < jerr=7777; go to :done:;> vq=max(0d0,vp); vq=vq*ni/sum(vq); ww=max(0d0,w); sw=sum(ww); if sw.le.0.0 < jerr=9999; go to :done:;> ww=ww/sw; call splstandard2(no,ni,x,ix,jx,ww,ju,isd,intr,xm,xs); if isd.gt.0 < > call spfishnet1(parm,no,ni,x,ix,jx,y,g,ww,ju,vq,cl,ne,nx,nlam,flmin,ulam,thr, isd,intr,maxit,xm,xs,lmu,a0,ca,ia,nin,dev0,dev,alm,nlp,jerr); if(jerr.gt.0) go to :done:; dev0=2.0*sw*dev0; else < a0(k)=a0(k)-dot_product(ca(1:nk,k),xm(ia(1:nk)));> > :done:deallocate(ww,ju,vq,xm,xs); return; end; subroutine spfishnet1(parm,no,ni,x,ix,jx,y,g,q,ju,vp,cl,ne,nx,nlam,flmin,ulam, shri,isd,intr,maxit,xb,xs,lmu,a0,ca,m,kin,dev0,dev,alm,nlp,jerr); implicit double precision(a-h,o-z); double precision x(*),y(no),g(no),q(no),vp(ni),ulam(nlam),xb(ni),xs(ni); double precision ca(nx,nlam),a0(nlam),dev(nlam),alm(nlam),cl(2,ni); integer ix(*),jx(*),ju(ni),m(nx),kin(nlam); %fortran double precision, dimension (:), allocatable :: qy,t,w,wr,v double precision, dimension (:), allocatable :: a,as,xm,ga integer, dimension (:), allocatable :: mm,ixx %mortran call get_int_parms(sml,eps,big,mnlam,devmax,pmin,exmx); sml=sml*10.0; allocate(a(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(as(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(t(1:no),stat=jerr); if(jerr.ne.0) return; allocate(mm(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(ga(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(ixx(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(wr(1:no),stat=jerr); if(jerr.ne.0) return; allocate(v(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(xm(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(w(1:no),stat=jerr); if(jerr.ne.0) return; allocate(qy(1:no),stat=jerr); if(jerr.ne.0) return; bta=parm; omb=1.0-bta; fmax=log(huge(bta)*0.1); qy=q*y; yb=sum(qy); if nonzero(no,g).eq.0 < t=0.0; if intr.ne.0 < w=q*yb; az=log(yb); uu=az; xm=yb*xb; dv0=yb*(az-1.0); > else < w=q; xm=0.0; /uu,az/=0.0; dv0=-1.0;> > else < w=q*exp(sign(min(abs(g),fmax),g)); ww=sum(w); t=g; if intr.ne.0 < eaz=yb/ww; w=eaz*w; /az,uu/=log(eaz); dv0=dot_product(qy,g)-yb*(1.0-az); > else < /uu,az/=0.0; dv0=dot_product(qy,g)-ww;> > tt=yb*uu; ww=1.0; if(intr.ne.0) ww=yb; wr=qy-q*(yb*(1.0-uu)); a=0.0; as=0.0; dvr=-yb; dvr=dvr-dv0; dev0=dvr; "Begin: added by Naras" alf=1.0; "End: added by Naras" if flmin.lt.1.0 < eqs=max(eps,flmin); alf=eqs**(1.0/(nlam-1));> m=0; mm=0; /nlp,nin/=0; mnl=min(mnlam,nlam); shr=shri*dev0; al=0.0; ixx=0; elseif ilm.gt.2 < al=al*alf;> elseif ilm.eq.1 < al=big;> else < al0=0.0; al0=al0/max(bta,1.0d-3); al=alf*al0; > al2=al*omb; al1=al*bta; tlam=bta*(2.0*al-al0); :again:continue; loop < az0=az; if(nin.gt.0) as(m(1:nin))=a(m(1:nin)); loop < nlp=nlp+1; dlx=0.0; else < a(k)=max(cl(1,k),min(cl(2,k),sign(au,u)/(v(k)+vp(k)*al2))); > if(a(k).eq.ak) next; if mm(k).eq.0 < nin=nin+1; if(nin.gt.nx) exit; mm(k)=nin; m(nin)=k; > d=a(k)-ak; dlx=max(dlx,v(k)*d**2); dv=d/xs(k); wr(jx(jb:je))=wr(jx(jb:je))-dv*w(jx(jb:je))*x(jb:je); t(jx(jb:je))=t(jx(jb:je))+dv*x(jb:je); uu=uu-dv*xb(k); tt=tt-dv*xm(k); > if(nin.gt.nx) exit; if intr.ne.0 < d=tt/ww-uu; az=az+d; dlx=max(dlx,ww*d**2); uu=uu+d; > if(dlx.lt.shr) exit; if nlp.gt.maxit < jerr=-ilm; return;> loop < nlp=nlp+1; dlx=0.0; else < a(k)=max(cl(1,k),min(cl(2,k),sign(au,u)/(v(k)+vp(k)*al2))); > if(a(k).eq.ak) next; d=a(k)-ak; dlx=max(dlx,v(k)*d**2); dv=d/xs(k); wr(jx(jb:je))=wr(jx(jb:je))-dv*w(jx(jb:je))*x(jb:je); t(jx(jb:je))=t(jx(jb:je))+dv*x(jb:je); uu=uu-dv*xb(k); tt=tt-dv*xm(k); > if intr.ne.0 < d=tt/ww-uu; az=az+d; dlx=max(dlx,ww*d**2); uu=uu+d; > if(dlx.lt.shr) exit; if nlp.gt.maxit < jerr=-ilm; return;> > > if(nin.gt.nx) exit; euu=exp(sign(min(abs(uu),fmax),uu)); w=euu*q*exp(sign(min(abs(t),fmax),t)); ww=sum(w); wr=qy-w*(1.0-uu); tt=sum(wr); if ww*(az-az0)**2.lt.shr < kx=0; if kx.eq.0 < > if(kx.eq.1) go to :again:; exit; > > > if nin.gt.nx < jerr=-10000-ilm; exit;> if(nin.gt.0) ca(1:nin,ilm)=a(m(1:nin)); kin(ilm)=nin; a0(ilm)=az; alm(ilm)=al; lmu=ilm; dev(ilm)=(dot_product(qy,t)+yb*uu-ww-dv0)/dvr; if(ilm.lt.mnl) next; if(flmin.ge.1.0) next; me=0; if(me.gt.ne) exit; if((dev(ilm)-dev(ilm-mnl+1))/dev(ilm).lt.sml) exit; if(dev(ilm).gt.devmax) exit; > g=t+uu; :done:deallocate(t,w,wr,v,a,qy,xm,as,mm,ga,ixx); return; end; subroutine spdeviance(no,ni,x,ix,jx,y,g,q,nlam,a0,a,flog,jerr); implicit double precision(a-h,o-z); double precision x(*),y(no),g(no),q(no),a(ni,nlam),a0(nlam),flog(nlam); integer ix(*),jx(*); %fortran double precision, dimension (:), allocatable :: w,f %mortran if minval(y).lt.0.0 < jerr=8888; return;> allocate(w(1:no),stat=jerr); if(jerr.ne.0) return; allocate(f(1:no),stat=jerr); if(jerr.ne.0) return; w=max(0d0,q); sw=sum(w); if sw.le.0.0 < jerr=9999; go to :done:;> yb=dot_product(w,y)/sw; fmax=log(huge(y(1))*0.1); f=f+g; s=dot_product(w,y*f-exp(sign(min(abs(f),fmax),f))); flog(lam)=2.0*(sw*yb*(log(yb)-1.0)-s); > :done: deallocate(w,f); return; end; subroutine cspdeviance(no,x,ix,jx,y,g,q,nx,nlam,a0,ca,ia,nin,flog,jerr); implicit double precision(a-h,o-z); double precision x(*),y(no),g(no),q(no),ca(nx,nlam),a0(nlam),flog(nlam); integer ix(*),jx(*),nin(nlam),ia(nx); %fortran double precision, dimension (:), allocatable :: w,f %mortran if minval(y).lt.0.0 < jerr=8888; return;> allocate(w(1:no),stat=jerr); if(jerr.ne.0) return; allocate(f(1:no),stat=jerr); if(jerr.ne.0) return; w=max(0d0,q); sw=sum(w); if sw.le.0.0 < jerr=9999; go to :done:;> yb=dot_product(w,y)/sw; fmax=log(huge(y(1))*0.1); f=f+g; s=dot_product(w,y*f-exp(sign(min(abs(f),fmax),f))); flog(lam)=2.0*(sw*yb*(log(yb)-1.0)-s); > :done: deallocate(w,f); return; end; subroutine multelnet (parm,no,ni,nr,x,y,w,jd,vp,cl,ne,nx,nlam,flmin,ulam,thr,isd,jsd,intr,maxit, lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr); implicit double precision(a-h,o-z); double precision x(no,ni),y(no,nr),w(no),vp(ni),ca(nx,nr,nlam); double precision ulam(nlam),a0(nr,nlam),rsq(nlam),alm(nlam),cl(2,ni); integer jd(*),ia(nx),nin(nlam); %fortran double precision, dimension (:), allocatable :: vq; %mortran if maxval(vp).le.0.0 < jerr=10000; return;> allocate(vq(1:ni),stat=jerr); if(jerr.ne.0) return; vq=max(0d0,vp); vq=vq*ni/sum(vq); call multelnetn(parm,no,ni,nr,x,y,w,jd,vq,cl,ne,nx,nlam,flmin,ulam,thr,isd, jsd,intr,maxit,lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr); deallocate(vq); return; end; subroutine multelnetn (parm,no,ni,nr,x,y,w,jd,vp,cl,ne,nx,nlam,flmin,ulam,thr, isd,jsd,intr,maxit,lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr); implicit double precision(a-h,o-z); double precision vp(ni),x(no,ni),y(no,nr),w(no),ulam(nlam),cl(2,ni); double precision ca(nx,nr,nlam),a0(nr,nlam),rsq(nlam),alm(nlam); integer jd(*),ia(nx),nin(nlam); %fortran double precision, dimension (:), allocatable :: xm,xs,xv,ym,ys integer, dimension (:), allocatable :: ju double precision, dimension (:,:,:), allocatable :: clt allocate(clt(1:2,1:nr,1:ni),stat=jerr); if(jerr.ne.0) return %mortran allocate(xm(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(xs(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(ym(1:nr),stat=jerr); if(jerr.ne.0) return; allocate(ys(1:nr),stat=jerr); if(jerr.ne.0) return; allocate(ju(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(xv(1:ni),stat=jerr); if(jerr.ne.0) return; call chkvars(no,ni,x,ju); if(jd(1).gt.0) ju(jd(2:(jd(1)+1)))=0; if maxval(ju).le.0 < jerr=7777; return;> call multstandard1(no,ni,nr,x,y,w,isd,jsd,intr,ju,xm,xs,ym,ys,xv,ys0,jerr); if(jerr.ne.0) return; >> if isd.gt.0 < >>> if jsd.gt.0 < >>> call multelnet2(parm,ni,nr,ju,vp,clt,y,no,ne,nx,x,nlam,flmin,ulam,thr,maxit,xv, ys0,lmu,ca,ia,nin,rsq,alm,nlp,jerr); if(jerr.gt.0) return; if intr.eq.0 < a0(j,k)=0.0;> else < a0(j,k)=ym(j)-dot_product(ca(1:nk,j,k),xm(ia(1:nk)));> > > deallocate(xm,xs,ym,ys,ju,xv,clt); return; end; subroutine multstandard1 (no,ni,nr,x,y,w,isd,jsd,intr,ju,xm,xs,ym,ys,xv,ys0,jerr); implicit double precision(a-h,o-z); double precision x(no,ni),y(no,nr),w(no),xm(ni),xs(ni),xv(ni),ym(nr),ys(nr); integer ju(ni); %fortran double precision, dimension (:), allocatable :: v %mortran allocate(v(1:no),stat=jerr); if(jerr.ne.0) return; w=w/sum(w); v=sqrt(w); if intr.eq.0 < else < xs(j)=1.0; xv(j)=z;> > ys0=0.0; else < ys(j)=1.0; ys0=ys0+z;> > go to :out:; > if isd.eq.0 < xs=1.0;> else < xv=1.0; > ys0=0.0; else < ys0=ys0+z;> > if jsd.eq.0 < ys=1.0;> else < ys0=nr;> :out:deallocate(v); return; end; subroutine multelnet2(beta,ni,nr,ju,vp,cl,y,no,ne,nx,x,nlam,flmin,ulam,thri, maxit,xv,ys0,lmu,ao,ia,kin,rsqo,almo,nlp,jerr); implicit double precision(a-h,o-z); double precision vp(ni),y(no,nr),x(no,ni),ulam(nlam),ao(nx,nr,nlam); double precision rsqo(nlam),almo(nlam),xv(ni),cl(2,nr,ni); integer ju(ni),ia(nx),kin(nlam); %fortran double precision, dimension (:), allocatable :: g,gk,del,gj integer, dimension (:), allocatable :: mm,ix,isc double precision, dimension (:,:), allocatable :: a allocate(a(1:nr,1:ni),stat=jerr) if(jerr.ne.0) return %mortran call get_int_parms(sml,eps,big,mnlam,rsqmax,pmin,exmx); allocate(gj(1:nr),stat=jerr); if(jerr.ne.0) return; allocate(gk(1:nr),stat=jerr); if(jerr.ne.0) return; allocate(del(1:nr),stat=jerr); if(jerr.ne.0) return; allocate(mm(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(g(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(ix(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(isc(1:nr),stat=jerr); if(jerr.ne.0) return; bta=beta; omb=1.0-bta; ix=0; thr=thri*ys0/nr; "Begin: added by Naras" alf=1.0; "End: added by Naras" if flmin.lt.1.0 < eqs=max(eps,flmin); alf=eqs**(1.0/(nlam-1));> rsq=ys0; a=0.0; mm=0; /nlp,nin/=0; iz=0; mnl=min(mnlam,nlam); alm=0.0; g(j)=sqrt(g(j)); > elseif m.gt.2 < alm=alm*alf;> elseif m.eq.1 < alm=big;> else < alm0=0.0; alm0=alm0/max(bta,1.0d-3); alm=alf*alm0; > dem=alm*omb; ab=alm*bta; rsq0=rsq; jz=1; tlam=bta*(2.0*alm-alm0); loop < if(iz*jz.ne.0) go to :b:; :again:nlp=nlp+1; dlx=0.0; gkn=sqrt(gkn); u=1.0-ab*vp(k)/gkn; del=a(:,k); if u.le.0.0 < a(:,k)=0.0;> else < a(:,k)=gk*(u/(xv(k)+dem*vp(k))); call chkbnds(nr,gk,gkn,xv(k),cl(1,1,k), dem*vp(k),ab*vp(k),a(:,k),isc,jerr); if(jerr.ne.0) return; > del=a(:,k)-del; if(maxval(abs(del)).le.0.0) next; if mm(k).eq.0 < nin=nin+1; if(nin.gt.nx) exit; mm(k)=nin; ia(nin)=k; > > if(nin.gt.nx) exit; if dlx.lt.thr < ixx=0; g(k)=sqrt(g(k)); if g(k).gt.ab*vp(k) < ix(k)=1; ixx=1;> > if(ixx.eq.1) go to :again:; exit; > if nlp.gt.maxit < jerr=-m; return;> :b: iz=1; loop < nlp=nlp+1; dlx=0.0; gkn=sqrt(gkn); u=1.0-ab*vp(k)/gkn; del=a(:,k); if u.le.0.0 < a(:,k)=0.0;> else < a(:,k)=gk*(u/(xv(k)+dem*vp(k))); call chkbnds(nr,gk,gkn,xv(k),cl(1,1,k), dem*vp(k),ab*vp(k),a(:,k),isc,jerr); if(jerr.ne.0) return; > del=a(:,k)-del; if(maxval(abs(del)).le.0.0) next; > if(dlx.lt.thr) exit; if nlp.gt.maxit < jerr=-m; return;> > jz=0; > if nin.gt.nx < jerr=-10000-m; exit;> if nin.gt.0 < > kin(m)=nin; rsqo(m)=1.0-rsq/ys0; almo(m)=alm; lmu=m; if(m.lt.mnl) next; if(flmin.ge.1.0) next; me=0; if(me.gt.ne) exit; if(rsq0-rsq.lt.sml*rsq) exit; if(rsqo(m).gt.rsqmax) exit; > deallocate(a,mm,g,ix,del,gj,gk); return; end; subroutine chkbnds(nr,gk,gkn,xv,cl,al1,al2,a,isc,jerr); implicit double precision(a-h,o-z); double precision gk(nr),cl(2,nr),a(nr); integer isc(nr); kerr=0; al1p=1.0+al1/xv; al2p=al2/xv; isc=0; gsq=gkn**2; asq=dot_product(a,a); usq=0.0; "Begin: Added by Naras" u=0.0; kn=-1; "End: Added by Naras" loop < vmx=0.0; > if(vmx.le.0.0) exit; if(isc(kn).ne.0) exit; gsq=gsq-gk(kn)**2; g=sqrt(gsq)/xv; if(a(kn).lt.cl(1,kn)) u=cl(1,kn); if(a(kn).gt.cl(2,kn)) u=cl(2,kn); usq=usq+u**2; if usq.eq.0.0 < b=max(0d0,(g-al2p)/al1p);> else < b0=sqrt(asq-a(kn)**2); b=bnorm(b0,al1p,al2p,g,usq,kerr); if(kerr.ne.0) exit; > asq=usq+b**2; if asq.le.0.0 < a=0.0; exit;> a(kn)=u; isc(kn)=1; f=1.0/(xv*(al1p+al2p/sqrt(asq))); > if(kerr.ne.0) jerr=kerr; return; end; subroutine chkbnds1(nr,gk,gkn,xv,cl1,cl2,al1,al2,a,isc,jerr); implicit double precision(a-h,o-z); double precision gk(nr),a(nr); integer isc(nr); kerr=0; al1p=1.0+al1/xv; al2p=al2/xv; isc=0; gsq=gkn**2; asq=dot_product(a,a); usq=0.0; "Begin: added by Naras" u=0.0; kn=-1; "End: added by Naras" loop < vmx=0.0; > if(vmx.le.0.0) exit; if(isc(kn).ne.0) exit; gsq=gsq-gk(kn)**2; g=sqrt(gsq)/xv; if(a(kn).lt.cl1) u=cl1; if(a(kn).gt.cl2) u=cl2; usq=usq+u**2; if usq.eq.0.0 < b=max(0d0,(g-al2p)/al1p);> else < b0=sqrt(asq-a(kn)**2); b=bnorm(b0,al1p,al2p,g,usq,kerr); if(kerr.ne.0) exit; > asq=usq+b**2; if asq.le.0.0 < a=0.0; exit;> a(kn)=u; isc(kn)=1; f=1.0/(xv*(al1p+al2p/sqrt(asq))); > if(kerr.ne.0) jerr=kerr; return; end; function bnorm(b0,al1p,al2p,g,usq,jerr); implicit double precision(a-h,o-z); data thr,mxit /1.0d-10,100/; b=b0; zsq=b**2+usq; if zsq.le.0.0 < bnorm=0.0; return;> z=sqrt(zsq); f=b*(al1p+al2p/z)-g; jerr=0; z=sqrt(zsq); f=b*(al1p+al2p/z)-g; if(abs(f).le.thr) exit; if b.le.0.0 < b=0.0; exit;> > bnorm=b; if(it.ge.mxit) jerr=90000; return; "Begin: Edited by Naras" entry chg_bnorm(arg,irg); bnorm = 0.0; thr=arg; mxit=irg; return; entry get_bnorm(arg,irg); bnorm = 0.0; arg=thr; irg=mxit; return; "End: Edited by Naras" end; subroutine multsolns(ni,nx,nr,lmu,a,ia,nin,b); implicit double precision(a-h,o-z); double precision a(nx,nr,lmu),b(ni,nr,lmu); integer ia(nx),nin(lmu); return; end; subroutine multuncomp(ni,nr,nx,ca,ia,nin,a); implicit double precision(a-h,o-z); double precision ca(nx,nr),a(ni,nr); integer ia(nx); a=0.0; if nin.gt.0 < > return; end; subroutine multmodval(nx,nr,a0,ca,ia,nin,n,x,f); implicit double precision(a-h,o-z); double precision a0(nr),ca(nx,nr),x(n,*),f(nr,n); integer ia(nx); if(nin.le.0) return; > return; end; subroutine multspelnet (parm,no,ni,nr,x,ix,jx,y,w,jd,vp,cl,ne,nx,nlam,flmin,ulam,thr,isd, jsd,intr,maxit,lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr); implicit double precision(a-h,o-z); double precision x(*),y(no,nr),w(no),vp(ni),ulam(nlam),cl(2,ni); double precision ca(nx,nr,nlam),a0(nr,nlam),rsq(nlam),alm(nlam); integer ix(*),jx(*),jd(*),ia(nx),nin(nlam); %fortran double precision, dimension (:), allocatable :: vq; %mortran if maxval(vp).le.0.0 < jerr=10000; return;> allocate(vq(1:ni),stat=jerr); if(jerr.ne.0) return; vq=max(0d0,vp); vq=vq*ni/sum(vq); call multspelnetn(parm,no,ni,nr,x,ix,jx,y,w,jd,vq,cl,ne,nx,nlam,flmin, ulam,thr,isd,jsd,intr,maxit,lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr); deallocate(vq); return; end; subroutine multspelnetn(parm,no,ni,nr,x,ix,jx,y,w,jd,vp,cl,ne,nx,nlam,flmin, ulam,thr,isd,jsd,intr,maxit,lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr); implicit double precision(a-h,o-z); double precision x(*),vp(ni),y(no,nr),w(no),ulam(nlam),cl(2,ni); double precision ca(nx,nr,nlam),a0(nr,nlam),rsq(nlam),alm(nlam); integer ix(*),jx(*),jd(*),ia(nx),nin(nlam); %fortran double precision, dimension (:), allocatable :: xm,xs,xv,ym,ys integer, dimension (:), allocatable :: ju double precision, dimension (:,:,:), allocatable :: clt allocate(clt(1:2,1:nr,1:ni),stat=jerr) if(jerr.ne.0) return %mortran allocate(xm(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(xs(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(ym(1:nr),stat=jerr); if(jerr.ne.0) return; allocate(ys(1:nr),stat=jerr); if(jerr.ne.0) return; allocate(ju(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(xv(1:ni),stat=jerr); if(jerr.ne.0) return; call spchkvars(no,ni,x,ix,ju); if(jd(1).gt.0) ju(jd(2:(jd(1)+1)))=0; if maxval(ju).le.0 < jerr=7777; return;> call multspstandard1(no,ni,nr,x,ix,jx,y,w,ju,isd,jsd,intr, xm,xs,ym,ys,xv,ys0,jerr); if(jerr.ne.0) return; >> if isd.gt.0 < >>> if jsd.gt.0 < >>> call multspelnet2(parm,ni,nr,y,w,no,ne,nx,x,ix,jx,ju,vp,clt,nlam,flmin, ulam,thr,maxit,xm,xs,xv,ys0,lmu,ca,ia,nin,rsq,alm,nlp,jerr); if(jerr.gt.0) return; if intr.eq.0 < a0(j,k)=0.0;> else < a0(j,k)=ym(j)-dot_product(ca(1:nk,j,k),xm(ia(1:nk)));> > > deallocate(xm,xs,ym,ys,ju,xv,clt); return; end; subroutine multspstandard1(no,ni,nr,x,ix,jx,y,w,ju,isd,jsd,intr, xm,xs,ym,ys,xv,ys0,jerr); implicit double precision(a-h,o-z); double precision x(*),y(no,nr),w(no),xm(ni),xs(ni),xv(ni),ym(nr),ys(nr); integer ix(*),jx(*),ju(ni); w=w/sum(w); if intr.eq.0 < else < xs(j)=1.0; xv(j)=z;> > ys0=0.0; else < ys(j)=1.0; ys0=ys0+z;> > return; > if isd.eq.0 < xs=1.0;> else < xv=1.0;> ys0=0.0; else < ys0=ys0+z;> > if jsd.eq.0 < ys=1.0;> else < ys0=nr;> return; end; subroutine multspelnet2(beta,ni,nr,y,w,no,ne,nx,x,ix,jx,ju,vp,cl,nlam,flmin, ulam,thri,maxit,xm,xs,xv,ys0,lmu,ao,ia,kin,rsqo,almo,nlp,jerr); implicit double precision(a-h,o-z); double precision y(no,nr),w(no),x(*),vp(ni),ulam(nlam),cl(2,nr,ni); double precision ao(nx,nr,nlam),rsqo(nlam),almo(nlam),xm(ni),xs(ni),xv(ni); integer ix(*),jx(*),ju(ni),ia(nx),kin(nlam); %fortran double precision, dimension (:), allocatable :: g,gj,gk,del,o integer, dimension (:), allocatable :: mm,iy,isc double precision, dimension (:,:), allocatable :: a allocate(a(1:nr,1:ni),stat=jerr) if(jerr.ne.0) return %mortran call get_int_parms(sml,eps,big,mnlam,rsqmax,pmin,exmx); allocate(mm(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(g(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(gj(1:nr),stat=jerr); if(jerr.ne.0) return; allocate(gk(1:nr),stat=jerr); if(jerr.ne.0) return; allocate(del(1:nr),stat=jerr); if(jerr.ne.0) return; allocate(o(1:nr),stat=jerr); if(jerr.ne.0) return; allocate(iy(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(isc(1:nr),stat=jerr); if(jerr.ne.0) return; bta=beta; omb=1.0-bta; alm=0.0; iy=0; thr=thri*ys0/nr; "Begin: added by Naras" alf=1.0; "End: added by Naras" if flmin.lt.1.0 < eqs=max(eps,flmin); alf=eqs**(1.0/(nlam-1));> rsq=ys0; a=0.0; mm=0; o=0.0; /nlp,nin/=0; iz=0; mnl=min(mnlam,nlam); g(j)=sqrt(g(j)); > elseif m.gt.2 < alm=alm*alf;> elseif m.eq.1 < alm=big;> else < alm0=0.0; alm0=alm0/max(bta,1.0d-3); alm=alf*alm0; > dem=alm*omb; ab=alm*bta; rsq0=rsq; jz=1; tlam=bta*(2.0*alm-alm0); loop < if(iz*jz.ne.0) go to :b:; :again:nlp=nlp+1; dlx=0.0; gkn=sqrt(gkn); u=1.0-ab*vp(k)/gkn; del=a(:,k); if u.le.0.0 < a(:,k)=0.0;> else < a(:,k)=gk*(u/(xv(k)+dem*vp(k))); call chkbnds(nr,gk,gkn,xv(k),cl(1,1,k), dem*vp(k),ab*vp(k),a(:,k),isc,jerr); if(jerr.ne.0) return; > del=a(:,k)-del; if(maxval(abs(del)).le.0.0) next; if mm(k).eq.0 < nin=nin+1; if(nin.gt.nx) exit; mm(k)=nin; ia(nin)=k; > > if(nin.gt.nx) exit; if dlx.lt.thr < ixx=0; g(j)=sqrt(g(j)); if g(j).gt.ab*vp(j) < iy(j)=1; ixx=1;> > if(ixx.eq.1) go to :again:; exit; > if nlp.gt.maxit < jerr=-m; return;> :b: iz=1; loop < nlp=nlp+1; dlx=0.0; gkn=sqrt(gkn); u=1.0-ab*vp(k)/gkn; del=a(:,k); if u.le.0.0 < a(:,k)=0.0;> else < a(:,k)=gk*(u/(xv(k)+dem*vp(k))); call chkbnds(nr,gk,gkn,xv(k),cl(1,1,k), dem*vp(k),ab*vp(k),a(:,k),isc,jerr); if(jerr.ne.0) return; > del=a(:,k)-del; if(maxval(abs(del)).le.0.0) next; > if(dlx.lt.thr) exit; if nlp.gt.maxit < jerr=-m; return;> > jz=0; > if nin.gt.nx < jerr=-10000-m; exit;> if nin.gt.0 < > kin(m)=nin; rsqo(m)=1.0-rsq/ys0; almo(m)=alm; lmu=m; if(m.lt.mnl) next; if(flmin.ge.1.0) next; me=0; if(me.gt.ne) exit; if(rsq0-rsq.lt.sml*rsq) exit; if(rsqo(m).gt.rsqmax) exit; > deallocate(a,mm,g,iy,gj,gk,del,o); return; end; subroutine multlognetn(parm,no,ni,nc,x,y,g,w,ju,vp,cl,ne,nx,nlam,flmin,ulam, shri,intr,maxit,xv,lmu,a0,a,m,kin,dev0,dev,alm,nlp,jerr); implicit double precision(a-h,o-z); double precision x(no,ni),y(no,nc),g(no,nc),w(no),vp(ni),ulam(nlam),cl(2,ni); double precision a(nx,nc,nlam),a0(nc,nlam),dev(nlam),alm(nlam),xv(ni); integer ju(ni),m(nx),kin(nlam); %fortran double precision, dimension (:,:), allocatable :: q,r,b,bs double precision, dimension (:), allocatable :: sxp,sxpl,ga,gk,del integer, dimension (:), allocatable :: mm,is,ixx,isc allocate(b(0:ni,1:nc),stat=jerr) if(jerr.ne.0) return allocate(bs(0:ni,1:nc),stat=jerr) if(jerr.ne.0) return allocate(q(1:no,1:nc),stat=jerr) if(jerr.ne.0) return allocate(r(1:no,1:nc),stat=jerr) if(jerr.ne.0) return %mortran call get_int_parms(sml,eps,big,mnlam,devmax,pmin,exmx); exmn=-exmx; allocate(mm(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(is(1:max(nc,ni)),stat=jerr); if(jerr.ne.0) return; allocate(sxp(1:no),stat=jerr); if(jerr.ne.0) return; allocate(sxpl(1:no),stat=jerr); if(jerr.ne.0) return; allocate(ga(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(ixx(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(gk(1:nc),stat=jerr); if(jerr.ne.0) return; allocate(del(1:nc),stat=jerr); if(jerr.ne.0) return; allocate(isc(1:nc),stat=jerr); if(jerr.ne.0) return; pmax=1.0-pmin; emin=pmin/pmax; emax=1.0/emin; bta=parm; omb=1.0-bta; dev1=0.0; dev0=0.0; if q0.ge.pmax < jerr =9000+ic; return;> if intr.eq.0 < q0=1.0/nc; b(0,ic)=0.0;> else < b(0,ic)=log(q0); dev1=dev1-q0*b(0,ic);> b(1:ni,ic)=0.0; > if(intr.eq.0) dev1=log(float(nc)); ixx=0; al=0.0; if nonzero(no*nc,g).eq.0 < b(0,:)=b(0,:)-sum(b(0,:))/nc; sxp=0.0; > else < sxp=0.0; if intr.eq.0 < b(0,:)=0.0;> else < call kazero(nc,no,y,g,w,b(0,:),jerr); if(jerr.ne.0) return;> dev1=0.0; sxpl=w*log(sxp); > > dev0=dev0+dev1; "Begin: added by Naras" alf=1.0; "End: added by Naras" if flmin.lt.1.0 < eqs=max(eps,flmin); alf=eqs**(1.0/(nlam-1));> m=0; mm=0; nin=0; nlp=0; mnl=min(mnlam,nlam); bs=0.0; shr=shri*dev0; ga=0.0; > ga=sqrt(ga); elseif ilm.gt.2 < al=al*alf;> elseif ilm.eq.1 < al=big;> else < al0=0.0; al0=al0/max(bta,1.0d-3); al=alf*al0; > al2=al*omb; al1=al*bta; tlam=bta*(2.0*al-al0); :again:continue; loop < /ix,jx,kx/=0; t=0.0; if t.lt.eps < kx=1; exit;> t=2.0*t; alt=al1/t; al2t=al2/t; > loop < nlp=nlp+nc; dlx=0.0; gkn=sqrt(gkn); u=1.0-alt*vp(k)/gkn; del=b(k,:); if u.le.0.0 < b(k,:)=0.0;> else < b(k,:)=gk*(u/(xv(k)+vp(k)*al2t)); call chkbnds1(nc,gk,gkn,xv(k),cl(1,k), cl(2,k),vp(k)*al2t,alt*vp(k),b(k,:),isc,jerr); if(jerr.ne.0) return; > del=b(k,:)-del; if(maxval(abs(del)).le.0.0) next; if mm(k).eq.0 < nin=nin+1; if nin.gt.nx < jx=1; exit;> mm(k)=nin; m(nin)=k; > > if(jx.gt.0) exit; if(dlx.lt.shr) exit; if nlp.gt.maxit < jerr=-ilm; return;> loop < nlp=nlp+nc; dlx=0.0; gkn=sqrt(gkn); u=1.0-alt*vp(k)/gkn; del=b(k,:); if u.le.0.0 < b(k,:)=0.0;> else < b(k,:)=gk*(u/(xv(k)+vp(k)*al2t)); call chkbnds1(nc,gk,gkn,xv(k),cl(1,k), cl(2,k),vp(k)*al2t,alt*vp(k),b(k,:),isc,jerr); if(jerr.ne.0) return; > del=b(k,:)-del; if(maxval(abs(del)).le.0.0) next; > if(dlx.lt.shr) exit; if nlp.gt.maxit < jerr=-ilm; return;> > > if(jx.gt.0) exit; > > > s=-sum(b(0,:))/nc; b(0,:)=b(0,:)+s; if(jx.gt.0) exit; if ix.eq.0 < > ga=sqrt(ga); > if(ix.eq.1) go to :again:; exit; > > if kx.gt.0 < jerr=-20000-ilm; exit;> if jx.gt.0 < jerr=-10000-ilm; exit;> devi=0.0; > kin(ilm)=nin; alm(ilm)=al; lmu=ilm; dev(ilm)=(dev1-devi)/dev0; if(ilm.lt.mnl) next; if(flmin.ge.1.0) next; me=0; if(me.gt.ne) exit; if(dev(ilm).gt.devmax) exit; if(dev(ilm)-dev(ilm-1).lt.sml) exit; > g=log(q); deallocate(sxp,b,bs,r,q,mm,is,ga,ixx,gk,del,sxpl); return; end; subroutine multsprlognetn(parm,no,ni,nc,x,ix,jx,y,g,w,ju,vp,cl,ne,nx,nlam, flmin,ulam,shri,intr,maxit,xv,xb,xs,lmu,a0,a,m,kin,dev0,dev,alm,nlp,jerr); implicit double precision(a-h,o-z); double precision x(*),y(no,nc),g(no,nc),w(no),vp(ni); double precision ulam(nlam),xb(ni),xs(ni),xv(ni); double precision a(nx,nc,nlam),a0(nc,nlam),dev(nlam),alm(nlam),cl(2,ni); integer ix(*),jx(*),ju(ni),m(nx),kin(nlam); %fortran double precision, dimension (:,:), allocatable :: q,r,b,bs double precision, dimension (:), allocatable :: sxp,sxpl,ga,gk double precision, dimension (:), allocatable :: del,sc,svr integer, dimension (:), allocatable :: mm,is,iy,isc allocate(b(0:ni,1:nc),stat=jerr) if(jerr.ne.0) return allocate(bs(0:ni,1:nc),stat=jerr) if(jerr.ne.0) return allocate(q(1:no,1:nc),stat=jerr) if(jerr.ne.0) return allocate(r(1:no,1:nc),stat=jerr) if(jerr.ne.0) return %mortran call get_int_parms(sml,eps,big,mnlam,devmax,pmin,exmx); exmn=-exmx; allocate(mm(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(ga(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(gk(1:nc),stat=jerr); if(jerr.ne.0) return; allocate(del(1:nc),stat=jerr); if(jerr.ne.0) return; allocate(iy(1:ni),stat=jerr); if(jerr.ne.0) return; allocate(is(1:max(nc,ni)),stat=jerr); if(jerr.ne.0) return; allocate(sxp(1:no),stat=jerr); if(jerr.ne.0) return; allocate(sxpl(1:no),stat=jerr); if(jerr.ne.0) return; allocate(svr(1:nc),stat=jerr); if(jerr.ne.0) return; allocate(sc(1:no),stat=jerr); if(jerr.ne.0) return; allocate(isc(1:nc),stat=jerr); if(jerr.ne.0) return; pmax=1.0-pmin; emin=pmin/pmax; emax=1.0/emin; bta=parm; omb=1.0-bta; dev1=0.0; dev0=0.0; if q0.ge.pmax < jerr =9000+ic; return;> b(1:ni,ic)=0.0; if intr.eq.0 < q0=1.0/nc; b(0,ic)=0.0;> else < b(0,ic)=log(q0); dev1=dev1-q0*b(0,ic);> > if(intr.eq.0) dev1=log(float(nc)); iy=0; al=0.0; if nonzero(no*nc,g).eq.0 < b(0,:)=b(0,:)-sum(b(0,:))/nc; sxp=0.0; > else < sxp=0.0; if intr.eq.0 < b(0,:)=0.0;> else < call kazero(nc,no,y,g,w,b(0,:),jerr); if(jerr.ne.0) return;> dev1=0.0; sxpl=w*log(sxp); > > dev0=dev0+dev1; "Begin: added by Naras" alf=1.0; "End: added by Naras" if flmin.lt.1.0 < eqs=max(eps,flmin); alf=eqs**(1.0/(nlam-1));> m=0; mm=0; nin=0; nlp=0; mnl=min(mnlam,nlam); bs=0.0; shr=shri*dev0; ga=0.0; > ga=sqrt(ga); elseif ilm.gt.2 < al=al*alf;> elseif ilm.eq.1 < al=big;> else < al0=0.0; al0=al0/max(bta,1.0d-3); al=alf*al0; > al2=al*omb; al1=al*bta; tlam=bta*(2.0*al-al0); :again:continue; loop < /ixx,jxx,kxx/=0; t=0.0; if t.lt.eps < kxx=1; exit;> t=2.0*t; alt=al1/t; al2t=al2/t; > loop < nlp=nlp+nc; dlx=0.0; gkn=sqrt(gkn); u=1.0-alt*vp(k)/gkn; if u.le.0.0 < b(k,:)=0.0;> else < b(k,:)=gk*(u/(xv(k)+vp(k)*al2t)); call chkbnds1(nc,gk,gkn,xv(k),cl(1,k),cl(2,k), vp(k)*al2t,alt*vp(k),b(k,:),isc,jerr); if(jerr.ne.0) return; > del=b(k,:)-del; if(maxval(abs(del)).le.0.0) next; if mm(k).eq.0 < nin=nin+1; if nin.gt.nx < jxx=1; exit;> mm(k)=nin; m(nin)=k; > > if(jxx.gt.0) exit; if(dlx.lt.shr) exit; if nlp.gt.maxit < jerr=-ilm; return;> loop < nlp=nlp+nc; dlx=0.0; gkn=sqrt(gkn); u=1.0-alt*vp(k)/gkn; if u.le.0.0 < b(k,:)=0.0;> else < b(k,:)=gk*(u/(xv(k)+vp(k)*al2t)); call chkbnds1(nc,gk,gkn,xv(k),cl(1,k),cl(2,k), vp(k)*al2t,alt*vp(k),b(k,:),isc,jerr); if(jerr.ne.0) return; > del=b(k,:)-del; if(maxval(abs(del)).le.0.0) next; > if(dlx.lt.shr) exit; if nlp.gt.maxit < jerr=-ilm; return;> > > if(jxx.gt.0) exit; > > sc=b(0,ic)+g(:,ic); b0=0.0; sc=min(max(exmn,sc+b0),exmx); sxp=sxp-q(:,ic); q(:,ic)=min(max(emin*sxp,exp(sc)),emax*sxp); sxp=sxp+q(:,ic); > s=sum(b(0,:))/nc; b(0,:)=b(0,:)-s; if(jxx.gt.0) exit; if ixx.eq.0 < > ga=sqrt(ga); > if(ixx.eq.1) go to :again:; exit; > > if kxx.gt.0 < jerr=-20000-ilm; exit;> if jxx.gt.0 < jerr=-10000-ilm; exit;> devi=0.0; > kin(ilm)=nin; alm(ilm)=al; lmu=ilm; dev(ilm)=(dev1-devi)/dev0; if(ilm.lt.mnl) next; if(flmin.ge.1.0) next; me=0; if(me.gt.ne) exit; if(dev(ilm).gt.devmax) exit; if(dev(ilm)-dev(ilm-1).lt.sml) exit; > g=log(q); deallocate(sxp,b,bs,r,q,mm,is,sc,ga,iy,gk,del,sxpl); return; end; %fortran subroutine psort7 (v,a,ii,jj) implicit double precision(a-h,o-z) c c puts into a the permutation vector which sorts v into c increasing order. the array v is not modified. c only elements from ii to jj are considered. c arrays iu(k) and il(k) permit sorting up to 2**(k+1)-1 elements c c this is a modification of cacm algorithm #347 by r. c. singleton, c which is a modified hoare quicksort. c dimension a(jj),v(jj),iu(20),il(20) integer t,tt integer a double precision v m=1 i=ii j=jj 10 if (i.ge.j) go to 80 20 k=i ij=(j+i)/2 t=a(ij) vt=v(t) if (v(a(i)).le.vt) go to 30 a(ij)=a(i) a(i)=t t=a(ij) vt=v(t) 30 l=j if (v(a(j)).ge.vt) go to 50 a(ij)=a(j) a(j)=t t=a(ij) vt=v(t) if (v(a(i)).le.vt) go to 50 a(ij)=a(i) a(i)=t t=a(ij) vt=v(t) go to 50 40 a(l)=a(k) a(k)=tt 50 l=l-1 if (v(a(l)).gt.vt) go to 50 tt=a(l) vtt=v(tt) 60 k=k+1 if (v(a(k)).lt.vt) go to 60 if (k.le.l) go to 40 if (l-i.le.j-k) go to 70 il(m)=i iu(m)=l i=k m=m+1 go to 90 70 il(m)=k iu(m)=j j=l m=m+1 go to 90 80 m=m-1 if (m.eq.0) return i=il(m) j=iu(m) 90 if (j-i.gt.10) go to 20 if (i.eq.ii) go to 10 i=i-1 100 i=i+1 if (i.eq.j) go to 80 t=a(i+1) vt=v(t) if (v(a(i)).le.vt) go to 100 k=i 110 a(k+1)=a(k) k=k-1 if (vt.lt.v(a(k))) go to 110 a(k+1)=t go to 100 end %% glmnet/src/0000755000176200001440000000000013251400020012312 5ustar liggesusersglmnet/src/glmnet_init.c0000644000176200001440000002546613251400020015004 0ustar liggesusers// Automatically generated, editing not advised. #ifndef R_GLMNET_H #define R_GLMNET_H #include #include #include #ifdef ENABLE_NLS #include #define _(String) dgettext ("glmnet", String) #else #define _(String) (String) #endif #define FDEF(name) {#name, (DL_FUNC) &F77_SUB(name), sizeof(name ## _t)/sizeof(name ## _t[0]), name ##_t} void F77_SUB(coxnet)( double *parm, int *no, int *ni, double *x, double *y, double *d, double *o, double *w, int *jd, double *vp, double *cl, int *ne, int *nx, int *nlam, double *flmin, double *ulam, double *thr, int *maxit, int *isd, int *lmu, double *ca, int *ia, int *nin, double *dev0, double *fdev, double *alm, int *nlp, int *jerrc ); static R_NativePrimitiveArgType coxnet_t[] = { REALSXP, INTSXP, INTSXP, REALSXP, REALSXP, REALSXP, REALSXP, REALSXP, INTSXP, REALSXP, REALSXP, INTSXP, INTSXP, INTSXP, REALSXP, REALSXP, REALSXP, INTSXP, INTSXP, INTSXP, REALSXP, INTSXP, INTSXP, REALSXP, REALSXP, REALSXP, INTSXP, INTSXP }; void F77_SUB(spelnet)( int *ka, double *parm, int *no, int *ni, double *x, int *ix, int *jx, double *y, double *w, int *jd, double *vp, double *cl, int *ne, int *nx, int *nlam, double *flmin, double *ulam, double *thr, int *isd, int *intr, int *maxit, int *lmu, double *a0, double *ca, int *ia, int *nin, double *rsq, double *alm, int *nlp, int *jerr ); static R_NativePrimitiveArgType spelnet_t[] = { INTSXP, REALSXP, INTSXP, INTSXP, REALSXP, INTSXP, INTSXP, REALSXP, REALSXP, INTSXP, REALSXP, REALSXP, INTSXP, INTSXP, INTSXP, REALSXP, REALSXP, REALSXP, INTSXP, INTSXP, INTSXP, INTSXP, REALSXP, REALSXP, INTSXP, INTSXP, REALSXP, REALSXP, INTSXP, INTSXP }; void F77_SUB(elnet)( int *ka, double *parm, int *no, int *ni, double *x, double *y, double *w, int *jd, double *vp, double *cl, int *ne, int *nx, int *nlam, double *flmin, double *ulam, double *thr, int *isd, int *intr, int *maxit, int *lmu, double *a0, double *ca, int *ia, int *nin, double *rsq, double *alm, int *nlp, int *jerr ); static R_NativePrimitiveArgType elnet_t[] = { INTSXP, REALSXP, INTSXP, INTSXP, REALSXP, REALSXP, REALSXP, INTSXP, REALSXP, REALSXP, INTSXP, INTSXP, INTSXP, REALSXP, REALSXP, REALSXP, INTSXP, INTSXP, INTSXP, INTSXP, REALSXP, REALSXP, INTSXP, INTSXP, REALSXP, REALSXP, INTSXP, INTSXP }; void F77_SUB(fishnet)( double *parm, int *no, int *ni, double *x, double *y, double *g, double *w, int *jd, double *vp, double *cl, int *ne, int *nx, int *nlam, double *flmin, double *ulam, double *thr, int *isd, int *intr, int *maxit, int *lmu, double *a0, double *ca, int *ia, int *nin, double *dev0, double *dev, double *alm, int *nlp, int *jerr ); static R_NativePrimitiveArgType fishnet_t[] = { REALSXP, INTSXP, INTSXP, REALSXP, REALSXP, REALSXP, REALSXP, INTSXP, REALSXP, REALSXP, INTSXP, INTSXP, INTSXP, REALSXP, REALSXP, REALSXP, INTSXP, INTSXP, INTSXP, INTSXP, REALSXP, REALSXP, INTSXP, INTSXP, REALSXP, REALSXP, REALSXP, INTSXP, INTSXP }; void F77_SUB(spfishnet)( double *parm, int *no, int *ni, double *x, int *ix, int *jx, double *y, double *g, double *w, int *jd, double *vp, double *cl, int *ne, int *nx, int *nlam, double *flmin, double *ulam, double *thr, int *isd, int *intr, int *maxit, int *lmu, double *a0, double *ca, int *ia, int *nin, double *dev0, double *dev, double *alm, int *nlp, int *jerr ); static R_NativePrimitiveArgType spfishnet_t[] = { REALSXP, INTSXP, INTSXP, REALSXP, INTSXP, INTSXP, REALSXP, REALSXP, REALSXP, INTSXP, REALSXP, REALSXP, INTSXP, INTSXP, INTSXP, REALSXP, REALSXP, REALSXP, INTSXP, INTSXP, INTSXP, INTSXP, REALSXP, REALSXP, INTSXP, INTSXP, REALSXP, REALSXP, REALSXP, INTSXP, INTSXP }; void F77_SUB(splognet)( double *parm, int *no, int *ni, int *nc, double *x, int *ix, int *jx, double *y, double *g, int *jd, double *vp, double *cl, int *ne, int *nx, int *nlam, double *flmin, double *ulam, double *thr, int *isd, int *intr, int *maxit, int *kopt, int *lmu, double *a0, double *ca, int *ia, int *nin, double *dev0, double *dev, double *alm, int *nlp, int *jerr ); static R_NativePrimitiveArgType splognet_t[] = { REALSXP, INTSXP, INTSXP, INTSXP, REALSXP, INTSXP, INTSXP, REALSXP, REALSXP, INTSXP, REALSXP, REALSXP, INTSXP, INTSXP, INTSXP, REALSXP, REALSXP, REALSXP, INTSXP, INTSXP, INTSXP, INTSXP, INTSXP, REALSXP, REALSXP, INTSXP, INTSXP, REALSXP, REALSXP, REALSXP, INTSXP, INTSXP }; void F77_SUB(lognet)( double *parm, int *no, int *ni, int *nc, double *x, double *y, double *g, int *jd, double *vp, double *cl, int *ne, int *nx, int *nlam, double *flmin, double *ulam, double *thr, int *isd, int *intr, int *maxit, int *kopt, int *lmu, double *a0, double *ca, int *ia, int *nin, double *dev0, double *dev, double *alm, int *nlp, int *jerr ); static R_NativePrimitiveArgType lognet_t[] = { REALSXP, INTSXP, INTSXP, INTSXP, REALSXP, REALSXP, REALSXP, INTSXP, REALSXP, REALSXP, INTSXP, INTSXP, INTSXP, REALSXP, REALSXP, REALSXP, INTSXP, INTSXP, INTSXP, INTSXP, INTSXP, REALSXP, REALSXP, INTSXP, INTSXP, REALSXP, REALSXP, REALSXP, INTSXP, INTSXP }; void F77_SUB(multspelnet)( double *parm, int *no, int *ni, int *nr, double *x, int *ix, int *jx, double *y, double *w, int *jd, double *vp, double *cl, int *ne, int *nx, int *nlam, double *flmin, double *ulam, double *thr, int *isd, int *jsd, int *intr, int *maxit, int *lmu, double *a0, double *ca, int *ia, int *nin, double *rsq, double *alm, int *nlp, int *jerr ); static R_NativePrimitiveArgType multspelnet_t[] = { REALSXP, INTSXP, INTSXP, INTSXP, REALSXP, INTSXP, INTSXP, REALSXP, REALSXP, INTSXP, REALSXP, REALSXP, INTSXP, INTSXP, INTSXP, REALSXP, REALSXP, REALSXP, INTSXP, INTSXP, INTSXP, INTSXP, INTSXP, REALSXP, REALSXP, INTSXP, INTSXP, REALSXP, REALSXP, INTSXP, INTSXP }; void F77_SUB(multelnet)( double *parm, int *no, int *ni, int *nr, double *x, double *y, double *w, int *jd, double *vp, double *cl, int *ne, int *nx, int *nlam, double *flmin, double *ulam, double *thr, int *isd, int *jsd, int *intr, int *maxit, int *lmu, double *a0, double *ca, int *ia, int *nin, double *rsq, double *alm, int *nlp, int *jerr ); static R_NativePrimitiveArgType multelnet_t[] = { REALSXP, INTSXP, INTSXP, INTSXP, REALSXP, REALSXP, REALSXP, INTSXP, REALSXP, REALSXP, INTSXP, INTSXP, INTSXP, REALSXP, REALSXP, REALSXP, INTSXP, INTSXP, INTSXP, INTSXP, INTSXP, REALSXP, REALSXP, INTSXP, INTSXP, REALSXP, REALSXP, INTSXP, INTSXP }; void F77_SUB(loglike)( int *no, int *ni, double *x, double *y, double *d, double *g, double *w, int *nlam, double *a, double *flog, int *jerr ); static R_NativePrimitiveArgType loglike_t[] = { INTSXP, INTSXP, REALSXP, REALSXP, REALSXP, REALSXP, REALSXP, INTSXP, REALSXP, REALSXP, INTSXP }; void F77_SUB(get_int_parms)( double *sml, double *eps, double *big, int *mnlam, double *rsqmax, double *pmin, double *exmx ); static R_NativePrimitiveArgType get_int_parms_t[] = { REALSXP, REALSXP, REALSXP, INTSXP, REALSXP, REALSXP, REALSXP }; void F77_SUB(chg_fract_dev)( double *fdev ); static R_NativePrimitiveArgType chg_fract_dev_t[] = { REALSXP }; void F77_SUB(chg_dev_max)( double *devmax ); static R_NativePrimitiveArgType chg_dev_max_t[] = { REALSXP }; void F77_SUB(chg_min_flmin)( double *eps ); static R_NativePrimitiveArgType chg_min_flmin_t[] = { REALSXP }; void F77_SUB(chg_big)( double *big ); static R_NativePrimitiveArgType chg_big_t[] = { REALSXP }; void F77_SUB(chg_min_lambdas)( int *mnlam ); static R_NativePrimitiveArgType chg_min_lambdas_t[] = { INTSXP }; void F77_SUB(chg_min_null_prob)( double *pmin ); static R_NativePrimitiveArgType chg_min_null_prob_t[] = { REALSXP }; void F77_SUB(chg_max_exp)( double *exmx ); static R_NativePrimitiveArgType chg_max_exp_t[] = { REALSXP }; void F77_SUB(chg_bnorm)( double *prec, int *mxit ); static R_NativePrimitiveArgType chg_bnorm_t[] = { REALSXP, INTSXP }; void F77_SUB(get_bnorm)( double *arg, int *irg ); static R_NativePrimitiveArgType get_bnorm_t[] = { REALSXP, INTSXP }; static R_FortranMethodDef fMethods[] = { FDEF(coxnet) , FDEF(spelnet) , FDEF(elnet) , FDEF(fishnet) , FDEF(spfishnet) , FDEF(splognet) , FDEF(lognet) , FDEF(multspelnet) , FDEF(multelnet) , FDEF(loglike) , FDEF(get_int_parms) , FDEF(chg_fract_dev) , FDEF(chg_dev_max) , FDEF(chg_min_flmin) , FDEF(chg_big) , FDEF(chg_min_lambdas) , FDEF(chg_min_null_prob) , FDEF(chg_max_exp) , FDEF(chg_bnorm) , FDEF(get_bnorm) , {NULL, NULL, 0} }; void R_init_glmnet(DllInfo *dll){ R_registerRoutines(dll, NULL, NULL, fMethods, NULL); R_useDynamicSymbols(dll, FALSE); } #endif glmnet/src/glmnet5dp.f0000644000176200001440000206230713251400020014372 0ustar liggesusersc mortran 2.0 (version of 7/04/75 mod 7/4/87 (ajc)) subroutine get_int_parms(sml,eps,big,mnlam,rsqmax,pmin,exmx) 772 implicit double precision(a-h,o-z) 773 data sml0,eps0,big0,mnlam0,rsqmax0,pmin0,exmx0 /1.0d-5,1.0d-6,9.9 775 *d35,5,0.999,1.0d-9,250.0/ sml=sml0 775 eps=eps0 775 big=big0 775 mnlam=mnlam0 775 rsqmax=rsqmax0 776 pmin=pmin0 776 exmx=exmx0 777 return 778 entry chg_fract_dev(arg) 778 sml0=arg 778 return 779 entry chg_dev_max(arg) 779 rsqmax0=arg 779 return 780 entry chg_min_flmin(arg) 780 eps0=arg 780 return 781 entry chg_big(arg) 781 big0=arg 781 return 782 entry chg_min_lambdas(irg) 782 mnlam0=irg 782 return 783 entry chg_min_null_prob(arg) 783 pmin0=arg 783 return 784 entry chg_max_exp(arg) 784 exmx0=arg 784 return 785 end 786 subroutine elnet (ka,parm,no,ni,x,y,w,jd,vp,cl,ne,nx,nlam,flmin,u 789 *lam,thr,isd,intr,maxit, lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr) implicit double precision(a-h,o-z) 790 double precision x(no,ni),y(no),w(no),vp(ni),ca(nx,nlam),cl(2,ni) 791 double precision ulam(nlam),a0(nlam),rsq(nlam),alm(nlam) 792 integer jd(*),ia(nx),nin(nlam) 793 double precision, dimension (:), allocatable :: vq; if(maxval(vp) .gt. 0.0)goto 10021 796 jerr=10000 796 return 796 10021 continue 797 allocate(vq(1:ni),stat=jerr) 797 if(jerr.ne.0) return 798 vq=max(0d0,vp) 798 vq=vq*ni/sum(vq) 799 if(ka .ne. 1)goto 10041 800 call elnetu (parm,no,ni,x,y,w,jd,vq,cl,ne,nx,nlam,flmin,ulam,thr, 803 *isd,intr,maxit, lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr) goto 10051 804 10041 continue 805 call elnetn (parm,no,ni,x,y,w,jd,vq,cl,ne,nx,nlam,flmin,ulam,thr,i 808 *sd,intr,maxit, lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr) 10051 continue 809 10031 continue 809 deallocate(vq) 810 return 811 end 812 subroutine elnetu (parm,no,ni,x,y,w,jd,vp,cl,ne,nx,nlam,flmin,ula 815 *m,thr,isd,intr,maxit, lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr) implicit double precision(a-h,o-z) 816 double precision x(no,ni),y(no),w(no),vp(ni),ulam(nlam),cl(2,ni) 817 double precision ca(nx,nlam),a0(nlam),rsq(nlam),alm(nlam) 818 integer jd(*),ia(nx),nin(nlam) 819 double precision, dimension (:), allocatable :: xm,xs,g,xv,vlam integer, dimension (:), allocatable :: ju allocate(g(1:ni),stat=jerr) 824 if(jerr.ne.0) return 825 allocate(xm(1:ni),stat=jerr) 826 if(jerr.ne.0) return 827 allocate(xs(1:ni),stat=jerr) 828 if(jerr.ne.0) return 829 allocate(ju(1:ni),stat=jerr) 830 if(jerr.ne.0) return 831 allocate(xv(1:ni),stat=jerr) 832 if(jerr.ne.0) return 833 allocate(vlam(1:nlam),stat=jerr) 834 if(jerr.ne.0) return 835 call chkvars(no,ni,x,ju) 836 if(jd(1).gt.0) ju(jd(2:(jd(1)+1)))=0 837 if(maxval(ju) .gt. 0)goto 10071 837 jerr=7777 837 return 837 10071 continue 838 call standard(no,ni,x,y,w,isd,intr,ju,g,xm,xs,ym,ys,xv,jerr) 839 if(jerr.ne.0) return 840 cl=cl/ys 840 if(isd .le. 0)goto 10091 840 10100 do 10101 j=1,ni 840 cl(:,j)=cl(:,j)*xs(j) 840 10101 continue 840 10102 continue 840 10091 continue 841 if(flmin.ge.1.0) vlam=ulam/ys 842 call elnet1(parm,ni,ju,vp,cl,g,no,ne,nx,x,nlam,flmin,vlam,thr,maxi 844 *t,xv, lmu,ca,ia,nin,rsq,alm,nlp,jerr) if(jerr.gt.0) return 845 10110 do 10111 k=1,lmu 845 alm(k)=ys*alm(k) 845 nk=nin(k) 846 10120 do 10121 l=1,nk 846 ca(l,k)=ys*ca(l,k)/xs(ia(l)) 846 10121 continue 846 10122 continue 846 a0(k)=0.0 847 if(intr.ne.0) a0(k)=ym-dot_product(ca(1:nk,k),xm(ia(1:nk))) 848 10111 continue 849 10112 continue 849 deallocate(xm,xs,g,ju,xv,vlam) 850 return 851 end 852 subroutine standard (no,ni,x,y,w,isd,intr,ju,g,xm,xs,ym,ys,xv,jerr 853 *) implicit double precision(a-h,o-z) 854 double precision x(no,ni),y(no),w(no),g(ni),xm(ni),xs(ni),xv(ni) 855 integer ju(ni) 856 double precision, dimension (:), allocatable :: v allocate(v(1:no),stat=jerr) 859 if(jerr.ne.0) return 860 w=w/sum(w) 860 v=sqrt(w) 861 if(intr .ne. 0)goto 10141 861 ym=0.0 861 y=v*y 862 ys=sqrt(dot_product(y,y)-dot_product(v,y)**2) 862 y=y/ys 863 10150 do 10151 j=1,ni 863 if(ju(j).eq.0)goto 10151 863 xm(j)=0.0 863 x(:,j)=v*x(:,j) 864 xv(j)=dot_product(x(:,j),x(:,j)) 865 if(isd .eq. 0)goto 10171 865 xbq=dot_product(v,x(:,j))**2 865 vc=xv(j)-xbq 866 xs(j)=sqrt(vc) 866 x(:,j)=x(:,j)/xs(j) 866 xv(j)=1.0+xbq/vc 867 goto 10181 868 10171 continue 868 xs(j)=1.0 868 10181 continue 869 10161 continue 869 10151 continue 870 10152 continue 870 goto 10191 871 10141 continue 872 10200 do 10201 j=1,ni 872 if(ju(j).eq.0)goto 10201 873 xm(j)=dot_product(w,x(:,j)) 873 x(:,j)=v*(x(:,j)-xm(j)) 874 xv(j)=dot_product(x(:,j),x(:,j)) 874 if(isd.gt.0) xs(j)=sqrt(xv(j)) 875 10201 continue 876 10202 continue 876 if(isd .ne. 0)goto 10221 876 xs=1.0 876 goto 10231 877 10221 continue 878 10240 do 10241 j=1,ni 878 if(ju(j).eq.0)goto 10241 878 x(:,j)=x(:,j)/xs(j) 878 10241 continue 879 10242 continue 879 xv=1.0 880 10231 continue 881 10211 continue 881 ym=dot_product(w,y) 881 y=v*(y-ym) 881 ys=sqrt(dot_product(y,y)) 881 y=y/ys 882 10191 continue 883 10131 continue 883 g=0.0 883 10250 do 10251 j=1,ni 883 if(ju(j).ne.0) g(j)=dot_product(y,x(:,j)) 883 10251 continue 884 10252 continue 884 deallocate(v) 885 return 886 end 887 subroutine elnet1 (beta,ni,ju,vp,cl,g,no,ne,nx,x,nlam,flmin,ulam,t 889 *hr,maxit,xv, lmu,ao,ia,kin,rsqo,almo,nlp,jerr) implicit double precision(a-h,o-z) 890 double precision vp(ni),g(ni),x(no,ni),ulam(nlam),ao(nx,nlam) 891 double precision rsqo(nlam),almo(nlam),xv(ni) 892 double precision cl(2,ni) 893 integer ju(ni),ia(nx),kin(nlam) 894 double precision, dimension (:), allocatable :: a,da integer, dimension (:), allocatable :: mm double precision, dimension (:,:), allocatable :: c allocate(c(1:ni,1:nx),stat=jerr) if(jerr.ne.0) return; call get_int_parms(sml,eps,big,mnlam,rsqmax,pmin,exmx) 902 allocate(a(1:ni),stat=jerr) 903 if(jerr.ne.0) return 904 allocate(mm(1:ni),stat=jerr) 905 if(jerr.ne.0) return 906 allocate(da(1:ni),stat=jerr) 907 if(jerr.ne.0) return 908 bta=beta 908 omb=1.0-bta 909 if(flmin .ge. 1.0)goto 10271 909 eqs=max(eps,flmin) 909 alf=eqs**(1.0/(nlam-1)) 909 10271 continue 910 rsq=0.0 910 a=0.0 910 mm=0 910 nlp=0 910 nin=nlp 910 iz=0 910 mnl=min(mnlam,nlam) 912 alm=0.0 914 10280 do 10281 m=1,nlam 915 if(flmin .lt. 1.0)goto 10301 915 alm=ulam(m) 915 goto 10291 916 10301 if(m .le. 2)goto 10311 916 alm=alm*alf 916 goto 10291 917 10311 if(m .ne. 1)goto 10321 917 alm=big 917 goto 10331 918 10321 continue 918 alm=0.0 919 10340 do 10341 j=1,ni 919 if(ju(j).eq.0)goto 10341 919 if(vp(j).le.0.0)goto 10341 920 alm=max(alm,abs(g(j))/vp(j)) 921 10341 continue 922 10342 continue 922 alm=alf*alm/max(bta,1.0d-3) 923 10331 continue 924 10291 continue 924 dem=alm*omb 924 ab=alm*bta 924 rsq0=rsq 924 jz=1 925 10350 continue 925 10351 continue 925 if(iz*jz.ne.0) go to 10360 925 nlp=nlp+1 925 dlx=0.0 926 10370 do 10371 k=1,ni 926 if(ju(k).eq.0)goto 10371 927 ak=a(k) 927 u=g(k)+ak*xv(k) 927 v=abs(u)-vp(k)*ab 927 a(k)=0.0 929 if(v.gt.0.0) a(k)=max(cl(1,k),min(cl(2,k),sign(v,u)/(xv(k)+vp(k)*d 930 *em))) if(a(k).eq.ak)goto 10371 931 if(mm(k) .ne. 0)goto 10391 931 nin=nin+1 931 if(nin.gt.nx)goto 10372 932 10400 do 10401 j=1,ni 932 if(ju(j).eq.0)goto 10401 933 if(mm(j) .eq. 0)goto 10421 933 c(j,nin)=c(k,mm(j)) 933 goto 10401 933 10421 continue 934 if(j .ne. k)goto 10441 934 c(j,nin)=xv(j) 934 goto 10401 934 10441 continue 935 c(j,nin)=dot_product(x(:,j),x(:,k)) 936 10401 continue 937 10402 continue 937 mm(k)=nin 937 ia(nin)=k 938 10391 continue 939 del=a(k)-ak 939 rsq=rsq+del*(2.0*g(k)-del*xv(k)) 940 dlx=max(xv(k)*del**2,dlx) 941 10450 do 10451 j=1,ni 941 if(ju(j).ne.0) g(j)=g(j)-c(j,mm(k))*del 941 10451 continue 942 10452 continue 942 10371 continue 943 10372 continue 943 if(dlx.lt.thr)goto 10352 943 if(nin.gt.nx)goto 10352 944 if(nlp .le. maxit)goto 10471 944 jerr=-m 944 return 944 10471 continue 945 10360 continue 945 iz=1 945 da(1:nin)=a(ia(1:nin)) 946 10480 continue 946 10481 continue 946 nlp=nlp+1 946 dlx=0.0 947 10490 do 10491 l=1,nin 947 k=ia(l) 947 ak=a(k) 947 u=g(k)+ak*xv(k) 947 v=abs(u)-vp(k)*ab 948 a(k)=0.0 950 if(v.gt.0.0) a(k)=max(cl(1,k),min(cl(2,k),sign(v,u)/(xv(k)+vp(k)*d 951 *em))) if(a(k).eq.ak)goto 10491 952 del=a(k)-ak 952 rsq=rsq+del*(2.0*g(k)-del*xv(k)) 953 dlx=max(xv(k)*del**2,dlx) 954 10500 do 10501 j=1,nin 954 g(ia(j))=g(ia(j))-c(ia(j),mm(k))*del 954 10501 continue 955 10502 continue 955 10491 continue 956 10492 continue 956 if(dlx.lt.thr)goto 10482 956 if(nlp .le. maxit)goto 10521 956 jerr=-m 956 return 956 10521 continue 957 goto 10481 958 10482 continue 958 da(1:nin)=a(ia(1:nin))-da(1:nin) 959 10530 do 10531 j=1,ni 959 if(mm(j).ne.0)goto 10531 960 if(ju(j).ne.0) g(j)=g(j)-dot_product(da(1:nin),c(j,1:nin)) 961 10531 continue 962 10532 continue 962 jz=0 963 goto 10351 964 10352 continue 964 if(nin .le. nx)goto 10551 964 jerr=-10000-m 964 goto 10282 964 10551 continue 965 if(nin.gt.0) ao(1:nin,m)=a(ia(1:nin)) 965 kin(m)=nin 966 rsqo(m)=rsq 966 almo(m)=alm 966 lmu=m 967 if(m.lt.mnl)goto 10281 967 if(flmin.ge.1.0)goto 10281 968 me=0 968 10560 do 10561 j=1,nin 968 if(ao(j,m).ne.0.0) me=me+1 968 10561 continue 968 10562 continue 968 if(me.gt.ne)goto 10282 969 if(rsq-rsq0.lt.sml*rsq)goto 10282 969 if(rsq.gt.rsqmax)goto 10282 970 10281 continue 971 10282 continue 971 deallocate(a,mm,c,da) 972 return 973 end 974 subroutine elnetn (parm,no,ni,x,y,w,jd,vp,cl,ne,nx,nlam,flmin,ulam 976 *,thr,isd, intr,maxit,lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr) implicit double precision(a-h,o-z) 977 double precision vp(ni),x(no,ni),y(no),w(no),ulam(nlam),cl(2,ni) 978 double precision ca(nx,nlam),a0(nlam),rsq(nlam),alm(nlam) 979 integer jd(*),ia(nx),nin(nlam) 980 double precision, dimension (:), allocatable :: xm,xs,xv,vlam integer, dimension (:), allocatable :: ju allocate(xm(1:ni),stat=jerr) 985 if(jerr.ne.0) return 986 allocate(xs(1:ni),stat=jerr) 987 if(jerr.ne.0) return 988 allocate(ju(1:ni),stat=jerr) 989 if(jerr.ne.0) return 990 allocate(xv(1:ni),stat=jerr) 991 if(jerr.ne.0) return 992 allocate(vlam(1:nlam),stat=jerr) 993 if(jerr.ne.0) return 994 call chkvars(no,ni,x,ju) 995 if(jd(1).gt.0) ju(jd(2:(jd(1)+1)))=0 996 if(maxval(ju) .gt. 0)goto 10581 996 jerr=7777 996 return 996 10581 continue 997 call standard1(no,ni,x,y,w,isd,intr,ju,xm,xs,ym,ys,xv,jerr) 998 if(jerr.ne.0) return 999 cl=cl/ys 999 if(isd .le. 0)goto 10601 999 10610 do 10611 j=1,ni 999 cl(:,j)=cl(:,j)*xs(j) 999 10611 continue 999 10612 continue 999 10601 continue 1000 if(flmin.ge.1.0) vlam=ulam/ys 1001 call elnet2(parm,ni,ju,vp,cl,y,no,ne,nx,x,nlam,flmin,vlam,thr,maxi 1003 *t,xv, lmu,ca,ia,nin,rsq,alm,nlp,jerr) if(jerr.gt.0) return 1004 10620 do 10621 k=1,lmu 1004 alm(k)=ys*alm(k) 1004 nk=nin(k) 1005 10630 do 10631 l=1,nk 1005 ca(l,k)=ys*ca(l,k)/xs(ia(l)) 1005 10631 continue 1005 10632 continue 1005 a0(k)=0.0 1006 if(intr.ne.0) a0(k)=ym-dot_product(ca(1:nk,k),xm(ia(1:nk))) 1007 10621 continue 1008 10622 continue 1008 deallocate(xm,xs,ju,xv,vlam) 1009 return 1010 end 1011 subroutine standard1 (no,ni,x,y,w,isd,intr,ju,xm,xs,ym,ys,xv,jerr) 1012 implicit double precision(a-h,o-z) 1013 double precision x(no,ni),y(no),w(no),xm(ni),xs(ni),xv(ni) 1013 integer ju(ni) 1014 double precision, dimension (:), allocatable :: v allocate(v(1:no),stat=jerr) 1017 if(jerr.ne.0) return 1018 w=w/sum(w) 1018 v=sqrt(w) 1019 if(intr .ne. 0)goto 10651 1019 ym=0.0 1019 y=v*y 1020 ys=sqrt(dot_product(y,y)-dot_product(v,y)**2) 1020 y=y/ys 1021 10660 do 10661 j=1,ni 1021 if(ju(j).eq.0)goto 10661 1021 xm(j)=0.0 1021 x(:,j)=v*x(:,j) 1022 xv(j)=dot_product(x(:,j),x(:,j)) 1023 if(isd .eq. 0)goto 10681 1023 xbq=dot_product(v,x(:,j))**2 1023 vc=xv(j)-xbq 1024 xs(j)=sqrt(vc) 1024 x(:,j)=x(:,j)/xs(j) 1024 xv(j)=1.0+xbq/vc 1025 goto 10691 1026 10681 continue 1026 xs(j)=1.0 1026 10691 continue 1027 10671 continue 1027 10661 continue 1028 10662 continue 1028 go to 10700 1029 10651 continue 1030 10710 do 10711 j=1,ni 1030 if(ju(j).eq.0)goto 10711 1031 xm(j)=dot_product(w,x(:,j)) 1031 x(:,j)=v*(x(:,j)-xm(j)) 1032 xv(j)=dot_product(x(:,j),x(:,j)) 1032 if(isd.gt.0) xs(j)=sqrt(xv(j)) 1033 10711 continue 1034 10712 continue 1034 if(isd .ne. 0)goto 10731 1034 xs=1.0 1034 goto 10741 1035 10731 continue 1035 10750 do 10751 j=1,ni 1035 if(ju(j).eq.0)goto 10751 1035 x(:,j)=x(:,j)/xs(j) 1035 10751 continue 1036 10752 continue 1036 xv=1.0 1037 10741 continue 1038 10721 continue 1038 ym=dot_product(w,y) 1038 y=v*(y-ym) 1038 ys=sqrt(dot_product(y,y)) 1038 y=y/ys 1039 10700 continue 1039 deallocate(v) 1040 return 1041 end 1042 subroutine elnet2(beta,ni,ju,vp,cl,y,no,ne,nx,x,nlam,flmin,ulam,th 1044 *r,maxit,xv, lmu,ao,ia,kin,rsqo,almo,nlp,jerr) implicit double precision(a-h,o-z) 1045 double precision vp(ni),y(no),x(no,ni),ulam(nlam),ao(nx,nlam) 1046 double precision rsqo(nlam),almo(nlam),xv(ni) 1047 double precision cl(2,ni) 1048 integer ju(ni),ia(nx),kin(nlam) 1049 double precision, dimension (:), allocatable :: a,g integer, dimension (:), allocatable :: mm,ix call get_int_parms(sml,eps,big,mnlam,rsqmax,pmin,exmx) 1054 allocate(a(1:ni),stat=jerr) 1055 if(jerr.ne.0) return 1056 allocate(mm(1:ni),stat=jerr) 1057 if(jerr.ne.0) return 1058 allocate(g(1:ni),stat=jerr) 1059 if(jerr.ne.0) return 1060 allocate(ix(1:ni),stat=jerr) 1061 if(jerr.ne.0) return 1062 bta=beta 1062 omb=1.0-bta 1062 ix=0 1064 alf=1.0 1066 if(flmin .ge. 1.0)goto 10771 1066 eqs=max(eps,flmin) 1066 alf=eqs**(1.0/(nlam-1)) 1066 10771 continue 1067 rsq=0.0 1067 a=0.0 1067 mm=0 1067 nlp=0 1067 nin=nlp 1067 iz=0 1067 mnl=min(mnlam,nlam) 1067 alm=0.0 1068 10780 do 10781 j=1,ni 1068 if(ju(j).eq.0)goto 10781 1068 g(j)=abs(dot_product(y,x(:,j))) 1068 10781 continue 1069 10782 continue 1069 10790 do 10791 m=1,nlam 1069 alm0=alm 1070 if(flmin .lt. 1.0)goto 10811 1070 alm=ulam(m) 1070 goto 10801 1071 10811 if(m .le. 2)goto 10821 1071 alm=alm*alf 1071 goto 10801 1072 10821 if(m .ne. 1)goto 10831 1072 alm=big 1072 goto 10841 1073 10831 continue 1073 alm0=0.0 1074 10850 do 10851 j=1,ni 1074 if(ju(j).eq.0)goto 10851 1074 if(vp(j).gt.0.0) alm0=max(alm0,g(j)/vp(j)) 1074 10851 continue 1075 10852 continue 1075 alm0=alm0/max(bta,1.0d-3) 1075 alm=alf*alm0 1076 10841 continue 1077 10801 continue 1077 dem=alm*omb 1077 ab=alm*bta 1077 rsq0=rsq 1077 jz=1 1078 tlam=bta*(2.0*alm-alm0) 1079 10860 do 10861 k=1,ni 1079 if(ix(k).eq.1)goto 10861 1079 if(ju(k).eq.0)goto 10861 1080 if(g(k).gt.tlam*vp(k)) ix(k)=1 1081 10861 continue 1082 10862 continue 1082 10870 continue 1082 10871 continue 1082 if(iz*jz.ne.0) go to 10360 1083 10880 continue 1083 nlp=nlp+1 1083 dlx=0.0 1084 10890 do 10891 k=1,ni 1084 if(ix(k).eq.0)goto 10891 1084 gk=dot_product(y,x(:,k)) 1085 ak=a(k) 1085 u=gk+ak*xv(k) 1085 v=abs(u)-vp(k)*ab 1085 a(k)=0.0 1087 if(v.gt.0.0) a(k)=max(cl(1,k),min(cl(2,k),sign(v,u)/(xv(k)+vp(k)*d 1088 *em))) if(a(k).eq.ak)goto 10891 1089 if(mm(k) .ne. 0)goto 10911 1089 nin=nin+1 1089 if(nin.gt.nx)goto 10892 1090 mm(k)=nin 1090 ia(nin)=k 1091 10911 continue 1092 del=a(k)-ak 1092 rsq=rsq+del*(2.0*gk-del*xv(k)) 1093 y=y-del*x(:,k) 1093 dlx=max(xv(k)*del**2,dlx) 1094 10891 continue 1095 10892 continue 1095 if(nin.gt.nx)goto 10872 1096 if(dlx .ge. thr)goto 10931 1096 ixx=0 1097 10940 do 10941 k=1,ni 1097 if(ix(k).eq.1)goto 10941 1097 if(ju(k).eq.0)goto 10941 1098 g(k)=abs(dot_product(y,x(:,k))) 1099 if(g(k) .le. ab*vp(k))goto 10961 1099 ix(k)=1 1099 ixx=1 1099 10961 continue 1100 10941 continue 1101 10942 continue 1101 if(ixx.eq.1) go to 10880 1102 goto 10872 1103 10931 continue 1104 if(nlp .le. maxit)goto 10981 1104 jerr=-m 1104 return 1104 10981 continue 1105 10360 continue 1105 iz=1 1106 10990 continue 1106 10991 continue 1106 nlp=nlp+1 1106 dlx=0.0 1107 11000 do 11001 l=1,nin 1107 k=ia(l) 1107 gk=dot_product(y,x(:,k)) 1108 ak=a(k) 1108 u=gk+ak*xv(k) 1108 v=abs(u)-vp(k)*ab 1108 a(k)=0.0 1110 if(v.gt.0.0) a(k)=max(cl(1,k),min(cl(2,k),sign(v,u)/(xv(k)+vp(k)*d 1111 *em))) if(a(k).eq.ak)goto 11001 1112 del=a(k)-ak 1112 rsq=rsq+del*(2.0*gk-del*xv(k)) 1113 y=y-del*x(:,k) 1113 dlx=max(xv(k)*del**2,dlx) 1114 11001 continue 1115 11002 continue 1115 if(dlx.lt.thr)goto 10992 1115 if(nlp .le. maxit)goto 11021 1115 jerr=-m 1115 return 1115 11021 continue 1116 goto 10991 1117 10992 continue 1117 jz=0 1118 goto 10871 1119 10872 continue 1119 if(nin .le. nx)goto 11041 1119 jerr=-10000-m 1119 goto 10792 1119 11041 continue 1120 if(nin.gt.0) ao(1:nin,m)=a(ia(1:nin)) 1120 kin(m)=nin 1121 rsqo(m)=rsq 1121 almo(m)=alm 1121 lmu=m 1122 if(m.lt.mnl)goto 10791 1122 if(flmin.ge.1.0)goto 10791 1123 me=0 1123 11050 do 11051 j=1,nin 1123 if(ao(j,m).ne.0.0) me=me+1 1123 11051 continue 1123 11052 continue 1123 if(me.gt.ne)goto 10792 1124 if(rsq-rsq0.lt.sml*rsq)goto 10792 1124 if(rsq.gt.rsqmax)goto 10792 1125 10791 continue 1126 10792 continue 1126 deallocate(a,mm,g,ix) 1127 return 1128 end 1129 subroutine chkvars(no,ni,x,ju) 1130 implicit double precision(a-h,o-z) 1131 double precision x(no,ni) 1131 integer ju(ni) 1132 11060 do 11061 j=1,ni 1132 ju(j)=0 1132 t=x(1,j) 1133 11070 do 11071 i=2,no 1133 if(x(i,j).eq.t)goto 11071 1133 ju(j)=1 1133 goto 11072 1133 11071 continue 1134 11072 continue 1134 11061 continue 1135 11062 continue 1135 return 1136 end 1137 subroutine uncomp(ni,ca,ia,nin,a) 1138 implicit double precision(a-h,o-z) 1139 double precision ca(*),a(ni) 1139 integer ia(*) 1140 a=0.0 1140 if(nin.gt.0) a(ia(1:nin))=ca(1:nin) 1141 return 1142 end 1143 subroutine modval(a0,ca,ia,nin,n,x,f) 1144 implicit double precision(a-h,o-z) 1145 double precision ca(nin),x(n,*),f(n) 1145 integer ia(nin) 1146 f=a0 1146 if(nin.le.0) return 1147 11080 do 11081 i=1,n 1147 f(i)=f(i)+dot_product(ca(1:nin),x(i,ia(1:nin))) 1147 11081 continue 1148 11082 continue 1148 return 1149 end 1150 subroutine spelnet (ka,parm,no,ni,x,ix,jx,y,w,jd,vp,cl,ne,nx,nlam 1153 *,flmin,ulam,thr,isd,intr, maxit,lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr *) implicit double precision(a-h,o-z) 1154 double precision x(*),y(no),w(no),vp(ni),ulam(nlam),cl(2,ni) 1155 double precision ca(nx,nlam),a0(nlam),rsq(nlam),alm(nlam) 1156 integer ix(*),jx(*),jd(*),ia(nx),nin(nlam) 1157 double precision, dimension (:), allocatable :: vq; if(maxval(vp) .gt. 0.0)goto 11101 1160 jerr=10000 1160 return 1160 11101 continue 1161 allocate(vq(1:ni),stat=jerr) 1161 if(jerr.ne.0) return 1162 vq=max(0d0,vp) 1162 vq=vq*ni/sum(vq) 1163 if(ka .ne. 1)goto 11121 1164 call spelnetu (parm,no,ni,x,ix,jx,y,w,jd,vq,cl,ne,nx,nlam,flmin,u 1167 *lam,thr,isd, intr,maxit,lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr) goto 11131 1168 11121 continue 1169 call spelnetn (parm,no,ni,x,ix,jx,y,w,jd,vq,cl,ne,nx,nlam,flmin,ul 1172 *am,thr,isd,intr, maxit,lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr) 11131 continue 1173 11111 continue 1173 deallocate(vq) 1174 return 1175 end 1176 subroutine spelnetu (parm,no,ni,x,ix,jx,y,w,jd,vp,cl,ne,nx,nlam,f 1179 *lmin,ulam,thr,isd,intr, maxit,lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr) implicit double precision(a-h,o-z) 1180 double precision x(*),y(no),w(no),vp(ni),ulam(nlam),cl(2,ni) 1181 double precision ca(nx,nlam),a0(nlam),rsq(nlam),alm(nlam) 1182 integer ix(*),jx(*),jd(*),ia(nx),nin(nlam) 1183 double precision, dimension (:), allocatable :: xm,xs,g,xv,vlam integer, dimension (:), allocatable :: ju allocate(g(1:ni),stat=jerr) 1188 if(jerr.ne.0) return 1189 allocate(xm(1:ni),stat=jerr) 1190 if(jerr.ne.0) return 1191 allocate(xs(1:ni),stat=jerr) 1192 if(jerr.ne.0) return 1193 allocate(ju(1:ni),stat=jerr) 1194 if(jerr.ne.0) return 1195 allocate(xv(1:ni),stat=jerr) 1196 if(jerr.ne.0) return 1197 allocate(vlam(1:nlam),stat=jerr) 1198 if(jerr.ne.0) return 1199 call spchkvars(no,ni,x,ix,ju) 1200 if(jd(1).gt.0) ju(jd(2:(jd(1)+1)))=0 1201 if(maxval(ju) .gt. 0)goto 11151 1201 jerr=7777 1201 return 1201 11151 continue 1202 call spstandard(no,ni,x,ix,jx,y,w,ju,isd,intr,g,xm,xs,ym,ys,xv,jer 1203 *r) if(jerr.ne.0) return 1204 cl=cl/ys 1204 if(isd .le. 0)goto 11171 1204 11180 do 11181 j=1,ni 1204 cl(:,j)=cl(:,j)*xs(j) 1204 11181 continue 1204 11182 continue 1204 11171 continue 1205 if(flmin.ge.1.0) vlam=ulam/ys 1206 call spelnet1(parm,ni,g,no,w,ne,nx,x,ix,jx,ju,vp,cl,nlam,flmin,vla 1208 *m,thr,maxit, xm,xs,xv,lmu,ca,ia,nin,rsq,alm,nlp,jerr) if(jerr.gt.0) return 1209 11190 do 11191 k=1,lmu 1209 alm(k)=ys*alm(k) 1209 nk=nin(k) 1210 11200 do 11201 l=1,nk 1210 ca(l,k)=ys*ca(l,k)/xs(ia(l)) 1210 11201 continue 1210 11202 continue 1210 a0(k)=0.0 1211 if(intr.ne.0) a0(k)=ym-dot_product(ca(1:nk,k),xm(ia(1:nk))) 1212 11191 continue 1213 11192 continue 1213 deallocate(xm,xs,g,ju,xv,vlam) 1214 return 1215 end 1216 subroutine spstandard (no,ni,x,ix,jx,y,w,ju,isd,intr,g,xm,xs,ym,ys 1217 *,xv,jerr) implicit double precision(a-h,o-z) 1218 double precision x(*),y(no),w(no),g(ni),xm(ni),xs(ni),xv(ni) 1219 integer ix(*),jx(*),ju(ni) 1220 w=w/sum(w) 1221 if(intr .ne. 0)goto 11221 1221 ym=0.0 1222 ys=sqrt(dot_product(w,y**2)-dot_product(w,y)**2) 1222 y=y/ys 1223 11230 do 11231 j=1,ni 1223 if(ju(j).eq.0)goto 11231 1223 xm(j)=0.0 1223 jb=ix(j) 1223 je=ix(j+1)-1 1224 xv(j)=dot_product(w(jx(jb:je)),x(jb:je)**2) 1225 if(isd .eq. 0)goto 11251 1225 xbq=dot_product(w(jx(jb:je)),x(jb:je))**2 1225 vc=xv(j)-xbq 1226 xs(j)=sqrt(vc) 1226 xv(j)=1.0+xbq/vc 1227 goto 11261 1228 11251 continue 1228 xs(j)=1.0 1228 11261 continue 1229 11241 continue 1229 11231 continue 1230 11232 continue 1230 goto 11271 1231 11221 continue 1232 11280 do 11281 j=1,ni 1232 if(ju(j).eq.0)goto 11281 1233 jb=ix(j) 1233 je=ix(j+1)-1 1233 xm(j)=dot_product(w(jx(jb:je)),x(jb:je)) 1234 xv(j)=dot_product(w(jx(jb:je)),x(jb:je)**2)-xm(j)**2 1235 if(isd.gt.0) xs(j)=sqrt(xv(j)) 1236 11281 continue 1237 11282 continue 1237 if(isd .ne. 0)goto 11301 1237 xs=1.0 1237 goto 11311 1237 11301 continue 1237 xv=1.0 1237 11311 continue 1238 11291 continue 1238 ym=dot_product(w,y) 1238 y=y-ym 1238 ys=sqrt(dot_product(w,y**2)) 1238 y=y/ys 1239 11271 continue 1240 11211 continue 1240 g=0.0 1241 11320 do 11321 j=1,ni 1241 if(ju(j).eq.0)goto 11321 1241 jb=ix(j) 1241 je=ix(j+1)-1 1242 g(j)=dot_product(w(jx(jb:je))*y(jx(jb:je)),x(jb:je))/xs(j) 1243 11321 continue 1244 11322 continue 1244 return 1245 end 1246 subroutine spelnet1(beta,ni,g,no,w,ne,nx,x,ix,jx,ju,vp,cl,nlam,flm 1248 *in,ulam, thr,maxit,xm,xs,xv,lmu,ao,ia,kin,rsqo,almo,nlp,jerr) implicit double precision(a-h,o-z) 1249 double precision g(ni),vp(ni),x(*),ulam(nlam),w(no) 1250 double precision ao(nx,nlam),rsqo(nlam),almo(nlam) 1251 double precision xm(ni),xs(ni),xv(ni),cl(2,ni) 1252 integer ix(*),jx(*),ju(ni),ia(nx),kin(nlam) 1253 double precision, dimension (:), allocatable :: a,da integer, dimension (:), allocatable :: mm double precision, dimension (:,:), allocatable :: c allocate(c(1:ni,1:nx),stat=jerr) if(jerr.ne.0) return; call get_int_parms(sml,eps,big,mnlam,rsqmax,pmin,exmx) 1261 allocate(a(1:ni),stat=jerr) 1262 if(jerr.ne.0) return 1263 allocate(mm(1:ni),stat=jerr) 1264 if(jerr.ne.0) return 1265 allocate(da(1:ni),stat=jerr) 1266 if(jerr.ne.0) return 1267 bta=beta 1267 omb=1.0-bta 1269 alm=0.0 1269 alf=1.0 1271 if(flmin .ge. 1.0)goto 11341 1271 eqs=max(eps,flmin) 1271 alf=eqs**(1.0/(nlam-1)) 1271 11341 continue 1272 rsq=0.0 1272 a=0.0 1272 mm=0 1272 nlp=0 1272 nin=nlp 1272 iz=0 1272 mnl=min(mnlam,nlam) 1273 11350 do 11351 m=1,nlam 1274 if(flmin .lt. 1.0)goto 11371 1274 alm=ulam(m) 1274 goto 11361 1275 11371 if(m .le. 2)goto 11381 1275 alm=alm*alf 1275 goto 11361 1276 11381 if(m .ne. 1)goto 11391 1276 alm=big 1276 goto 11401 1277 11391 continue 1277 alm=0.0 1278 11410 do 11411 j=1,ni 1278 if(ju(j).eq.0)goto 11411 1278 if(vp(j).le.0.0)goto 11411 1279 alm=max(alm,abs(g(j))/vp(j)) 1280 11411 continue 1281 11412 continue 1281 alm=alf*alm/max(bta,1.0d-3) 1282 11401 continue 1283 11361 continue 1283 dem=alm*omb 1283 ab=alm*bta 1283 rsq0=rsq 1283 jz=1 1284 11420 continue 1284 11421 continue 1284 if(iz*jz.ne.0) go to 10360 1284 nlp=nlp+1 1284 dlx=0.0 1285 11430 do 11431 k=1,ni 1285 if(ju(k).eq.0)goto 11431 1286 ak=a(k) 1286 u=g(k)+ak*xv(k) 1286 v=abs(u)-vp(k)*ab 1286 a(k)=0.0 1288 if(v.gt.0.0) a(k)=max(cl(1,k),min(cl(2,k),sign(v,u)/(xv(k)+vp(k)*d 1289 *em))) if(a(k).eq.ak)goto 11431 1290 if(mm(k) .ne. 0)goto 11451 1290 nin=nin+1 1290 if(nin.gt.nx)goto 11432 1291 11460 do 11461 j=1,ni 1291 if(ju(j).eq.0)goto 11461 1292 if(mm(j) .eq. 0)goto 11481 1292 c(j,nin)=c(k,mm(j)) 1292 goto 11461 1292 11481 continue 1293 if(j .ne. k)goto 11501 1293 c(j,nin)=xv(j) 1293 goto 11461 1293 11501 continue 1294 c(j,nin)= (row_prod(j,k,ix,jx,x,w)-xm(j)*xm(k))/(xs(j)*xs(k)) 1296 11461 continue 1297 11462 continue 1297 mm(k)=nin 1297 ia(nin)=k 1298 11451 continue 1299 del=a(k)-ak 1299 rsq=rsq+del*(2.0*g(k)-del*xv(k)) 1300 dlx=max(xv(k)*del**2,dlx) 1301 11510 do 11511 j=1,ni 1301 if(ju(j).ne.0) g(j)=g(j)-c(j,mm(k))*del 1301 11511 continue 1302 11512 continue 1302 11431 continue 1303 11432 continue 1303 if(dlx.lt.thr)goto 11422 1303 if(nin.gt.nx)goto 11422 1304 if(nlp .le. maxit)goto 11531 1304 jerr=-m 1304 return 1304 11531 continue 1305 10360 continue 1305 iz=1 1305 da(1:nin)=a(ia(1:nin)) 1306 11540 continue 1306 11541 continue 1306 nlp=nlp+1 1306 dlx=0.0 1307 11550 do 11551 l=1,nin 1307 k=ia(l) 1308 ak=a(k) 1308 u=g(k)+ak*xv(k) 1308 v=abs(u)-vp(k)*ab 1308 a(k)=0.0 1310 if(v.gt.0.0) a(k)=max(cl(1,k),min(cl(2,k),sign(v,u)/(xv(k)+vp(k)*d 1311 *em))) if(a(k).eq.ak)goto 11551 1312 del=a(k)-ak 1312 rsq=rsq+del*(2.0*g(k)-del*xv(k)) 1313 dlx=max(xv(k)*del**2,dlx) 1314 11560 do 11561 j=1,nin 1314 g(ia(j))=g(ia(j))-c(ia(j),mm(k))*del 1314 11561 continue 1315 11562 continue 1315 11551 continue 1316 11552 continue 1316 if(dlx.lt.thr)goto 11542 1316 if(nlp .le. maxit)goto 11581 1316 jerr=-m 1316 return 1316 11581 continue 1317 goto 11541 1318 11542 continue 1318 da(1:nin)=a(ia(1:nin))-da(1:nin) 1319 11590 do 11591 j=1,ni 1319 if(mm(j).ne.0)goto 11591 1320 if(ju(j).ne.0) g(j)=g(j)-dot_product(da(1:nin),c(j,1:nin)) 1321 11591 continue 1322 11592 continue 1322 jz=0 1323 goto 11421 1324 11422 continue 1324 if(nin .le. nx)goto 11611 1324 jerr=-10000-m 1324 goto 11352 1324 11611 continue 1325 if(nin.gt.0) ao(1:nin,m)=a(ia(1:nin)) 1325 kin(m)=nin 1326 rsqo(m)=rsq 1326 almo(m)=alm 1326 lmu=m 1327 if(m.lt.mnl)goto 11351 1327 if(flmin.ge.1.0)goto 11351 1328 me=0 1328 11620 do 11621 j=1,nin 1328 if(ao(j,m).ne.0.0) me=me+1 1328 11621 continue 1328 11622 continue 1328 if(me.gt.ne)goto 11352 1329 if(rsq-rsq0.lt.sml*rsq)goto 11352 1329 if(rsq.gt.rsqmax)goto 11352 1330 11351 continue 1331 11352 continue 1331 deallocate(a,mm,c,da) 1332 return 1333 end 1334 subroutine spelnetn(parm,no,ni,x,ix,jx,y,w,jd,vp,cl,ne,nx,nlam,flm 1336 *in,ulam, thr,isd,intr,maxit,lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr) implicit double precision(a-h,o-z) 1337 double precision x(*),vp(ni),y(no),w(no),ulam(nlam),cl(2,ni) 1338 double precision ca(nx,nlam),a0(nlam),rsq(nlam),alm(nlam) 1339 integer ix(*),jx(*),jd(*),ia(nx),nin(nlam) 1340 double precision, dimension (:), allocatable :: xm,xs,xv,vlam integer, dimension (:), allocatable :: ju allocate(xm(1:ni),stat=jerr) 1345 if(jerr.ne.0) return 1346 allocate(xs(1:ni),stat=jerr) 1347 if(jerr.ne.0) return 1348 allocate(ju(1:ni),stat=jerr) 1349 if(jerr.ne.0) return 1350 allocate(xv(1:ni),stat=jerr) 1351 if(jerr.ne.0) return 1352 allocate(vlam(1:nlam),stat=jerr) 1353 if(jerr.ne.0) return 1354 call spchkvars(no,ni,x,ix,ju) 1355 if(jd(1).gt.0) ju(jd(2:(jd(1)+1)))=0 1356 if(maxval(ju) .gt. 0)goto 11641 1356 jerr=7777 1356 return 1356 11641 continue 1357 call spstandard1(no,ni,x,ix,jx,y,w,ju,isd,intr,xm,xs,ym,ys,xv,jerr 1358 *) if(jerr.ne.0) return 1359 cl=cl/ys 1359 if(isd .le. 0)goto 11661 1359 11670 do 11671 j=1,ni 1359 cl(:,j)=cl(:,j)*xs(j) 1359 11671 continue 1359 11672 continue 1359 11661 continue 1360 if(flmin.ge.1.0) vlam=ulam/ys 1361 call spelnet2(parm,ni,y,w,no,ne,nx,x,ix,jx,ju,vp,cl,nlam,flmin,vla 1363 *m,thr,maxit, xm,xs,xv,lmu,ca,ia,nin,rsq,alm,nlp,jerr) if(jerr.gt.0) return 1364 11680 do 11681 k=1,lmu 1364 alm(k)=ys*alm(k) 1364 nk=nin(k) 1365 11690 do 11691 l=1,nk 1365 ca(l,k)=ys*ca(l,k)/xs(ia(l)) 1365 11691 continue 1365 11692 continue 1365 a0(k)=0.0 1366 if(intr.ne.0) a0(k)=ym-dot_product(ca(1:nk,k),xm(ia(1:nk))) 1367 11681 continue 1368 11682 continue 1368 deallocate(xm,xs,ju,xv,vlam) 1369 return 1370 end 1371 subroutine spstandard1 (no,ni,x,ix,jx,y,w,ju,isd,intr,xm,xs,ym,ys, 1372 *xv,jerr) implicit double precision(a-h,o-z) 1373 double precision x(*),y(no),w(no),xm(ni),xs(ni),xv(ni) 1374 integer ix(*),jx(*),ju(ni) 1375 w=w/sum(w) 1376 if(intr .ne. 0)goto 11711 1376 ym=0.0 1377 ys=sqrt(dot_product(w,y**2)-dot_product(w,y)**2) 1377 y=y/ys 1378 11720 do 11721 j=1,ni 1378 if(ju(j).eq.0)goto 11721 1378 xm(j)=0.0 1378 jb=ix(j) 1378 je=ix(j+1)-1 1379 xv(j)=dot_product(w(jx(jb:je)),x(jb:je)**2) 1380 if(isd .eq. 0)goto 11741 1380 xbq=dot_product(w(jx(jb:je)),x(jb:je))**2 1380 vc=xv(j)-xbq 1381 xs(j)=sqrt(vc) 1381 xv(j)=1.0+xbq/vc 1382 goto 11751 1383 11741 continue 1383 xs(j)=1.0 1383 11751 continue 1384 11731 continue 1384 11721 continue 1385 11722 continue 1385 return 1386 11711 continue 1387 11760 do 11761 j=1,ni 1387 if(ju(j).eq.0)goto 11761 1388 jb=ix(j) 1388 je=ix(j+1)-1 1388 xm(j)=dot_product(w(jx(jb:je)),x(jb:je)) 1389 xv(j)=dot_product(w(jx(jb:je)),x(jb:je)**2)-xm(j)**2 1390 if(isd.gt.0) xs(j)=sqrt(xv(j)) 1391 11761 continue 1392 11762 continue 1392 if(isd .ne. 0)goto 11781 1392 xs=1.0 1392 goto 11791 1392 11781 continue 1392 xv=1.0 1392 11791 continue 1393 11771 continue 1393 ym=dot_product(w,y) 1393 y=y-ym 1393 ys=sqrt(dot_product(w,y**2)) 1393 y=y/ys 1394 return 1395 end 1396 subroutine spelnet2(beta,ni,y,w,no,ne,nx,x,ix,jx,ju,vp,cl,nlam,flm 1398 *in,ulam, thr,maxit,xm,xs,xv,lmu,ao,ia,kin,rsqo,almo,nlp,jerr) implicit double precision(a-h,o-z) 1399 double precision y(no),w(no),x(*),vp(ni),ulam(nlam),cl(2,ni) 1400 double precision ao(nx,nlam),rsqo(nlam),almo(nlam),xm(ni),xs(ni),x 1401 *v(ni) integer ix(*),jx(*),ju(ni),ia(nx),kin(nlam) 1402 double precision, dimension (:), allocatable :: a,g integer, dimension (:), allocatable :: mm,iy call get_int_parms(sml,eps,big,mnlam,rsqmax,pmin,exmx) 1407 allocate(a(1:ni),stat=jerr) 1408 if(jerr.ne.0) return 1409 allocate(mm(1:ni),stat=jerr) 1410 if(jerr.ne.0) return 1411 allocate(g(1:ni),stat=jerr) 1412 if(jerr.ne.0) return 1413 allocate(iy(1:ni),stat=jerr) 1414 if(jerr.ne.0) return 1415 bta=beta 1415 omb=1.0-bta 1415 alm=0.0 1415 iy=0 1417 alf=1.0 1419 if(flmin .ge. 1.0)goto 11811 1419 eqs=max(eps,flmin) 1419 alf=eqs**(1.0/(nlam-1)) 1419 11811 continue 1420 rsq=0.0 1420 a=0.0 1420 mm=0 1420 o=0.0 1420 nlp=0 1420 nin=nlp 1420 iz=0 1420 mnl=min(mnlam,nlam) 1421 11820 do 11821 j=1,ni 1421 if(ju(j).eq.0)goto 11821 1422 jb=ix(j) 1422 je=ix(j+1)-1 1423 g(j)=abs(dot_product(y(jx(jb:je))+o,w(jx(jb:je))*x(jb:je))/xs(j)) 1424 11821 continue 1425 11822 continue 1425 11830 do 11831 m=1,nlam 1425 alm0=alm 1426 if(flmin .lt. 1.0)goto 11851 1426 alm=ulam(m) 1426 goto 11841 1427 11851 if(m .le. 2)goto 11861 1427 alm=alm*alf 1427 goto 11841 1428 11861 if(m .ne. 1)goto 11871 1428 alm=big 1428 goto 11881 1429 11871 continue 1429 alm0=0.0 1430 11890 do 11891 j=1,ni 1430 if(ju(j).eq.0)goto 11891 1430 if(vp(j).gt.0.0) alm0=max(alm0,g(j)/vp(j)) 1430 11891 continue 1431 11892 continue 1431 alm0=alm0/max(bta,1.0d-3) 1431 alm=alf*alm0 1432 11881 continue 1433 11841 continue 1433 dem=alm*omb 1433 ab=alm*bta 1433 rsq0=rsq 1433 jz=1 1434 tlam=bta*(2.0*alm-alm0) 1435 11900 do 11901 k=1,ni 1435 if(iy(k).eq.1)goto 11901 1435 if(ju(k).eq.0)goto 11901 1436 if(g(k).gt.tlam*vp(k)) iy(k)=1 1437 11901 continue 1438 11902 continue 1438 11910 continue 1438 11911 continue 1438 if(iz*jz.ne.0) go to 10360 1439 10880 continue 1439 nlp=nlp+1 1439 dlx=0.0 1440 11920 do 11921 k=1,ni 1440 if(iy(k).eq.0)goto 11921 1440 jb=ix(k) 1440 je=ix(k+1)-1 1441 gk=dot_product(y(jx(jb:je))+o,w(jx(jb:je))*x(jb:je))/xs(k) 1442 ak=a(k) 1442 u=gk+ak*xv(k) 1442 v=abs(u)-vp(k)*ab 1442 a(k)=0.0 1444 if(v.gt.0.0) a(k)=max(cl(1,k),min(cl(2,k),sign(v,u)/(xv(k)+vp(k)*d 1445 *em))) if(a(k).eq.ak)goto 11921 1446 if(mm(k) .ne. 0)goto 11941 1446 nin=nin+1 1446 if(nin.gt.nx)goto 11922 1447 mm(k)=nin 1447 ia(nin)=k 1448 11941 continue 1449 del=a(k)-ak 1449 rsq=rsq+del*(2.0*gk-del*xv(k)) 1450 y(jx(jb:je))=y(jx(jb:je))-del*x(jb:je)/xs(k) 1451 o=o+del*xm(k)/xs(k) 1451 dlx=max(xv(k)*del**2,dlx) 1452 11921 continue 1453 11922 continue 1453 if(nin.gt.nx)goto 11912 1454 if(dlx .ge. thr)goto 11961 1454 ixx=0 1455 11970 do 11971 j=1,ni 1455 if(iy(j).eq.1)goto 11971 1455 if(ju(j).eq.0)goto 11971 1456 jb=ix(j) 1456 je=ix(j+1)-1 1457 g(j)=abs(dot_product(y(jx(jb:je))+o,w(jx(jb:je))*x(jb:je))/xs(j)) 1458 if(g(j) .le. ab*vp(j))goto 11991 1458 iy(j)=1 1458 ixx=1 1458 11991 continue 1459 11971 continue 1460 11972 continue 1460 if(ixx.eq.1) go to 10880 1461 goto 11912 1462 11961 continue 1463 if(nlp .le. maxit)goto 12011 1463 jerr=-m 1463 return 1463 12011 continue 1464 10360 continue 1464 iz=1 1465 12020 continue 1465 12021 continue 1465 nlp=nlp+1 1465 dlx=0.0 1466 12030 do 12031 l=1,nin 1466 k=ia(l) 1466 jb=ix(k) 1466 je=ix(k+1)-1 1467 gk=dot_product(y(jx(jb:je))+o,w(jx(jb:je))*x(jb:je))/xs(k) 1468 ak=a(k) 1468 u=gk+ak*xv(k) 1468 v=abs(u)-vp(k)*ab 1468 a(k)=0.0 1470 if(v.gt.0.0) a(k)=max(cl(1,k),min(cl(2,k),sign(v,u)/(xv(k)+vp(k)*d 1471 *em))) if(a(k).eq.ak)goto 12031 1472 del=a(k)-ak 1472 rsq=rsq+del*(2.0*gk-del*xv(k)) 1473 y(jx(jb:je))=y(jx(jb:je))-del*x(jb:je)/xs(k) 1474 o=o+del*xm(k)/xs(k) 1474 dlx=max(xv(k)*del**2,dlx) 1475 12031 continue 1476 12032 continue 1476 if(dlx.lt.thr)goto 12022 1476 if(nlp .le. maxit)goto 12051 1476 jerr=-m 1476 return 1476 12051 continue 1477 goto 12021 1478 12022 continue 1478 jz=0 1479 goto 11911 1480 11912 continue 1480 if(nin .le. nx)goto 12071 1480 jerr=-10000-m 1480 goto 11832 1480 12071 continue 1481 if(nin.gt.0) ao(1:nin,m)=a(ia(1:nin)) 1481 kin(m)=nin 1482 rsqo(m)=rsq 1482 almo(m)=alm 1482 lmu=m 1483 if(m.lt.mnl)goto 11831 1483 if(flmin.ge.1.0)goto 11831 1484 me=0 1484 12080 do 12081 j=1,nin 1484 if(ao(j,m).ne.0.0) me=me+1 1484 12081 continue 1484 12082 continue 1484 if(me.gt.ne)goto 11832 1485 if(rsq-rsq0.lt.sml*rsq)goto 11832 1485 if(rsq.gt.rsqmax)goto 11832 1486 11831 continue 1487 11832 continue 1487 deallocate(a,mm,g,iy) 1488 return 1489 end 1490 subroutine spchkvars(no,ni,x,ix,ju) 1491 implicit double precision(a-h,o-z) 1492 double precision x(*) 1492 integer ix(*),ju(ni) 1493 12090 do 12091 j=1,ni 1493 ju(j)=0 1493 jb=ix(j) 1493 nj=ix(j+1)-jb 1493 if(nj.eq.0)goto 12091 1494 je=ix(j+1)-1 1495 if(nj .ge. no)goto 12111 1495 12120 do 12121 i=jb,je 1495 if(x(i).eq.0.0)goto 12121 1495 ju(j)=1 1495 goto 12122 1495 12121 continue 1495 12122 continue 1495 goto 12131 1496 12111 continue 1496 t=x(jb) 1496 12140 do 12141 i=jb+1,je 1496 if(x(i).eq.t)goto 12141 1496 ju(j)=1 1496 goto 12142 1496 12141 continue 1496 12142 continue 1496 12131 continue 1497 12101 continue 1497 12091 continue 1498 12092 continue 1498 return 1499 end 1500 subroutine cmodval(a0,ca,ia,nin,x,ix,jx,n,f) 1501 implicit double precision(a-h,o-z) 1502 double precision ca(*),x(*),f(n) 1502 integer ia(*),ix(*),jx(*) 1503 f=a0 1504 12150 do 12151 j=1,nin 1504 k=ia(j) 1504 kb=ix(k) 1504 ke=ix(k+1)-1 1505 f(jx(kb:ke))=f(jx(kb:ke))+ca(j)*x(kb:ke) 1506 12151 continue 1507 12152 continue 1507 return 1508 end 1509 function row_prod(i,j,ia,ja,ra,w) 1510 implicit double precision(a-h,o-z) 1511 integer ia(*),ja(*) 1511 double precision ra(*),w(*) 1512 row_prod=dot(ra(ia(i)),ra(ia(j)),ja(ia(i)),ja(ia(j)), ia(i+1)-ia( 1514 *i),ia(j+1)-ia(j),w) return 1515 end 1516 function dot(x,y,mx,my,nx,ny,w) 1517 implicit double precision(a-h,o-z) 1518 double precision x(*),y(*),w(*) 1518 integer mx(*),my(*) 1519 i=1 1519 j=i 1519 s=0.0 1520 12160 continue 1520 12161 continue 1520 12170 continue 1521 12171 if(mx(i).ge.my(j))goto 12172 1521 i=i+1 1521 if(i.gt.nx) go to 12180 1521 goto 12171 1522 12172 continue 1522 if(mx(i).eq.my(j)) go to 12190 1523 12200 continue 1523 12201 if(my(j).ge.mx(i))goto 12202 1523 j=j+1 1523 if(j.gt.ny) go to 12180 1523 goto 12201 1524 12202 continue 1524 if(mx(i).eq.my(j)) go to 12190 1524 goto 12161 1525 12190 continue 1525 s=s+w(mx(i))*x(i)*y(j) 1526 i=i+1 1526 if(i.gt.nx)goto 12162 1526 j=j+1 1526 if(j.gt.ny)goto 12162 1527 goto 12161 1528 12162 continue 1528 12180 continue 1528 dot=s 1529 return 1530 end 1531 subroutine lognet (parm,no,ni,nc,x,y,g,jd,vp,cl,ne,nx,nlam,flmin,u 1533 *lam,thr, isd,intr,maxit,kopt,lmu,a0,ca,ia,nin,dev0,dev,alm,nlp,je *rr) implicit double precision(a-h,o-z) 1534 double precision x(no,ni),y(no,max(2,nc)),g(no,nc),vp(ni),ulam(nla 1535 *m) double precision ca(nx,nc,nlam),a0(nc,nlam),dev(nlam),alm(nlam),cl 1536 *(2,ni) integer jd(*),ia(nx),nin(nlam) 1537 double precision, dimension (:), allocatable :: xm,xs,ww,vq,xv integer, dimension (:), allocatable :: ju if(maxval(vp) .gt. 0.0)goto 12221 1541 jerr=10000 1541 return 1541 12221 continue 1542 allocate(ww(1:no),stat=jerr) 1543 if(jerr.ne.0) return 1544 allocate(ju(1:ni),stat=jerr) 1545 if(jerr.ne.0) return 1546 allocate(vq(1:ni),stat=jerr) 1547 if(jerr.ne.0) return 1548 allocate(xm(1:ni),stat=jerr) 1549 if(jerr.ne.0) return 1550 if(kopt .ne. 2)goto 12241 1550 allocate(xv(1:ni),stat=jerr) 1550 if(jerr.ne.0) return 1550 12241 continue 1551 if(isd .le. 0)goto 12261 1551 allocate(xs(1:ni),stat=jerr) 1551 if(jerr.ne.0) return 1551 12261 continue 1553 call chkvars(no,ni,x,ju) 1554 if(jd(1).gt.0) ju(jd(2:(jd(1)+1)))=0 1555 if(maxval(ju) .gt. 0)goto 12281 1555 jerr=7777 1555 return 1555 12281 continue 1556 vq=max(0d0,vp) 1556 vq=vq*ni/sum(vq) 1557 12290 do 12291 i=1,no 1557 ww(i)=sum(y(i,:)) 1557 if(ww(i).gt.0.0) y(i,:)=y(i,:)/ww(i) 1557 12291 continue 1558 12292 continue 1558 sw=sum(ww) 1558 ww=ww/sw 1559 if(nc .ne. 1)goto 12311 1559 call lstandard1(no,ni,x,ww,ju,isd,intr,xm,xs) 1560 if(isd .le. 0)goto 12331 1560 12340 do 12341 j=1,ni 1560 cl(:,j)=cl(:,j)*xs(j) 1560 12341 continue 1560 12342 continue 1560 12331 continue 1561 call lognet2n(parm,no,ni,x,y(:,1),g(:,1),ww,ju,vq,cl,ne,nx,nlam,fl 1563 *min,ulam, thr,isd,intr,maxit,kopt,lmu,a0,ca,ia,nin,dev0,dev,alm,n *lp,jerr) goto 12301 1564 12311 if(kopt .ne. 2)goto 12351 1564 call multlstandard1(no,ni,x,ww,ju,isd,intr,xm,xs,xv) 1565 if(isd .le. 0)goto 12371 1565 12380 do 12381 j=1,ni 1565 cl(:,j)=cl(:,j)*xs(j) 1565 12381 continue 1565 12382 continue 1565 12371 continue 1566 call multlognetn(parm,no,ni,nc,x,y,g,ww,ju,vq,cl,ne,nx,nlam,flmin, 1568 *ulam,thr, intr,maxit,xv,lmu,a0,ca,ia,nin,dev0,dev,alm,nlp,jerr) goto 12391 1569 12351 continue 1569 call lstandard1(no,ni,x,ww,ju,isd,intr,xm,xs) 1570 if(isd .le. 0)goto 12411 1570 12420 do 12421 j=1,ni 1570 cl(:,j)=cl(:,j)*xs(j) 1570 12421 continue 1570 12422 continue 1570 12411 continue 1571 call lognetn(parm,no,ni,nc,x,y,g,ww,ju,vq,cl,ne,nx,nlam,flmin,ulam 1573 *,thr, isd,intr,maxit,kopt,lmu,a0,ca,ia,nin,dev0,dev,alm,nlp,jerr) 12391 continue 1574 12301 continue 1574 if(jerr.gt.0) return 1574 dev0=2.0*sw*dev0 1575 12430 do 12431 k=1,lmu 1575 nk=nin(k) 1576 12440 do 12441 ic=1,nc 1576 if(isd .le. 0)goto 12461 1576 12470 do 12471 l=1,nk 1576 ca(l,ic,k)=ca(l,ic,k)/xs(ia(l)) 1576 12471 continue 1576 12472 continue 1576 12461 continue 1577 if(intr .ne. 0)goto 12491 1577 a0(ic,k)=0.0 1577 goto 12501 1578 12491 continue 1578 a0(ic,k)=a0(ic,k)-dot_product(ca(1:nk,ic,k),xm(ia(1:nk))) 1578 12501 continue 1579 12481 continue 1579 12441 continue 1580 12442 continue 1580 12431 continue 1581 12432 continue 1581 deallocate(ww,ju,vq,xm) 1581 if(isd.gt.0) deallocate(xs) 1582 if(kopt.eq.2) deallocate(xv) 1583 return 1584 end 1585 subroutine lstandard1 (no,ni,x,w,ju,isd,intr,xm,xs) 1586 implicit double precision(a-h,o-z) 1587 double precision x(no,ni),w(no),xm(ni),xs(ni) 1587 integer ju(ni) 1588 if(intr .ne. 0)goto 12521 1589 12530 do 12531 j=1,ni 1589 if(ju(j).eq.0)goto 12531 1589 xm(j)=0.0 1590 if(isd .eq. 0)goto 12551 1590 vc=dot_product(w,x(:,j)**2)-dot_product(w,x(:,j))**2 1591 xs(j)=sqrt(vc) 1591 x(:,j)=x(:,j)/xs(j) 1592 12551 continue 1593 12531 continue 1594 12532 continue 1594 return 1595 12521 continue 1596 12560 do 12561 j=1,ni 1596 if(ju(j).eq.0)goto 12561 1597 xm(j)=dot_product(w,x(:,j)) 1597 x(:,j)=x(:,j)-xm(j) 1598 if(isd .le. 0)goto 12581 1598 xs(j)=sqrt(dot_product(w,x(:,j)**2)) 1598 x(:,j)=x(:,j)/xs(j) 1598 12581 continue 1599 12561 continue 1600 12562 continue 1600 return 1601 end 1602 subroutine multlstandard1 (no,ni,x,w,ju,isd,intr,xm,xs,xv) 1603 implicit double precision(a-h,o-z) 1604 double precision x(no,ni),w(no),xm(ni),xs(ni),xv(ni) 1604 integer ju(ni) 1605 if(intr .ne. 0)goto 12601 1606 12610 do 12611 j=1,ni 1606 if(ju(j).eq.0)goto 12611 1606 xm(j)=0.0 1607 xv(j)=dot_product(w,x(:,j)**2) 1608 if(isd .eq. 0)goto 12631 1608 xbq=dot_product(w,x(:,j))**2 1608 vc=xv(j)-xbq 1609 xs(j)=sqrt(vc) 1609 x(:,j)=x(:,j)/xs(j) 1609 xv(j)=1.0+xbq/vc 1610 12631 continue 1611 12611 continue 1612 12612 continue 1612 return 1613 12601 continue 1614 12640 do 12641 j=1,ni 1614 if(ju(j).eq.0)goto 12641 1615 xm(j)=dot_product(w,x(:,j)) 1615 x(:,j)=x(:,j)-xm(j) 1616 xv(j)=dot_product(w,x(:,j)**2) 1617 if(isd .le. 0)goto 12661 1617 xs(j)=sqrt(xv(j)) 1617 x(:,j)=x(:,j)/xs(j) 1617 xv(j)=1.0 1617 12661 continue 1618 12641 continue 1619 12642 continue 1619 return 1620 end 1621 subroutine lognet2n(parm,no,ni,x,y,g,w,ju,vp,cl,ne,nx,nlam,flmin,u 1623 *lam,shri, isd,intr,maxit,kopt,lmu,a0,a,m,kin,dev0,dev,alm,nlp,jer *r) implicit double precision(a-h,o-z) 1624 double precision x(no,ni),y(no),g(no),w(no),vp(ni),ulam(nlam),cl(2 1625 *,ni) double precision a(nx,nlam),a0(nlam),dev(nlam),alm(nlam) 1626 integer ju(ni),m(nx),kin(nlam) 1627 double precision, dimension (:), allocatable :: b,bs,v,r,xv,q,ga integer, dimension (:), allocatable :: mm,ixx call get_int_parms(sml,eps,big,mnlam,devmax,pmin,exmx) 1632 allocate(b(0:ni),stat=jerr) 1633 if(jerr.ne.0) return 1634 allocate(xv(1:ni),stat=jerr) 1635 if(jerr.ne.0) return 1636 allocate(ga(1:ni),stat=jerr) 1637 if(jerr.ne.0) return 1638 allocate(bs(0:ni),stat=jerr) 1639 if(jerr.ne.0) return 1640 allocate(mm(1:ni),stat=jerr) 1641 if(jerr.ne.0) return 1642 allocate(ixx(1:ni),stat=jerr) 1643 if(jerr.ne.0) return 1644 allocate(r(1:no),stat=jerr) 1645 if(jerr.ne.0) return 1646 allocate(v(1:no),stat=jerr) 1647 if(jerr.ne.0) return 1648 allocate(q(1:no),stat=jerr) 1649 if(jerr.ne.0) return 1650 fmax=log(1.0/pmin-1.0) 1650 fmin=-fmax 1650 vmin=(1.0+pmin)*pmin*(1.0-pmin) 1651 bta=parm 1651 omb=1.0-bta 1652 q0=dot_product(w,y) 1652 if(q0 .gt. pmin)goto 12681 1652 jerr=8001 1652 return 1652 12681 continue 1653 if(q0 .lt. 1.0-pmin)goto 12701 1653 jerr=9001 1653 return 1653 12701 continue 1654 if(intr.eq.0.0) q0=0.5 1655 ixx=0 1655 al=0.0 1655 bz=0.0 1655 if(intr.ne.0) bz=log(q0/(1.0-q0)) 1656 if(nonzero(no,g) .ne. 0)goto 12721 1656 vi=q0*(1.0-q0) 1656 b(0)=bz 1656 v=vi*w 1657 r=w*(y-q0) 1657 q=q0 1657 xmz=vi 1657 dev1=-(bz*q0+log(1.0-q0)) 1658 goto 12731 1659 12721 continue 1659 b(0)=0.0 1660 if(intr .eq. 0)goto 12751 1660 b(0)=azero(no,y,g,w,jerr) 1660 if(jerr.ne.0) return 1660 12751 continue 1661 q=1.0/(1.0+exp(-b(0)-g)) 1661 v=w*q*(1.0-q) 1661 r=w*(y-q) 1661 xmz=sum(v) 1662 dev1=-(b(0)*q0+dot_product(w,y*g+log(1.0-q))) 1663 12731 continue 1664 12711 continue 1664 if(kopt .le. 0)goto 12771 1665 if(isd .le. 0 .or. intr .eq. 0)goto 12791 1665 xv=0.25 1665 goto 12801 1666 12791 continue 1666 12810 do 12811 j=1,ni 1666 if(ju(j).ne.0) xv(j)=0.25*dot_product(w,x(:,j)**2) 1666 12811 continue 1666 12812 continue 1666 12801 continue 1667 12781 continue 1667 12771 continue 1668 dev0=dev1 1669 12820 do 12821 i=1,no 1669 if(y(i).gt.0.0) dev0=dev0+w(i)*y(i)*log(y(i)) 1670 if(y(i).lt.1.0) dev0=dev0+w(i)*(1.0-y(i))*log(1.0-y(i)) 1671 12821 continue 1673 12822 continue 1673 alf=1.0 1675 if(flmin .ge. 1.0)goto 12841 1675 eqs=max(eps,flmin) 1675 alf=eqs**(1.0/(nlam-1)) 1675 12841 continue 1676 m=0 1676 mm=0 1676 nlp=0 1676 nin=nlp 1676 mnl=min(mnlam,nlam) 1676 bs=0.0 1676 b(1:ni)=0.0 1677 shr=shri*dev0 1678 12850 do 12851 j=1,ni 1678 if(ju(j).eq.0)goto 12851 1678 ga(j)=abs(dot_product(r,x(:,j))) 1678 12851 continue 1679 12852 continue 1679 12860 do 12861 ilm=1,nlam 1679 al0=al 1680 if(flmin .lt. 1.0)goto 12881 1680 al=ulam(ilm) 1680 goto 12871 1681 12881 if(ilm .le. 2)goto 12891 1681 al=al*alf 1681 goto 12871 1682 12891 if(ilm .ne. 1)goto 12901 1682 al=big 1682 goto 12911 1683 12901 continue 1683 al0=0.0 1684 12920 do 12921 j=1,ni 1684 if(ju(j).eq.0)goto 12921 1684 if(vp(j).gt.0.0) al0=max(al0,ga(j)/vp(j)) 1684 12921 continue 1685 12922 continue 1685 al0=al0/max(bta,1.0d-3) 1685 al=alf*al0 1686 12911 continue 1687 12871 continue 1687 al2=al*omb 1687 al1=al*bta 1687 tlam=bta*(2.0*al-al0) 1688 12930 do 12931 k=1,ni 1688 if(ixx(k).eq.1)goto 12931 1688 if(ju(k).eq.0)goto 12931 1689 if(ga(k).gt.tlam*vp(k)) ixx(k)=1 1690 12931 continue 1691 12932 continue 1691 10880 continue 1692 12940 continue 1692 12941 continue 1692 bs(0)=b(0) 1692 if(nin.gt.0) bs(m(1:nin))=b(m(1:nin)) 1693 if(kopt .ne. 0)goto 12961 1694 12970 do 12971 j=1,ni 1694 if(ixx(j).gt.0) xv(j)=dot_product(v,x(:,j)**2) 1694 12971 continue 1695 12972 continue 1695 12961 continue 1696 12980 continue 1696 12981 continue 1696 nlp=nlp+1 1696 dlx=0.0 1697 12990 do 12991 k=1,ni 1697 if(ixx(k).eq.0)goto 12991 1698 bk=b(k) 1698 gk=dot_product(r,x(:,k)) 1699 u=gk+xv(k)*b(k) 1699 au=abs(u)-vp(k)*al1 1700 if(au .gt. 0.0)goto 13011 1700 b(k)=0.0 1700 goto 13021 1701 13011 continue 1702 b(k)=max(cl(1,k),min(cl(2,k),sign(au,u)/(xv(k)+vp(k)*al2))) 1703 13021 continue 1704 13001 continue 1704 d=b(k)-bk 1704 if(abs(d).le.0.0)goto 12991 1704 dlx=max(dlx,xv(k)*d**2) 1705 r=r-d*v*x(:,k) 1706 if(mm(k) .ne. 0)goto 13041 1706 nin=nin+1 1706 if(nin.gt.nx)goto 12992 1707 mm(k)=nin 1707 m(nin)=k 1708 13041 continue 1709 12991 continue 1710 12992 continue 1710 if(nin.gt.nx)goto 12982 1711 d=0.0 1711 if(intr.ne.0) d=sum(r)/xmz 1712 if(d .eq. 0.0)goto 13061 1712 b(0)=b(0)+d 1712 dlx=max(dlx,xmz*d**2) 1712 r=r-d*v 1712 13061 continue 1713 if(dlx.lt.shr)goto 12982 1713 if(nlp .le. maxit)goto 13081 1713 jerr=-ilm 1713 return 1713 13081 continue 1714 13090 continue 1714 13091 continue 1714 nlp=nlp+1 1714 dlx=0.0 1715 13100 do 13101 l=1,nin 1715 k=m(l) 1715 bk=b(k) 1716 gk=dot_product(r,x(:,k)) 1717 u=gk+xv(k)*b(k) 1717 au=abs(u)-vp(k)*al1 1718 if(au .gt. 0.0)goto 13121 1718 b(k)=0.0 1718 goto 13131 1719 13121 continue 1720 b(k)=max(cl(1,k),min(cl(2,k),sign(au,u)/(xv(k)+vp(k)*al2))) 1721 13131 continue 1722 13111 continue 1722 d=b(k)-bk 1722 if(abs(d).le.0.0)goto 13101 1722 dlx=max(dlx,xv(k)*d**2) 1723 r=r-d*v*x(:,k) 1724 13101 continue 1725 13102 continue 1725 d=0.0 1725 if(intr.ne.0) d=sum(r)/xmz 1726 if(d .eq. 0.0)goto 13151 1726 b(0)=b(0)+d 1726 dlx=max(dlx,xmz*d**2) 1726 r=r-d*v 1726 13151 continue 1727 if(dlx.lt.shr)goto 13092 1727 if(nlp .le. maxit)goto 13171 1727 jerr=-ilm 1727 return 1727 13171 continue 1728 goto 13091 1729 13092 continue 1729 goto 12981 1730 12982 continue 1730 if(nin.gt.nx)goto 12942 1731 13180 do 13181 i=1,no 1731 fi=b(0)+g(i) 1732 if(nin.gt.0) fi=fi+dot_product(b(m(1:nin)),x(i,m(1:nin))) 1733 if(fi .ge. fmin)goto 13201 1733 q(i)=0.0 1733 goto 13191 1733 13201 if(fi .le. fmax)goto 13211 1733 q(i)=1.0 1733 goto 13221 1734 13211 continue 1734 q(i)=1.0/(1.0+exp(-fi)) 1734 13221 continue 1735 13191 continue 1735 13181 continue 1736 13182 continue 1736 v=w*q*(1.0-q) 1736 xmz=sum(v) 1736 if(xmz.le.vmin)goto 12942 1736 r=w*(y-q) 1737 if(xmz*(b(0)-bs(0))**2 .ge. shr)goto 13241 1737 ix=0 1738 13250 do 13251 j=1,nin 1738 k=m(j) 1739 if(xv(k)*(b(k)-bs(k))**2.lt.shr)goto 13251 1739 ix=1 1739 goto 13252 1740 13251 continue 1741 13252 continue 1741 if(ix .ne. 0)goto 13271 1742 13280 do 13281 k=1,ni 1742 if(ixx(k).eq.1)goto 13281 1742 if(ju(k).eq.0)goto 13281 1743 ga(k)=abs(dot_product(r,x(:,k))) 1744 if(ga(k) .le. al1*vp(k))goto 13301 1744 ixx(k)=1 1744 ix=1 1744 13301 continue 1745 13281 continue 1746 13282 continue 1746 if(ix.eq.1) go to 10880 1747 goto 12942 1748 13271 continue 1749 13241 continue 1750 goto 12941 1751 12942 continue 1751 if(nin .le. nx)goto 13321 1751 jerr=-10000-ilm 1751 goto 12862 1751 13321 continue 1752 if(nin.gt.0) a(1:nin,ilm)=b(m(1:nin)) 1752 kin(ilm)=nin 1753 a0(ilm)=b(0) 1753 alm(ilm)=al 1753 lmu=ilm 1754 devi=dev2(no,w,y,q,pmin) 1755 dev(ilm)=(dev1-devi)/dev0 1755 if(xmz.le.vmin)goto 12862 1756 if(ilm.lt.mnl)goto 12861 1756 if(flmin.ge.1.0)goto 12861 1757 me=0 1757 13330 do 13331 j=1,nin 1757 if(a(j,ilm).ne.0.0) me=me+1 1757 13331 continue 1757 13332 continue 1757 if(me.gt.ne)goto 12862 1758 if(dev(ilm).gt.devmax)goto 12862 1758 if(dev(ilm)-dev(ilm-1).lt.sml)goto 12862 1759 12861 continue 1760 12862 continue 1760 g=log(q/(1.0-q)) 1761 deallocate(b,bs,v,r,xv,q,mm,ga,ixx) 1762 return 1763 end 1764 function dev2(n,w,y,p,pmin) 1765 implicit double precision(a-h,o-z) 1766 double precision w(n),y(n),p(n) 1767 pmax=1.0-pmin 1767 s=0.0 1768 13340 do 13341 i=1,n 1768 pi=min(max(pmin,p(i)),pmax) 1769 s=s-w(i)*(y(i)*log(pi)+(1.0-y(i))*log(1.0-pi)) 1770 13341 continue 1771 13342 continue 1771 dev2=s 1772 return 1773 end 1774 function azero(n,y,g,q,jerr) 1775 implicit double precision(a-h,o-z) 1776 parameter(eps=1.0d-7) 1777 double precision y(n),g(n),q(n) 1778 double precision, dimension (:), allocatable :: e,p,w azero = 0.0 1782 allocate(e(1:n),stat=jerr) 1783 if(jerr.ne.0) return 1784 allocate(p(1:n),stat=jerr) 1785 if(jerr.ne.0) return 1786 allocate(w(1:n),stat=jerr) 1787 if(jerr.ne.0) return 1788 az=0.0 1788 e=exp(-g) 1788 qy=dot_product(q,y) 1788 p=1.0/(1.0+e) 1789 13350 continue 1789 13351 continue 1789 w=q*p*(1.0-p) 1790 d=(qy-dot_product(q,p))/sum(w) 1790 az=az+d 1790 if(abs(d).lt.eps)goto 13352 1791 ea0=exp(-az) 1791 p=1.0/(1.0+ea0*e) 1792 goto 13351 1793 13352 continue 1793 azero=az 1794 deallocate(e,p,w) 1795 return 1796 end 1797 subroutine lognetn(parm,no,ni,nc,x,y,g,w,ju,vp,cl,ne,nx,nlam,flmin 1799 *,ulam,shri, isd,intr,maxit,kopt,lmu,a0,a,m,kin,dev0,dev,alm,nlp,j *err) implicit double precision(a-h,o-z) 1800 double precision x(no,ni),y(no,nc),g(no,nc),w(no),vp(ni),ulam(nlam 1801 *) double precision a(nx,nc,nlam),a0(nc,nlam),dev(nlam),alm(nlam),cl( 1802 *2,ni) integer ju(ni),m(nx),kin(nlam) 1803 double precision, dimension (:,:), allocatable :: q double precision, dimension (:), allocatable :: sxp,sxpl double precision, dimension (:), allocatable :: di,v,r,ga double precision, dimension (:,:), allocatable :: b,bs,xv integer, dimension (:), allocatable :: mm,is,ixx allocate(b(0:ni,1:nc),stat=jerr) if(jerr.ne.0) return allocate(xv(1:ni,1:nc),stat=jerr) if(jerr.ne.0) return allocate(bs(0:ni,1:nc),stat=jerr) if(jerr.ne.0) return allocate(q(1:no,1:nc),stat=jerr) if(jerr.ne.0) return call get_int_parms(sml,eps,big,mnlam,devmax,pmin,exmx) 1818 exmn=-exmx 1819 allocate(r(1:no),stat=jerr) 1820 if(jerr.ne.0) return 1821 allocate(v(1:no),stat=jerr) 1822 if(jerr.ne.0) return 1823 allocate(mm(1:ni),stat=jerr) 1824 if(jerr.ne.0) return 1825 allocate(is(1:max(nc,ni)),stat=jerr) 1826 if(jerr.ne.0) return 1827 allocate(sxp(1:no),stat=jerr) 1828 if(jerr.ne.0) return 1829 allocate(sxpl(1:no),stat=jerr) 1830 if(jerr.ne.0) return 1831 allocate(di(1:no),stat=jerr) 1832 if(jerr.ne.0) return 1833 allocate(ga(1:ni),stat=jerr) 1834 if(jerr.ne.0) return 1835 allocate(ixx(1:ni),stat=jerr) 1836 if(jerr.ne.0) return 1837 pmax=1.0-pmin 1837 emin=pmin/pmax 1837 emax=1.0/emin 1838 pfm=(1.0+pmin)*pmin 1838 pfx=(1.0-pmin)*pmax 1838 vmin=pfm*pmax 1839 bta=parm 1839 omb=1.0-bta 1839 dev1=0.0 1839 dev0=0.0 1840 13360 do 13361 ic=1,nc 1840 q0=dot_product(w,y(:,ic)) 1841 if(q0 .gt. pmin)goto 13381 1841 jerr =8000+ic 1841 return 1841 13381 continue 1842 if(q0 .lt. 1.0-pmin)goto 13401 1842 jerr =9000+ic 1842 return 1842 13401 continue 1843 if(intr .ne. 0)goto 13421 1843 q0=1.0/nc 1843 b(0,ic)=0.0 1843 goto 13431 1844 13421 continue 1844 b(0,ic)=log(q0) 1844 dev1=dev1-q0*b(0,ic) 1844 13431 continue 1845 13411 continue 1845 b(1:ni,ic)=0.0 1846 13361 continue 1847 13362 continue 1847 if(intr.eq.0) dev1=log(float(nc)) 1847 ixx=0 1847 al=0.0 1848 if(nonzero(no*nc,g) .ne. 0)goto 13451 1849 b(0,:)=b(0,:)-sum(b(0,:))/nc 1849 sxp=0.0 1850 13460 do 13461 ic=1,nc 1850 q(:,ic)=exp(b(0,ic)) 1850 sxp=sxp+q(:,ic) 1850 13461 continue 1851 13462 continue 1851 goto 13471 1852 13451 continue 1852 13480 do 13481 i=1,no 1852 g(i,:)=g(i,:)-sum(g(i,:))/nc 1852 13481 continue 1852 13482 continue 1852 sxp=0.0 1853 if(intr .ne. 0)goto 13501 1853 b(0,:)=0.0 1853 goto 13511 1854 13501 continue 1854 call kazero(nc,no,y,g,w,b(0,:),jerr) 1854 if(jerr.ne.0) return 1854 13511 continue 1855 13491 continue 1855 dev1=0.0 1856 13520 do 13521 ic=1,nc 1856 q(:,ic)=b(0,ic)+g(:,ic) 1857 dev1=dev1-dot_product(w,y(:,ic)*q(:,ic)) 1858 q(:,ic)=exp(q(:,ic)) 1858 sxp=sxp+q(:,ic) 1859 13521 continue 1860 13522 continue 1860 sxpl=w*log(sxp) 1860 13530 do 13531 ic=1,nc 1860 dev1=dev1+dot_product(y(:,ic),sxpl) 1860 13531 continue 1861 13532 continue 1861 13471 continue 1862 13441 continue 1862 13540 do 13541 ic=1,nc 1862 13550 do 13551 i=1,no 1862 if(y(i,ic).gt.0.0) dev0=dev0+w(i)*y(i,ic)*log(y(i,ic)) 1862 13551 continue 1862 13552 continue 1862 13541 continue 1863 13542 continue 1863 dev0=dev0+dev1 1864 if(kopt .le. 0)goto 13571 1865 if(isd .le. 0 .or. intr .eq. 0)goto 13591 1865 xv=0.25 1865 goto 13601 1866 13591 continue 1866 13610 do 13611 j=1,ni 1866 if(ju(j).ne.0) xv(j,:)=0.25*dot_product(w,x(:,j)**2) 1866 13611 continue 1866 13612 continue 1866 13601 continue 1867 13581 continue 1867 13571 continue 1869 alf=1.0 1871 if(flmin .ge. 1.0)goto 13631 1871 eqs=max(eps,flmin) 1871 alf=eqs**(1.0/(nlam-1)) 1871 13631 continue 1872 m=0 1872 mm=0 1872 nin=0 1872 nlp=0 1872 mnl=min(mnlam,nlam) 1872 bs=0.0 1872 shr=shri*dev0 1873 ga=0.0 1874 13640 do 13641 ic=1,nc 1874 r=w*(y(:,ic)-q(:,ic)/sxp) 1875 13650 do 13651 j=1,ni 1875 if(ju(j).ne.0) ga(j)=max(ga(j),abs(dot_product(r,x(:,j)))) 1875 13651 continue 1876 13652 continue 1876 13641 continue 1877 13642 continue 1877 13660 do 13661 ilm=1,nlam 1877 al0=al 1878 if(flmin .lt. 1.0)goto 13681 1878 al=ulam(ilm) 1878 goto 13671 1879 13681 if(ilm .le. 2)goto 13691 1879 al=al*alf 1879 goto 13671 1880 13691 if(ilm .ne. 1)goto 13701 1880 al=big 1880 goto 13711 1881 13701 continue 1881 al0=0.0 1882 13720 do 13721 j=1,ni 1882 if(ju(j).eq.0)goto 13721 1882 if(vp(j).gt.0.0) al0=max(al0,ga(j)/vp(j)) 1882 13721 continue 1883 13722 continue 1883 al0=al0/max(bta,1.0d-3) 1883 al=alf*al0 1884 13711 continue 1885 13671 continue 1885 al2=al*omb 1885 al1=al*bta 1885 tlam=bta*(2.0*al-al0) 1886 13730 do 13731 k=1,ni 1886 if(ixx(k).eq.1)goto 13731 1886 if(ju(k).eq.0)goto 13731 1887 if(ga(k).gt.tlam*vp(k)) ixx(k)=1 1888 13731 continue 1889 13732 continue 1889 10880 continue 1890 13740 continue 1890 13741 continue 1890 ix=0 1890 jx=ix 1890 ig=0 1891 13750 do 13751 ic=1,nc 1891 bs(0,ic)=b(0,ic) 1892 if(nin.gt.0) bs(m(1:nin),ic)=b(m(1:nin),ic) 1893 xmz=0.0 1894 13760 do 13761 i=1,no 1894 pic=q(i,ic)/sxp(i) 1895 if(pic .ge. pfm)goto 13781 1895 pic=0.0 1895 v(i)=0.0 1895 goto 13771 1896 13781 if(pic .le. pfx)goto 13791 1896 pic=1.0 1896 v(i)=0.0 1896 goto 13801 1897 13791 continue 1897 v(i)=w(i)*pic*(1.0-pic) 1897 xmz=xmz+v(i) 1897 13801 continue 1898 13771 continue 1898 r(i)=w(i)*(y(i,ic)-pic) 1899 13761 continue 1900 13762 continue 1900 if(xmz.le.vmin)goto 13751 1900 ig=1 1901 if(kopt .ne. 0)goto 13821 1902 13830 do 13831 j=1,ni 1902 if(ixx(j).gt.0) xv(j,ic)=dot_product(v,x(:,j)**2) 1902 13831 continue 1903 13832 continue 1903 13821 continue 1904 13840 continue 1904 13841 continue 1904 nlp=nlp+1 1904 dlx=0.0 1905 13850 do 13851 k=1,ni 1905 if(ixx(k).eq.0)goto 13851 1906 bk=b(k,ic) 1906 gk=dot_product(r,x(:,k)) 1907 u=gk+xv(k,ic)*b(k,ic) 1907 au=abs(u)-vp(k)*al1 1908 if(au .gt. 0.0)goto 13871 1908 b(k,ic)=0.0 1908 goto 13881 1909 13871 continue 1910 b(k,ic)=max(cl(1,k),min(cl(2,k),sign(au,u)/ (xv(k,ic)+vp(k)*al2)) 1912 *) 13881 continue 1913 13861 continue 1913 d=b(k,ic)-bk 1913 if(abs(d).le.0.0)goto 13851 1914 dlx=max(dlx,xv(k,ic)*d**2) 1914 r=r-d*v*x(:,k) 1915 if(mm(k) .ne. 0)goto 13901 1915 nin=nin+1 1916 if(nin .le. nx)goto 13921 1916 jx=1 1916 goto 13852 1916 13921 continue 1917 mm(k)=nin 1917 m(nin)=k 1918 13901 continue 1919 13851 continue 1920 13852 continue 1920 if(jx.gt.0)goto 13842 1921 d=0.0 1921 if(intr.ne.0) d=sum(r)/xmz 1922 if(d .eq. 0.0)goto 13941 1922 b(0,ic)=b(0,ic)+d 1922 dlx=max(dlx,xmz*d**2) 1922 r=r-d*v 1922 13941 continue 1923 if(dlx.lt.shr)goto 13842 1924 if(nlp .le. maxit)goto 13961 1924 jerr=-ilm 1924 return 1924 13961 continue 1925 13970 continue 1925 13971 continue 1925 nlp=nlp+1 1925 dlx=0.0 1926 13980 do 13981 l=1,nin 1926 k=m(l) 1926 bk=b(k,ic) 1927 gk=dot_product(r,x(:,k)) 1928 u=gk+xv(k,ic)*b(k,ic) 1928 au=abs(u)-vp(k)*al1 1929 if(au .gt. 0.0)goto 14001 1929 b(k,ic)=0.0 1929 goto 14011 1930 14001 continue 1931 b(k,ic)=max(cl(1,k),min(cl(2,k),sign(au,u)/ (xv(k,ic)+vp(k)*al2)) 1933 *) 14011 continue 1934 13991 continue 1934 d=b(k,ic)-bk 1934 if(abs(d).le.0.0)goto 13981 1935 dlx=max(dlx,xv(k,ic)*d**2) 1935 r=r-d*v*x(:,k) 1936 13981 continue 1937 13982 continue 1937 d=0.0 1937 if(intr.ne.0) d=sum(r)/xmz 1938 if(d .eq. 0.0)goto 14031 1938 b(0,ic)=b(0,ic)+d 1939 dlx=max(dlx,xmz*d**2) 1939 r=r-d*v 1940 14031 continue 1941 if(dlx.lt.shr)goto 13972 1941 if(nlp .le. maxit)goto 14051 1941 jerr=-ilm 1941 return 1941 14051 continue 1942 goto 13971 1943 13972 continue 1943 goto 13841 1944 13842 continue 1944 if(jx.gt.0)goto 13752 1945 if(xmz*(b(0,ic)-bs(0,ic))**2.gt.shr) ix=1 1946 if(ix .ne. 0)goto 14071 1947 14080 do 14081 j=1,nin 1947 k=m(j) 1948 if(xv(k,ic)*(b(k,ic)-bs(k,ic))**2 .le. shr)goto 14101 1948 ix=1 1948 goto 14082 1948 14101 continue 1949 14081 continue 1950 14082 continue 1950 14071 continue 1951 14110 do 14111 i=1,no 1951 fi=b(0,ic)+g(i,ic) 1953 if(nin.gt.0) fi=fi+dot_product(b(m(1:nin),ic),x(i,m(1:nin))) 1954 fi=min(max(exmn,fi),exmx) 1954 sxp(i)=sxp(i)-q(i,ic) 1955 q(i,ic)=min(max(emin*sxp(i),exp(fi)),emax*sxp(i)) 1956 sxp(i)=sxp(i)+q(i,ic) 1957 14111 continue 1958 14112 continue 1958 13751 continue 1959 13752 continue 1959 s=-sum(b(0,:))/nc 1959 b(0,:)=b(0,:)+s 1959 di=s 1960 14120 do 14121 j=1,nin 1960 l=m(j) 1961 if(vp(l) .gt. 0.0)goto 14141 1961 s=sum(b(l,:))/nc 1961 goto 14151 1962 14141 continue 1962 s=elc(parm,nc,cl(:,l),b(l,:),is) 1962 14151 continue 1963 14131 continue 1963 b(l,:)=b(l,:)-s 1963 di=di-s*x(:,l) 1964 14121 continue 1965 14122 continue 1965 di=exp(di) 1965 sxp=sxp*di 1965 14160 do 14161 ic=1,nc 1965 q(:,ic)=q(:,ic)*di 1965 14161 continue 1966 14162 continue 1966 if(jx.gt.0)goto 13742 1966 if(ig.eq.0)goto 13742 1967 if(ix .ne. 0)goto 14181 1968 14190 do 14191 k=1,ni 1968 if(ixx(k).eq.1)goto 14191 1968 if(ju(k).eq.0)goto 14191 1968 ga(k)=0.0 1968 14191 continue 1969 14192 continue 1969 14200 do 14201 ic=1,nc 1969 r=w*(y(:,ic)-q(:,ic)/sxp) 1970 14210 do 14211 k=1,ni 1970 if(ixx(k).eq.1)goto 14211 1970 if(ju(k).eq.0)goto 14211 1971 ga(k)=max(ga(k),abs(dot_product(r,x(:,k)))) 1972 14211 continue 1973 14212 continue 1973 14201 continue 1974 14202 continue 1974 14220 do 14221 k=1,ni 1974 if(ixx(k).eq.1)goto 14221 1974 if(ju(k).eq.0)goto 14221 1975 if(ga(k) .le. al1*vp(k))goto 14241 1975 ixx(k)=1 1975 ix=1 1975 14241 continue 1976 14221 continue 1977 14222 continue 1977 if(ix.eq.1) go to 10880 1978 goto 13742 1979 14181 continue 1980 goto 13741 1981 13742 continue 1981 if(jx .le. 0)goto 14261 1981 jerr=-10000-ilm 1981 goto 13662 1981 14261 continue 1981 devi=0.0 1982 14270 do 14271 ic=1,nc 1983 if(nin.gt.0) a(1:nin,ic,ilm)=b(m(1:nin),ic) 1983 a0(ic,ilm)=b(0,ic) 1984 14280 do 14281 i=1,no 1984 if(y(i,ic).le.0.0)goto 14281 1985 devi=devi-w(i)*y(i,ic)*log(q(i,ic)/sxp(i)) 1986 14281 continue 1987 14282 continue 1987 14271 continue 1988 14272 continue 1988 kin(ilm)=nin 1988 alm(ilm)=al 1988 lmu=ilm 1989 dev(ilm)=(dev1-devi)/dev0 1989 if(ig.eq.0)goto 13662 1990 if(ilm.lt.mnl)goto 13661 1990 if(flmin.ge.1.0)goto 13661 1991 if(nintot(ni,nx,nc,a(1,1,ilm),m,nin,is).gt.ne)goto 13662 1992 if(dev(ilm).gt.devmax)goto 13662 1992 if(dev(ilm)-dev(ilm-1).lt.sml)goto 13662 1993 13661 continue 1994 13662 continue 1994 g=log(q) 1994 14290 do 14291 i=1,no 1994 g(i,:)=g(i,:)-sum(g(i,:))/nc 1994 14291 continue 1995 14292 continue 1995 deallocate(sxp,b,bs,v,r,xv,q,mm,is,ga,ixx) 1996 return 1997 end 1998 subroutine kazero(kk,n,y,g,q,az,jerr) 1999 implicit double precision(a-h,o-z) 2000 parameter(eps=1.0d-7) 2001 double precision y(n,kk),g(n,kk),q(n),az(kk) 2002 double precision, dimension (:), allocatable :: s double precision, dimension (:,:), allocatable :: e allocate(e(1:n,1:kk),stat=jerr) if(jerr.ne.0) return allocate(s(1:n),stat=jerr) 2009 if(jerr.ne.0) return 2010 az=0.0 2010 e=exp(g) 2010 14300 do 14301 i=1,n 2010 s(i)=sum(e(i,:)) 2010 14301 continue 2011 14302 continue 2011 14310 continue 2011 14311 continue 2011 dm=0.0 2012 14320 do 14321 k=1,kk 2012 t=0.0 2012 u=t 2013 14330 do 14331 i=1,n 2013 pik=e(i,k)/s(i) 2014 t=t+q(i)*(y(i,k)-pik) 2014 u=u+q(i)*pik*(1.0-pik) 2015 14331 continue 2016 14332 continue 2016 d=t/u 2016 az(k)=az(k)+d 2016 ed=exp(d) 2016 dm=max(dm,abs(d)) 2017 14340 do 14341 i=1,n 2017 z=e(i,k) 2017 e(i,k)=z*ed 2017 s(i)=s(i)-z+e(i,k) 2017 14341 continue 2018 14342 continue 2018 14321 continue 2019 14322 continue 2019 if(dm.lt.eps)goto 14312 2019 goto 14311 2020 14312 continue 2020 az=az-sum(az)/kk 2021 deallocate(e,s) 2022 return 2023 end 2024 function elc(parm,n,cl,a,m) 2025 implicit double precision(a-h,o-z) 2026 double precision a(n),cl(2) 2026 integer m(n) 2027 fn=n 2027 am=sum(a)/fn 2028 if((parm .ne. 0.0) .and. (n .ne. 2))goto 14361 2028 elc=am 2028 go to 14370 2028 14361 continue 2029 14380 do 14381 i=1,n 2029 m(i)=i 2029 14381 continue 2029 14382 continue 2029 call psort7(a,m,1,n) 2030 if(a(m(1)) .ne. a(m(n)))goto 14401 2030 elc=a(1) 2030 go to 14370 2030 14401 continue 2031 if(mod(n,2) .ne. 1)goto 14421 2031 ad=a(m(n/2+1)) 2031 goto 14431 2032 14421 continue 2032 ad=0.5*(a(m(n/2+1))+a(m(n/2))) 2032 14431 continue 2033 14411 continue 2033 if(parm .ne. 1.0)goto 14451 2033 elc=ad 2033 go to 14370 2033 14451 continue 2034 b1=min(am,ad) 2034 b2=max(am,ad) 2034 k2=1 2035 14460 continue 2035 14461 if(a(m(k2)).gt.b1)goto 14462 2035 k2=k2+1 2035 goto 14461 2035 14462 continue 2035 k1=k2-1 2036 14470 continue 2036 14471 if(a(m(k2)).ge.b2)goto 14472 2036 k2=k2+1 2036 goto 14471 2037 14472 continue 2037 r=parm/((1.0-parm)*fn) 2037 is=0 2037 sm=n-2*(k1-1) 2038 14480 do 14481 k=k1,k2-1 2038 sm=sm-2.0 2038 s=r*sm+am 2039 if(s .le. a(m(k)) .or. s .gt. a(m(k+1)))goto 14501 2039 is=k 2039 goto 14482 2039 14501 continue 2040 14481 continue 2041 14482 continue 2041 if(is .eq. 0)goto 14521 2041 elc=s 2041 go to 14370 2041 14521 continue 2041 r2=2.0*r 2041 s1=a(m(k1)) 2041 am2=2.0*am 2042 cri=r2*sum(abs(a-s1))+s1*(s1-am2) 2042 elc=s1 2043 14530 do 14531 k=k1+1,k2 2043 s=a(m(k)) 2043 if(s.eq.s1)goto 14531 2044 c=r2*sum(abs(a-s))+s*(s-am2) 2045 if(c .ge. cri)goto 14551 2045 cri=c 2045 elc=s 2045 14551 continue 2045 s1=s 2046 14531 continue 2047 14532 continue 2047 14370 continue 2047 elc=max(maxval(a-cl(2)),min(minval(a-cl(1)),elc)) 2048 return 2049 end 2050 function nintot(ni,nx,nc,a,m,nin,is) 2051 implicit double precision(a-h,o-z) 2052 double precision a(nx,nc) 2052 integer m(nx),is(ni) 2053 is=0 2053 nintot=0 2054 14560 do 14561 ic=1,nc 2054 14570 do 14571 j=1,nin 2054 k=m(j) 2054 if(is(k).ne.0)goto 14571 2055 if(a(j,ic).eq.0.0)goto 14571 2055 is(k)=k 2055 nintot=nintot+1 2056 14571 continue 2056 14572 continue 2056 14561 continue 2057 14562 continue 2057 return 2058 end 2059 subroutine luncomp(ni,nx,nc,ca,ia,nin,a) 2060 implicit double precision(a-h,o-z) 2061 double precision ca(nx,nc),a(ni,nc) 2061 integer ia(nx) 2062 a=0.0 2063 14580 do 14581 ic=1,nc 2063 if(nin.gt.0) a(ia(1:nin),ic)=ca(1:nin,ic) 2063 14581 continue 2064 14582 continue 2064 return 2065 end 2066 subroutine lmodval(nt,x,nc,nx,a0,ca,ia,nin,ans) 2067 implicit double precision(a-h,o-z) 2068 double precision a0(nc),ca(nx,nc),x(nt,*),ans(nc,nt) 2068 integer ia(nx) 2069 14590 do 14591 i=1,nt 2069 14600 do 14601 ic=1,nc 2069 ans(ic,i)=a0(ic) 2071 if(nin.gt.0) ans(ic,i)=ans(ic,i)+dot_product(ca(1:nin,ic),x(i,ia(1 2072 *:nin))) 14601 continue 2072 14602 continue 2072 14591 continue 2073 14592 continue 2073 return 2074 end 2075 subroutine splognet (parm,no,ni,nc,x,ix,jx,y,g,jd,vp,cl,ne,nx,nlam 2077 *,flmin, ulam,thr,isd,intr,maxit,kopt,lmu,a0,ca,ia,nin,dev0,dev,al *m,nlp,jerr) implicit double precision(a-h,o-z) 2078 double precision x(*),y(no,max(2,nc)),g(no,nc),vp(ni),ulam(nlam) 2079 double precision ca(nx,nc,nlam),a0(nc,nlam),dev(nlam),alm(nlam),cl 2080 *(2,ni) integer ix(*),jx(*),jd(*),ia(nx),nin(nlam) 2081 double precision, dimension (:), allocatable :: xm,xs,ww,vq,xv integer, dimension (:), allocatable :: ju if(maxval(vp) .gt. 0.0)goto 14621 2085 jerr=10000 2085 return 2085 14621 continue 2086 allocate(ww(1:no),stat=jerr) 2087 if(jerr.ne.0) return 2088 allocate(ju(1:ni),stat=jerr) 2089 if(jerr.ne.0) return 2090 allocate(vq(1:ni),stat=jerr) 2091 if(jerr.ne.0) return 2092 allocate(xm(1:ni),stat=jerr) 2093 if(jerr.ne.0) return 2094 allocate(xs(1:ni),stat=jerr) 2095 if(jerr.ne.0) return 2096 if(kopt .ne. 2)goto 14641 2096 allocate(xv(1:ni),stat=jerr) 2096 if(jerr.ne.0) return 2096 14641 continue 2098 call spchkvars(no,ni,x,ix,ju) 2099 if(jd(1).gt.0) ju(jd(2:(jd(1)+1)))=0 2100 if(maxval(ju) .gt. 0)goto 14661 2100 jerr=7777 2100 return 2100 14661 continue 2101 vq=max(0d0,vp) 2101 vq=vq*ni/sum(vq) 2102 14670 do 14671 i=1,no 2102 ww(i)=sum(y(i,:)) 2102 if(ww(i).gt.0.0) y(i,:)=y(i,:)/ww(i) 2102 14671 continue 2103 14672 continue 2103 sw=sum(ww) 2103 ww=ww/sw 2104 if(nc .ne. 1)goto 14691 2104 call splstandard2(no,ni,x,ix,jx,ww,ju,isd,intr,xm,xs) 2105 if(isd .le. 0)goto 14711 2105 14720 do 14721 j=1,ni 2105 cl(:,j)=cl(:,j)*xs(j) 2105 14721 continue 2105 14722 continue 2105 14711 continue 2106 call sprlognet2n(parm,no,ni,x,ix,jx,y(:,1),g(:,1),ww,ju,vq,cl,ne,n 2109 *x,nlam, flmin,ulam,thr,isd,intr,maxit,kopt,xm,xs,lmu,a0,ca,ia,nin *,dev0,dev, alm,nlp,jerr) goto 14681 2110 14691 if(kopt .ne. 2)goto 14731 2111 call multsplstandard2(no,ni,x,ix,jx,ww,ju,isd,intr,xm,xs,xv) 2112 if(isd .le. 0)goto 14751 2112 14760 do 14761 j=1,ni 2112 cl(:,j)=cl(:,j)*xs(j) 2112 14761 continue 2112 14762 continue 2112 14751 continue 2113 call multsprlognetn(parm,no,ni,nc,x,ix,jx,y,g,ww,ju,vq,cl,ne,nx,nl 2115 *am,flmin, ulam,thr,intr,maxit,xv,xm,xs,lmu,a0,ca,ia,nin,dev0,dev, *alm,nlp,jerr) goto 14771 2116 14731 continue 2116 call splstandard2(no,ni,x,ix,jx,ww,ju,isd,intr,xm,xs) 2117 if(isd .le. 0)goto 14791 2117 14800 do 14801 j=1,ni 2117 cl(:,j)=cl(:,j)*xs(j) 2117 14801 continue 2117 14802 continue 2117 14791 continue 2118 call sprlognetn(parm,no,ni,nc,x,ix,jx,y,g,ww,ju,vq,cl,ne,nx,nlam,f 2121 *lmin, ulam,thr,isd,intr,maxit,kopt,xm,xs,lmu,a0,ca, ia,nin,dev0, *dev,alm,nlp,jerr) 14771 continue 2122 14681 continue 2122 if(jerr.gt.0) return 2122 dev0=2.0*sw*dev0 2123 14810 do 14811 k=1,lmu 2123 nk=nin(k) 2124 14820 do 14821 ic=1,nc 2124 if(isd .le. 0)goto 14841 2124 14850 do 14851 l=1,nk 2124 ca(l,ic,k)=ca(l,ic,k)/xs(ia(l)) 2124 14851 continue 2124 14852 continue 2124 14841 continue 2125 if(intr .ne. 0)goto 14871 2125 a0(ic,k)=0.0 2125 goto 14881 2126 14871 continue 2126 a0(ic,k)=a0(ic,k)-dot_product(ca(1:nk,ic,k),xm(ia(1:nk))) 2126 14881 continue 2127 14861 continue 2127 14821 continue 2128 14822 continue 2128 14811 continue 2129 14812 continue 2129 deallocate(ww,ju,vq,xm,xs) 2129 if(kopt.eq.2) deallocate(xv) 2130 return 2131 end 2132 subroutine multsplstandard2(no,ni,x,ix,jx,w,ju,isd,intr,xm,xs,xv) 2133 implicit double precision(a-h,o-z) 2134 double precision x(*),w(no),xm(ni),xs(ni),xv(ni) 2134 integer ix(*),jx(*),ju(ni) 2135 if(intr .ne. 0)goto 14901 2136 14910 do 14911 j=1,ni 2136 if(ju(j).eq.0)goto 14911 2136 xm(j)=0.0 2136 jb=ix(j) 2136 je=ix(j+1)-1 2137 xv(j)=dot_product(w(jx(jb:je)),x(jb:je)**2) 2138 if(isd .eq. 0)goto 14931 2138 xbq=dot_product(w(jx(jb:je)),x(jb:je))**2 2138 vc=xv(j)-xbq 2139 xs(j)=sqrt(vc) 2139 xv(j)=1.0+xbq/vc 2140 goto 14941 2141 14931 continue 2141 xs(j)=1.0 2141 14941 continue 2142 14921 continue 2142 14911 continue 2143 14912 continue 2143 return 2144 14901 continue 2145 14950 do 14951 j=1,ni 2145 if(ju(j).eq.0)goto 14951 2145 jb=ix(j) 2145 je=ix(j+1)-1 2146 xm(j)=dot_product(w(jx(jb:je)),x(jb:je)) 2147 xv(j)=dot_product(w(jx(jb:je)),x(jb:je)**2)-xm(j)**2 2148 if(isd .le. 0)goto 14971 2148 xs(j)=sqrt(xv(j)) 2148 xv(j)=1.0 2148 14971 continue 2149 14951 continue 2150 14952 continue 2150 if(isd.eq.0) xs=1.0 2151 return 2152 end 2153 subroutine splstandard2(no,ni,x,ix,jx,w,ju,isd,intr,xm,xs) 2154 implicit double precision(a-h,o-z) 2155 double precision x(*),w(no),xm(ni),xs(ni) 2155 integer ix(*),jx(*),ju(ni) 2156 if(intr .ne. 0)goto 14991 2157 15000 do 15001 j=1,ni 2157 if(ju(j).eq.0)goto 15001 2157 xm(j)=0.0 2157 jb=ix(j) 2157 je=ix(j+1)-1 2158 if(isd .eq. 0)goto 15021 2159 vc=dot_product(w(jx(jb:je)),x(jb:je)**2) -dot_product(w(jx(jb:je) 2161 *),x(jb:je))**2 xs(j)=sqrt(vc) 2162 goto 15031 2163 15021 continue 2163 xs(j)=1.0 2163 15031 continue 2164 15011 continue 2164 15001 continue 2165 15002 continue 2165 return 2166 14991 continue 2167 15040 do 15041 j=1,ni 2167 if(ju(j).eq.0)goto 15041 2167 jb=ix(j) 2167 je=ix(j+1)-1 2168 xm(j)=dot_product(w(jx(jb:je)),x(jb:je)) 2169 if(isd.ne.0) xs(j)=sqrt(dot_product(w(jx(jb:je)),x(jb:je)**2)-xm(j 2170 *)**2) 15041 continue 2171 15042 continue 2171 if(isd.eq.0) xs=1.0 2172 return 2173 end 2174 subroutine sprlognet2n (parm,no,ni,x,ix,jx,y,g,w,ju,vp,cl,ne,nx,nl 2177 *am, flmin,ulam,shri,isd,intr,maxit,kopt,xb,xs, lmu,a0,a,m,kin,de *v0,dev,alm,nlp,jerr) implicit double precision(a-h,o-z) 2178 double precision x(*),y(no),g(no),w(no),vp(ni),ulam(nlam),cl(2,ni) 2179 double precision a(nx,nlam),a0(nlam),dev(nlam),alm(nlam) 2180 double precision xb(ni),xs(ni) 2180 integer ix(*),jx(*),ju(ni),m(nx),kin(nlam) 2181 double precision, dimension (:), allocatable :: xm,b,bs,v,r double precision, dimension (:), allocatable :: sc,xv,q,ga integer, dimension (:), allocatable :: mm,ixx call get_int_parms(sml,eps,big,mnlam,devmax,pmin,exmx) 2187 allocate(b(0:ni),stat=jerr) 2188 if(jerr.ne.0) return 2189 allocate(xm(0:ni),stat=jerr) 2190 if(jerr.ne.0) return 2191 allocate(xv(1:ni),stat=jerr) 2192 if(jerr.ne.0) return 2193 allocate(bs(0:ni),stat=jerr) 2194 if(jerr.ne.0) return 2195 allocate(ga(1:ni),stat=jerr) 2196 if(jerr.ne.0) return 2197 allocate(mm(1:ni),stat=jerr) 2198 if(jerr.ne.0) return 2199 allocate(ixx(1:ni),stat=jerr) 2200 if(jerr.ne.0) return 2201 allocate(q(1:no),stat=jerr) 2202 if(jerr.ne.0) return 2203 allocate(r(1:no),stat=jerr) 2204 if(jerr.ne.0) return 2205 allocate(v(1:no),stat=jerr) 2206 if(jerr.ne.0) return 2207 allocate(sc(1:no),stat=jerr) 2208 if(jerr.ne.0) return 2209 fmax=log(1.0/pmin-1.0) 2209 fmin=-fmax 2209 vmin=(1.0+pmin)*pmin*(1.0-pmin) 2210 bta=parm 2210 omb=1.0-bta 2211 q0=dot_product(w,y) 2211 if(q0 .gt. pmin)goto 15061 2211 jerr=8001 2211 return 2211 15061 continue 2212 if(q0 .lt. 1.0-pmin)goto 15081 2212 jerr=9001 2212 return 2212 15081 continue 2213 if(intr.eq.0) q0=0.5 2213 bz=0.0 2213 if(intr.ne.0) bz=log(q0/(1.0-q0)) 2214 if(nonzero(no,g) .ne. 0)goto 15101 2214 vi=q0*(1.0-q0) 2214 b(0)=bz 2214 v=vi*w 2215 r=w*(y-q0) 2215 q=q0 2215 xm(0)=vi 2215 dev1=-(bz*q0+log(1.0-q0)) 2216 goto 15111 2217 15101 continue 2217 b(0)=0.0 2218 if(intr .eq. 0)goto 15131 2218 b(0)=azero(no,y,g,w,jerr) 2218 if(jerr.ne.0) return 2218 15131 continue 2219 q=1.0/(1.0+exp(-b(0)-g)) 2219 v=w*q*(1.0-q) 2219 r=w*(y-q) 2219 xm(0)=sum(v) 2220 dev1=-(b(0)*q0+dot_product(w,y*g+log(1.0-q))) 2221 15111 continue 2222 15091 continue 2222 if(kopt .le. 0)goto 15151 2223 if(isd .le. 0 .or. intr .eq. 0)goto 15171 2223 xv=0.25 2223 goto 15181 2224 15171 continue 2225 15190 do 15191 j=1,ni 2225 if(ju(j).eq.0)goto 15191 2225 jb=ix(j) 2225 je=ix(j+1)-1 2226 xv(j)=0.25*(dot_product(w(jx(jb:je)),x(jb:je)**2)-xb(j)**2) 2227 15191 continue 2228 15192 continue 2228 15181 continue 2229 15161 continue 2229 15151 continue 2230 b(1:ni)=0.0 2230 dev0=dev1 2231 15200 do 15201 i=1,no 2231 if(y(i).gt.0.0) dev0=dev0+w(i)*y(i)*log(y(i)) 2232 if(y(i).lt.1.0) dev0=dev0+w(i)*(1.0-y(i))*log(1.0-y(i)) 2233 15201 continue 2235 15202 continue 2235 alf=1.0 2237 if(flmin .ge. 1.0)goto 15221 2237 eqs=max(eps,flmin) 2237 alf=eqs**(1.0/(nlam-1)) 2237 15221 continue 2238 m=0 2238 mm=0 2238 nin=0 2238 o=0.0 2238 svr=o 2238 mnl=min(mnlam,nlam) 2238 bs=0.0 2238 nlp=0 2238 nin=nlp 2239 shr=shri*dev0 2239 al=0.0 2239 ixx=0 2240 15230 do 15231 j=1,ni 2240 if(ju(j).eq.0)goto 15231 2241 jb=ix(j) 2241 je=ix(j+1)-1 2241 jn=ix(j+1)-ix(j) 2242 sc(1:jn)=r(jx(jb:je))+v(jx(jb:je))*o 2243 gj=dot_product(sc(1:jn),x(jb:je)) 2244 ga(j)=abs((gj-svr*xb(j))/xs(j)) 2245 15231 continue 2246 15232 continue 2246 15240 do 15241 ilm=1,nlam 2246 al0=al 2247 if(flmin .lt. 1.0)goto 15261 2247 al=ulam(ilm) 2247 goto 15251 2248 15261 if(ilm .le. 2)goto 15271 2248 al=al*alf 2248 goto 15251 2249 15271 if(ilm .ne. 1)goto 15281 2249 al=big 2249 goto 15291 2250 15281 continue 2250 al0=0.0 2251 15300 do 15301 j=1,ni 2251 if(ju(j).eq.0)goto 15301 2251 if(vp(j).gt.0.0) al0=max(al0,ga(j)/vp(j)) 2251 15301 continue 2252 15302 continue 2252 al0=al0/max(bta,1.0d-3) 2252 al=alf*al0 2253 15291 continue 2254 15251 continue 2254 al2=al*omb 2254 al1=al*bta 2254 tlam=bta*(2.0*al-al0) 2255 15310 do 15311 k=1,ni 2255 if(ixx(k).eq.1)goto 15311 2255 if(ju(k).eq.0)goto 15311 2256 if(ga(k).gt.tlam*vp(k)) ixx(k)=1 2257 15311 continue 2258 15312 continue 2258 10880 continue 2259 15320 continue 2259 15321 continue 2259 bs(0)=b(0) 2259 if(nin.gt.0) bs(m(1:nin))=b(m(1:nin)) 2260 15330 do 15331 j=1,ni 2260 if(ixx(j).eq.0)goto 15331 2261 jb=ix(j) 2261 je=ix(j+1)-1 2261 jn=ix(j+1)-ix(j) 2262 sc(1:jn)=v(jx(jb:je)) 2263 xm(j)=dot_product(sc(1:jn),x(jb:je)) 2264 if(kopt .ne. 0)goto 15351 2265 xv(j)=dot_product(sc(1:jn),x(jb:je)**2) 2266 xv(j)=(xv(j)-2.0*xb(j)*xm(j)+xm(0)*xb(j)**2)/xs(j)**2 2267 15351 continue 2268 15331 continue 2269 15332 continue 2269 15360 continue 2269 15361 continue 2269 nlp=nlp+1 2269 dlx=0.0 2270 15370 do 15371 k=1,ni 2270 if(ixx(k).eq.0)goto 15371 2271 jb=ix(k) 2271 je=ix(k+1)-1 2271 jn=ix(k+1)-ix(k) 2271 bk=b(k) 2272 sc(1:jn)=r(jx(jb:je))+v(jx(jb:je))*o 2273 gk=dot_product(sc(1:jn),x(jb:je)) 2274 gk=(gk-svr*xb(k))/xs(k) 2275 u=gk+xv(k)*b(k) 2275 au=abs(u)-vp(k)*al1 2276 if(au .gt. 0.0)goto 15391 2276 b(k)=0.0 2276 goto 15401 2277 15391 continue 2278 b(k)=max(cl(1,k),min(cl(2,k),sign(au,u)/(xv(k)+vp(k)*al2))) 2279 15401 continue 2280 15381 continue 2280 d=b(k)-bk 2280 if(abs(d).le.0.0)goto 15371 2280 dlx=max(dlx,xv(k)*d**2) 2281 if(mm(k) .ne. 0)goto 15421 2281 nin=nin+1 2281 if(nin.gt.nx)goto 15372 2282 mm(k)=nin 2282 m(nin)=k 2282 sc(1:jn)=v(jx(jb:je)) 2283 xm(k)=dot_product(sc(1:jn),x(jb:je)) 2284 15421 continue 2285 r(jx(jb:je))=r(jx(jb:je))-d*v(jx(jb:je))*x(jb:je)/xs(k) 2286 o=o+d*(xb(k)/xs(k)) 2287 svr=svr-d*(xm(k)-xb(k)*xm(0))/xs(k) 2288 15371 continue 2289 15372 continue 2289 if(nin.gt.nx)goto 15362 2290 d=0.0 2290 if(intr.ne.0) d=svr/xm(0) 2291 if(d .eq. 0.0)goto 15441 2291 b(0)=b(0)+d 2291 dlx=max(dlx,xm(0)*d**2) 2291 r=r-d*v 2292 svr=svr-d*xm(0) 2293 15441 continue 2294 if(dlx.lt.shr)goto 15362 2295 if(nlp .le. maxit)goto 15461 2295 jerr=-ilm 2295 return 2295 15461 continue 2296 15470 continue 2296 15471 continue 2296 nlp=nlp+1 2296 dlx=0.0 2297 15480 do 15481 l=1,nin 2297 k=m(l) 2297 jb=ix(k) 2297 je=ix(k+1)-1 2298 jn=ix(k+1)-ix(k) 2298 bk=b(k) 2299 sc(1:jn)=r(jx(jb:je))+v(jx(jb:je))*o 2300 gk=dot_product(sc(1:jn),x(jb:je)) 2301 gk=(gk-svr*xb(k))/xs(k) 2302 u=gk+xv(k)*b(k) 2302 au=abs(u)-vp(k)*al1 2303 if(au .gt. 0.0)goto 15501 2303 b(k)=0.0 2303 goto 15511 2304 15501 continue 2305 b(k)=max(cl(1,k),min(cl(2,k),sign(au,u)/(xv(k)+vp(k)*al2))) 2306 15511 continue 2307 15491 continue 2307 d=b(k)-bk 2307 if(abs(d).le.0.0)goto 15481 2307 dlx=max(dlx,xv(k)*d**2) 2308 r(jx(jb:je))=r(jx(jb:je))-d*v(jx(jb:je))*x(jb:je)/xs(k) 2309 o=o+d*(xb(k)/xs(k)) 2310 svr=svr-d*(xm(k)-xb(k)*xm(0))/xs(k) 2311 15481 continue 2312 15482 continue 2312 d=0.0 2312 if(intr.ne.0) d=svr/xm(0) 2313 if(d .eq. 0.0)goto 15531 2313 b(0)=b(0)+d 2313 dlx=max(dlx,xm(0)*d**2) 2313 r=r-d*v 2314 svr=svr-d*xm(0) 2315 15531 continue 2316 if(dlx.lt.shr)goto 15472 2317 if(nlp .le. maxit)goto 15551 2317 jerr=-ilm 2317 return 2317 15551 continue 2318 goto 15471 2319 15472 continue 2319 goto 15361 2320 15362 continue 2320 if(nin.gt.nx)goto 15322 2321 sc=b(0) 2321 b0=0.0 2322 15560 do 15561 j=1,nin 2322 l=m(j) 2322 jb=ix(l) 2322 je=ix(l+1)-1 2323 sc(jx(jb:je))=sc(jx(jb:je))+b(l)*x(jb:je)/xs(l) 2324 b0=b0-b(l)*xb(l)/xs(l) 2325 15561 continue 2326 15562 continue 2326 sc=sc+b0 2327 15570 do 15571 i=1,no 2327 fi=sc(i)+g(i) 2328 if(fi .ge. fmin)goto 15591 2328 q(i)=0.0 2328 goto 15581 2328 15591 if(fi .le. fmax)goto 15601 2328 q(i)=1.0 2328 goto 15611 2329 15601 continue 2329 q(i)=1.0/(1.0+exp(-fi)) 2329 15611 continue 2330 15581 continue 2330 15571 continue 2331 15572 continue 2331 v=w*q*(1.0-q) 2331 xm(0)=sum(v) 2331 if(xm(0).lt.vmin)goto 15322 2332 r=w*(y-q) 2332 svr=sum(r) 2332 o=0.0 2333 if(xm(0)*(b(0)-bs(0))**2 .ge. shr)goto 15631 2333 kx=0 2334 15640 do 15641 j=1,nin 2334 k=m(j) 2335 if(xv(k)*(b(k)-bs(k))**2.lt.shr)goto 15641 2335 kx=1 2335 goto 15642 2336 15641 continue 2337 15642 continue 2337 if(kx .ne. 0)goto 15661 2338 15670 do 15671 j=1,ni 2338 if(ixx(j).eq.1)goto 15671 2338 if(ju(j).eq.0)goto 15671 2339 jb=ix(j) 2339 je=ix(j+1)-1 2339 jn=ix(j+1)-ix(j) 2340 sc(1:jn)=r(jx(jb:je))+v(jx(jb:je))*o 2341 gj=dot_product(sc(1:jn),x(jb:je)) 2342 ga(j)=abs((gj-svr*xb(j))/xs(j)) 2343 if(ga(j) .le. al1*vp(j))goto 15691 2343 ixx(j)=1 2343 kx=1 2343 15691 continue 2344 15671 continue 2345 15672 continue 2345 if(kx.eq.1) go to 10880 2346 goto 15322 2347 15661 continue 2348 15631 continue 2349 goto 15321 2350 15322 continue 2350 if(nin .le. nx)goto 15711 2350 jerr=-10000-ilm 2350 goto 15242 2350 15711 continue 2351 if(nin.gt.0) a(1:nin,ilm)=b(m(1:nin)) 2351 kin(ilm)=nin 2352 a0(ilm)=b(0) 2352 alm(ilm)=al 2352 lmu=ilm 2353 devi=dev2(no,w,y,q,pmin) 2354 dev(ilm)=(dev1-devi)/dev0 2355 if(ilm.lt.mnl)goto 15241 2355 if(flmin.ge.1.0)goto 15241 2356 me=0 2356 15720 do 15721 j=1,nin 2356 if(a(j,ilm).ne.0.0) me=me+1 2356 15721 continue 2356 15722 continue 2356 if(me.gt.ne)goto 15242 2357 if(dev(ilm).gt.devmax)goto 15242 2357 if(dev(ilm)-dev(ilm-1).lt.sml)goto 15242 2358 if(xm(0).lt.vmin)goto 15242 2359 15241 continue 2360 15242 continue 2360 g=log(q/(1.0-q)) 2361 deallocate(xm,b,bs,v,r,sc,xv,q,mm,ga,ixx) 2362 return 2363 end 2364 subroutine sprlognetn(parm,no,ni,nc,x,ix,jx,y,g,w,ju,vp,cl,ne,nx,n 2366 *lam,flmin, ulam,shri,isd,intr,maxit,kopt,xb,xs,lmu,a0,a,m,kin,dev *0,dev,alm,nlp,jerr) implicit double precision(a-h,o-z) 2367 double precision x(*),y(no,nc),g(no,nc),w(no),vp(ni),ulam(nlam),xb 2368 *(ni),xs(ni) double precision a(nx,nc,nlam),a0(nc,nlam),dev(nlam),alm(nlam),cl( 2369 *2,ni) integer ix(*),jx(*),ju(ni),m(nx),kin(nlam) 2370 double precision, dimension (:,:), allocatable :: q double precision, dimension (:), allocatable :: sxp,sxpl double precision, dimension (:), allocatable :: sc,xm,v,r,ga double precision, dimension (:,:), allocatable :: b,bs,xv integer, dimension (:), allocatable :: mm,is,iy allocate(b(0:ni,1:nc),stat=jerr) if(jerr.ne.0) return allocate(xv(1:ni,1:nc),stat=jerr) if(jerr.ne.0) return allocate(bs(0:ni,1:nc),stat=jerr) if(jerr.ne.0) return allocate(q(1:no,1:nc),stat=jerr) if(jerr.ne.0) return call get_int_parms(sml,eps,big,mnlam,devmax,pmin,exmx) 2385 exmn=-exmx 2386 allocate(xm(0:ni),stat=jerr) 2387 if(jerr.ne.0) return 2388 allocate(r(1:no),stat=jerr) 2389 if(jerr.ne.0) return 2390 allocate(v(1:no),stat=jerr) 2391 if(jerr.ne.0) return 2392 allocate(mm(1:ni),stat=jerr) 2393 if(jerr.ne.0) return 2394 allocate(ga(1:ni),stat=jerr) 2395 if(jerr.ne.0) return 2396 allocate(iy(1:ni),stat=jerr) 2397 if(jerr.ne.0) return 2398 allocate(is(1:max(nc,ni)),stat=jerr) 2399 if(jerr.ne.0) return 2400 allocate(sxp(1:no),stat=jerr) 2401 if(jerr.ne.0) return 2402 allocate(sxpl(1:no),stat=jerr) 2403 if(jerr.ne.0) return 2404 allocate(sc(1:no),stat=jerr) 2405 if(jerr.ne.0) return 2406 pmax=1.0-pmin 2406 emin=pmin/pmax 2406 emax=1.0/emin 2407 pfm=(1.0+pmin)*pmin 2407 pfx=(1.0-pmin)*pmax 2407 vmin=pfm*pmax 2408 bta=parm 2408 omb=1.0-bta 2408 dev1=0.0 2408 dev0=0.0 2409 15730 do 15731 ic=1,nc 2409 q0=dot_product(w,y(:,ic)) 2410 if(q0 .gt. pmin)goto 15751 2410 jerr =8000+ic 2410 return 2410 15751 continue 2411 if(q0 .lt. 1.0-pmin)goto 15771 2411 jerr =9000+ic 2411 return 2411 15771 continue 2412 if(intr.eq.0) q0=1.0/nc 2413 b(1:ni,ic)=0.0 2413 b(0,ic)=0.0 2414 if(intr .eq. 0)goto 15791 2414 b(0,ic)=log(q0) 2414 dev1=dev1-q0*b(0,ic) 2414 15791 continue 2415 15731 continue 2416 15732 continue 2416 if(intr.eq.0) dev1=log(float(nc)) 2416 iy=0 2416 al=0.0 2417 if(nonzero(no*nc,g) .ne. 0)goto 15811 2418 b(0,:)=b(0,:)-sum(b(0,:))/nc 2418 sxp=0.0 2419 15820 do 15821 ic=1,nc 2419 q(:,ic)=exp(b(0,ic)) 2419 sxp=sxp+q(:,ic) 2419 15821 continue 2420 15822 continue 2420 goto 15831 2421 15811 continue 2421 15840 do 15841 i=1,no 2421 g(i,:)=g(i,:)-sum(g(i,:))/nc 2421 15841 continue 2421 15842 continue 2421 sxp=0.0 2422 if(intr .ne. 0)goto 15861 2422 b(0,:)=0.0 2422 goto 15871 2423 15861 continue 2423 call kazero(nc,no,y,g,w,b(0,:),jerr) 2423 if(jerr.ne.0) return 2423 15871 continue 2424 15851 continue 2424 dev1=0.0 2425 15880 do 15881 ic=1,nc 2425 q(:,ic)=b(0,ic)+g(:,ic) 2426 dev1=dev1-dot_product(w,y(:,ic)*q(:,ic)) 2427 q(:,ic)=exp(q(:,ic)) 2427 sxp=sxp+q(:,ic) 2428 15881 continue 2429 15882 continue 2429 sxpl=w*log(sxp) 2429 15890 do 15891 ic=1,nc 2429 dev1=dev1+dot_product(y(:,ic),sxpl) 2429 15891 continue 2430 15892 continue 2430 15831 continue 2431 15801 continue 2431 15900 do 15901 ic=1,nc 2431 15910 do 15911 i=1,no 2431 if(y(i,ic).gt.0.0) dev0=dev0+w(i)*y(i,ic)*log(y(i,ic)) 2431 15911 continue 2431 15912 continue 2431 15901 continue 2432 15902 continue 2432 dev0=dev0+dev1 2433 if(kopt .le. 0)goto 15931 2434 if(isd .le. 0 .or. intr .eq. 0)goto 15951 2434 xv=0.25 2434 goto 15961 2435 15951 continue 2436 15970 do 15971 j=1,ni 2436 if(ju(j).eq.0)goto 15971 2436 jb=ix(j) 2436 je=ix(j+1)-1 2437 xv(j,:)=0.25*(dot_product(w(jx(jb:je)),x(jb:je)**2)-xb(j)**2) 2438 15971 continue 2439 15972 continue 2439 15961 continue 2440 15941 continue 2440 15931 continue 2442 alf=1.0 2444 if(flmin .ge. 1.0)goto 15991 2444 eqs=max(eps,flmin) 2444 alf=eqs**(1.0/(nlam-1)) 2444 15991 continue 2445 m=0 2445 mm=0 2445 nin=0 2445 nlp=0 2445 mnl=min(mnlam,nlam) 2445 bs=0.0 2445 svr=0.0 2445 o=0.0 2446 shr=shri*dev0 2446 ga=0.0 2447 16000 do 16001 ic=1,nc 2447 v=q(:,ic)/sxp 2447 r=w*(y(:,ic)-v) 2447 v=w*v*(1.0-v) 2448 16010 do 16011 j=1,ni 2448 if(ju(j).eq.0)goto 16011 2449 jb=ix(j) 2449 je=ix(j+1)-1 2449 jn=ix(j+1)-ix(j) 2450 sc(1:jn)=r(jx(jb:je))+o*v(jx(jb:je)) 2451 gj=dot_product(sc(1:jn),x(jb:je)) 2452 ga(j)=max(ga(j),abs(gj-svr*xb(j))/xs(j)) 2453 16011 continue 2454 16012 continue 2454 16001 continue 2455 16002 continue 2455 16020 do 16021 ilm=1,nlam 2455 al0=al 2456 if(flmin .lt. 1.0)goto 16041 2456 al=ulam(ilm) 2456 goto 16031 2457 16041 if(ilm .le. 2)goto 16051 2457 al=al*alf 2457 goto 16031 2458 16051 if(ilm .ne. 1)goto 16061 2458 al=big 2458 goto 16071 2459 16061 continue 2459 al0=0.0 2460 16080 do 16081 j=1,ni 2460 if(ju(j).eq.0)goto 16081 2460 if(vp(j).gt.0.0) al0=max(al0,ga(j)/vp(j)) 2460 16081 continue 2461 16082 continue 2461 al0=al0/max(bta,1.0d-3) 2461 al=alf*al0 2462 16071 continue 2463 16031 continue 2463 al2=al*omb 2463 al1=al*bta 2463 tlam=bta*(2.0*al-al0) 2464 16090 do 16091 k=1,ni 2464 if(iy(k).eq.1)goto 16091 2464 if(ju(k).eq.0)goto 16091 2465 if(ga(k).gt.tlam*vp(k)) iy(k)=1 2466 16091 continue 2467 16092 continue 2467 10880 continue 2468 16100 continue 2468 16101 continue 2468 ixx=0 2468 jxx=ixx 2468 ig=0 2469 16110 do 16111 ic=1,nc 2469 bs(0,ic)=b(0,ic) 2470 if(nin.gt.0) bs(m(1:nin),ic)=b(m(1:nin),ic) 2471 xm(0)=0.0 2471 svr=0.0 2471 o=0.0 2472 16120 do 16121 i=1,no 2472 pic=q(i,ic)/sxp(i) 2473 if(pic .ge. pfm)goto 16141 2473 pic=0.0 2473 v(i)=0.0 2473 goto 16131 2474 16141 if(pic .le. pfx)goto 16151 2474 pic=1.0 2474 v(i)=0.0 2474 goto 16161 2475 16151 continue 2475 v(i)=w(i)*pic*(1.0-pic) 2475 xm(0)=xm(0)+v(i) 2475 16161 continue 2476 16131 continue 2476 r(i)=w(i)*(y(i,ic)-pic) 2476 svr=svr+r(i) 2477 16121 continue 2478 16122 continue 2478 if(xm(0).le.vmin)goto 16111 2478 ig=1 2479 16170 do 16171 j=1,ni 2479 if(iy(j).eq.0)goto 16171 2480 jb=ix(j) 2480 je=ix(j+1)-1 2481 xm(j)=dot_product(v(jx(jb:je)),x(jb:je)) 2482 if(kopt .ne. 0)goto 16191 2483 xv(j,ic)=dot_product(v(jx(jb:je)),x(jb:je)**2) 2484 xv(j,ic)=(xv(j,ic)-2.0*xb(j)*xm(j)+xm(0)*xb(j)**2)/xs(j)**2 2485 16191 continue 2486 16171 continue 2487 16172 continue 2487 16200 continue 2487 16201 continue 2487 nlp=nlp+1 2487 dlx=0.0 2488 16210 do 16211 k=1,ni 2488 if(iy(k).eq.0)goto 16211 2489 jb=ix(k) 2489 je=ix(k+1)-1 2489 jn=ix(k+1)-ix(k) 2489 bk=b(k,ic) 2490 sc(1:jn)=r(jx(jb:je))+o*v(jx(jb:je)) 2491 gk=dot_product(sc(1:jn),x(jb:je)) 2492 gk=(gk-svr*xb(k))/xs(k) 2493 u=gk+xv(k,ic)*b(k,ic) 2493 au=abs(u)-vp(k)*al1 2494 if(au .gt. 0.0)goto 16231 2494 b(k,ic)=0.0 2494 goto 16241 2495 16231 continue 2496 b(k,ic)=max(cl(1,k),min(cl(2,k),sign(au,u)/ (xv(k,ic)+vp(k)*al2)) 2498 *) 16241 continue 2499 16221 continue 2499 d=b(k,ic)-bk 2499 if(abs(d).le.0.0)goto 16211 2500 dlx=max(dlx,xv(k,ic)*d**2) 2501 if(mm(k) .ne. 0)goto 16261 2501 nin=nin+1 2502 if(nin .le. nx)goto 16281 2502 jxx=1 2502 goto 16212 2502 16281 continue 2503 mm(k)=nin 2503 m(nin)=k 2504 xm(k)=dot_product(v(jx(jb:je)),x(jb:je)) 2505 16261 continue 2506 r(jx(jb:je))=r(jx(jb:je))-d*v(jx(jb:je))*x(jb:je)/xs(k) 2507 o=o+d*(xb(k)/xs(k)) 2508 svr=svr-d*(xm(k)-xb(k)*xm(0))/xs(k) 2509 16211 continue 2510 16212 continue 2510 if(jxx.gt.0)goto 16202 2511 d=0.0 2511 if(intr.ne.0) d=svr/xm(0) 2512 if(d .eq. 0.0)goto 16301 2512 b(0,ic)=b(0,ic)+d 2512 dlx=max(dlx,xm(0)*d**2) 2513 r=r-d*v 2513 svr=svr-d*xm(0) 2514 16301 continue 2515 if(dlx.lt.shr)goto 16202 2515 if(nlp .le. maxit)goto 16321 2515 jerr=-ilm 2515 return 2515 16321 continue 2516 16330 continue 2516 16331 continue 2516 nlp=nlp+1 2516 dlx=0.0 2517 16340 do 16341 l=1,nin 2517 k=m(l) 2517 jb=ix(k) 2517 je=ix(k+1)-1 2518 jn=ix(k+1)-ix(k) 2518 bk=b(k,ic) 2519 sc(1:jn)=r(jx(jb:je))+o*v(jx(jb:je)) 2520 gk=dot_product(sc(1:jn),x(jb:je)) 2521 gk=(gk-svr*xb(k))/xs(k) 2522 u=gk+xv(k,ic)*b(k,ic) 2522 au=abs(u)-vp(k)*al1 2523 if(au .gt. 0.0)goto 16361 2523 b(k,ic)=0.0 2523 goto 16371 2524 16361 continue 2525 b(k,ic)=max(cl(1,k),min(cl(2,k),sign(au,u)/ (xv(k,ic)+vp(k)*al2)) 2527 *) 16371 continue 2528 16351 continue 2528 d=b(k,ic)-bk 2528 if(abs(d).le.0.0)goto 16341 2529 dlx=max(dlx,xv(k,ic)*d**2) 2530 r(jx(jb:je))=r(jx(jb:je))-d*v(jx(jb:je))*x(jb:je)/xs(k) 2531 o=o+d*(xb(k)/xs(k)) 2532 svr=svr-d*(xm(k)-xb(k)*xm(0))/xs(k) 2533 16341 continue 2534 16342 continue 2534 d=0.0 2534 if(intr.ne.0) d=svr/xm(0) 2535 if(d .eq. 0.0)goto 16391 2535 b(0,ic)=b(0,ic)+d 2535 dlx=max(dlx,xm(0)*d**2) 2536 r=r-d*v 2536 svr=svr-d*xm(0) 2537 16391 continue 2538 if(dlx.lt.shr)goto 16332 2538 if(nlp .le. maxit)goto 16411 2538 jerr=-ilm 2538 return 2538 16411 continue 2539 goto 16331 2540 16332 continue 2540 goto 16201 2541 16202 continue 2541 if(jxx.gt.0)goto 16112 2542 if(xm(0)*(b(0,ic)-bs(0,ic))**2.gt.shr) ixx=1 2543 if(ixx .ne. 0)goto 16431 2544 16440 do 16441 j=1,nin 2544 k=m(j) 2545 if(xv(k,ic)*(b(k,ic)-bs(k,ic))**2 .le. shr)goto 16461 2545 ixx=1 2545 goto 16442 2545 16461 continue 2546 16441 continue 2547 16442 continue 2547 16431 continue 2548 sc=b(0,ic)+g(:,ic) 2548 b0=0.0 2549 16470 do 16471 j=1,nin 2549 l=m(j) 2549 jb=ix(l) 2549 je=ix(l+1)-1 2550 sc(jx(jb:je))=sc(jx(jb:je))+b(l,ic)*x(jb:je)/xs(l) 2551 b0=b0-b(l,ic)*xb(l)/xs(l) 2552 16471 continue 2553 16472 continue 2553 sc=min(max(exmn,sc+b0),exmx) 2554 sxp=sxp-q(:,ic) 2555 q(:,ic)=min(max(emin*sxp,exp(sc)),emax*sxp) 2556 sxp=sxp+q(:,ic) 2557 16111 continue 2558 16112 continue 2558 s=-sum(b(0,:))/nc 2558 b(0,:)=b(0,:)+s 2558 sc=s 2558 b0=0.0 2559 16480 do 16481 j=1,nin 2559 l=m(j) 2560 if(vp(l) .gt. 0.0)goto 16501 2560 s=sum(b(l,:))/nc 2560 goto 16511 2561 16501 continue 2561 s=elc(parm,nc,cl(:,l),b(l,:),is) 2561 16511 continue 2562 16491 continue 2562 b(l,:)=b(l,:)-s 2563 jb=ix(l) 2563 je=ix(l+1)-1 2564 sc(jx(jb:je))=sc(jx(jb:je))-s*x(jb:je)/xs(l) 2565 b0=b0+s*xb(l)/xs(l) 2566 16481 continue 2567 16482 continue 2567 sc=sc+b0 2567 sc=exp(sc) 2567 sxp=sxp*sc 2567 16520 do 16521 ic=1,nc 2567 q(:,ic)=q(:,ic)*sc 2567 16521 continue 2568 16522 continue 2568 if(jxx.gt.0)goto 16102 2568 if(ig.eq.0)goto 16102 2569 if(ixx .ne. 0)goto 16541 2570 16550 do 16551 j=1,ni 2570 if(iy(j).eq.1)goto 16551 2570 if(ju(j).eq.0)goto 16551 2570 ga(j)=0.0 2570 16551 continue 2571 16552 continue 2571 16560 do 16561 ic=1,nc 2571 v=q(:,ic)/sxp 2571 r=w*(y(:,ic)-v) 2571 v=w*v*(1.0-v) 2572 16570 do 16571 j=1,ni 2572 if(iy(j).eq.1)goto 16571 2572 if(ju(j).eq.0)goto 16571 2573 jb=ix(j) 2573 je=ix(j+1)-1 2573 jn=ix(j+1)-ix(j) 2574 sc(1:jn)=r(jx(jb:je))+o*v(jx(jb:je)) 2575 gj=dot_product(sc(1:jn),x(jb:je)) 2576 ga(j)=max(ga(j),abs(gj-svr*xb(j))/xs(j)) 2577 16571 continue 2578 16572 continue 2578 16561 continue 2579 16562 continue 2579 16580 do 16581 k=1,ni 2579 if(iy(k).eq.1)goto 16581 2579 if(ju(k).eq.0)goto 16581 2580 if(ga(k) .le. al1*vp(k))goto 16601 2580 iy(k)=1 2580 ixx=1 2580 16601 continue 2581 16581 continue 2582 16582 continue 2582 if(ixx.eq.1) go to 10880 2583 goto 16102 2584 16541 continue 2585 goto 16101 2586 16102 continue 2586 if(jxx .le. 0)goto 16621 2586 jerr=-10000-ilm 2586 goto 16022 2586 16621 continue 2586 devi=0.0 2587 16630 do 16631 ic=1,nc 2588 if(nin.gt.0) a(1:nin,ic,ilm)=b(m(1:nin),ic) 2588 a0(ic,ilm)=b(0,ic) 2589 16640 do 16641 i=1,no 2589 if(y(i,ic).le.0.0)goto 16641 2590 devi=devi-w(i)*y(i,ic)*log(q(i,ic)/sxp(i)) 2591 16641 continue 2592 16642 continue 2592 16631 continue 2593 16632 continue 2593 kin(ilm)=nin 2593 alm(ilm)=al 2593 lmu=ilm 2594 dev(ilm)=(dev1-devi)/dev0 2594 if(ig.eq.0)goto 16022 2595 if(ilm.lt.mnl)goto 16021 2595 if(flmin.ge.1.0)goto 16021 2596 if(nintot(ni,nx,nc,a(1,1,ilm),m,nin,is).gt.ne)goto 16022 2597 if(dev(ilm).gt.devmax)goto 16022 2597 if(dev(ilm)-dev(ilm-1).lt.sml)goto 16022 2598 16021 continue 2599 16022 continue 2599 g=log(q) 2599 16650 do 16651 i=1,no 2599 g(i,:)=g(i,:)-sum(g(i,:))/nc 2599 16651 continue 2600 16652 continue 2600 deallocate(sxp,b,bs,v,r,xv,q,mm,is,xm,sc,ga,iy) 2601 return 2602 end 2603 subroutine lcmodval(nc,nx,a0,ca,ia,nin,x,ix,jx,n,f) 2604 implicit double precision(a-h,o-z) 2605 double precision a0(nc),ca(nx,nc),x(*),f(nc,n) 2605 integer ia(*),ix(*),jx(*) 2606 16660 do 16661 ic=1,nc 2606 f(ic,:)=a0(ic) 2606 16661 continue 2607 16662 continue 2607 16670 do 16671 j=1,nin 2607 k=ia(j) 2607 kb=ix(k) 2607 ke=ix(k+1)-1 2608 16680 do 16681 ic=1,nc 2608 f(ic,jx(kb:ke))=f(ic,jx(kb:ke))+ca(j,ic)*x(kb:ke) 2608 16681 continue 2609 16682 continue 2609 16671 continue 2610 16672 continue 2610 return 2611 end 2612 subroutine coxnet (parm,no,ni,x,y,d,g,w,jd,vp,cl,ne,nx,nlam,flmin, 2614 *ulam,thr, maxit,isd,lmu,ca,ia,nin,dev0,dev,alm,nlp,jerr) implicit double precision(a-h,o-z) 2615 double precision x(no,ni),y(no),d(no),g(no),w(no),vp(ni),ulam(nlam 2616 *) double precision ca(nx,nlam),dev(nlam),alm(nlam),cl(2,ni) 2617 integer jd(*),ia(nx),nin(nlam) 2618 double precision, dimension (:), allocatable :: xs,ww,vq integer, dimension (:), allocatable :: ju if(maxval(vp) .gt. 0.0)goto 16701 2622 jerr=10000 2622 return 2622 16701 continue 2623 allocate(ww(1:no),stat=jerr) 2624 if(jerr.ne.0) return 2625 allocate(ju(1:ni),stat=jerr) 2626 if(jerr.ne.0) return 2627 allocate(vq(1:ni),stat=jerr) 2628 if(jerr.ne.0) return 2629 if(isd .le. 0)goto 16721 2629 allocate(xs(1:ni),stat=jerr) 2629 if(jerr.ne.0) return 2629 16721 continue 2631 call chkvars(no,ni,x,ju) 2632 if(jd(1).gt.0) ju(jd(2:(jd(1)+1)))=0 2633 if(maxval(ju) .gt. 0)goto 16741 2633 jerr=7777 2633 return 2633 16741 continue 2634 vq=max(0d0,vp) 2634 vq=vq*ni/sum(vq) 2635 ww=max(0d0,w) 2635 sw=sum(ww) 2636 if(sw .gt. 0.0)goto 16761 2636 jerr=9999 2636 return 2636 16761 continue 2636 ww=ww/sw 2637 call cstandard(no,ni,x,ww,ju,isd,xs) 2638 if(isd .le. 0)goto 16781 2638 16790 do 16791 j=1,ni 2638 cl(:,j)=cl(:,j)*xs(j) 2638 16791 continue 2638 16792 continue 2638 16781 continue 2639 call coxnet1(parm,no,ni,x,y,d,g,ww,ju,vq,cl,ne,nx,nlam,flmin,ulam, 2641 *thr, isd,maxit,lmu,ca,ia,nin,dev0,dev,alm,nlp,jerr) if(jerr.gt.0) return 2641 dev0=2.0*sw*dev0 2642 if(isd .le. 0)goto 16811 2642 16820 do 16821 k=1,lmu 2642 nk=nin(k) 2642 ca(1:nk,k)=ca(1:nk,k)/xs(ia(1:nk)) 2642 16821 continue 2642 16822 continue 2642 16811 continue 2643 deallocate(ww,ju,vq) 2643 if(isd.gt.0) deallocate(xs) 2644 return 2645 end 2646 subroutine cstandard (no,ni,x,w,ju,isd,xs) 2647 implicit double precision(a-h,o-z) 2648 double precision x(no,ni),w(no),xs(ni) 2648 integer ju(ni) 2649 16830 do 16831 j=1,ni 2649 if(ju(j).eq.0)goto 16831 2650 xm=dot_product(w,x(:,j)) 2650 x(:,j)=x(:,j)-xm 2651 if(isd .le. 0)goto 16851 2651 xs(j)=sqrt(dot_product(w,x(:,j)**2)) 2651 x(:,j)=x(:,j)/xs(j) 2651 16851 continue 2652 16831 continue 2653 16832 continue 2653 return 2654 end 2655 subroutine coxnet1(parm,no,ni,x,y,d,g,q,ju,vp,cl,ne,nx,nlam,flmin, 2657 *ulam,cthri, isd,maxit,lmu,ao,m,kin,dev0,dev,alm,nlp,jerr) implicit double precision(a-h,o-z) 2658 double precision x(no,ni),y(no),q(no),d(no),g(no),vp(ni),ulam(nlam 2659 *) double precision ao(nx,nlam),dev(nlam),alm(nlam),cl(2,ni) 2660 integer ju(ni),m(nx),kin(nlam) 2661 double precision, dimension (:), allocatable :: w,dk,v,xs,wr double precision, dimension (:), allocatable :: a,as,f,dq double precision, dimension (:), allocatable :: e,uu,ga integer, dimension (:), allocatable :: jp,kp,mm,ixx call get_int_parms(sml,eps,big,mnlam,devmax,pmin,exmx) 2668 sml=sml*100.0 2668 devmax=devmax*0.99/0.999 2669 allocate(e(1:no),stat=jerr) 2670 if(jerr.ne.0)go to 12180 2671 allocate(uu(1:no),stat=jerr) 2672 if(jerr.ne.0)go to 12180 2673 allocate(f(1:no),stat=jerr) 2674 if(jerr.ne.0)go to 12180 2675 allocate(w(1:no),stat=jerr) 2676 if(jerr.ne.0)go to 12180 2677 allocate(v(1:ni),stat=jerr) 2678 if(jerr.ne.0)go to 12180 2679 allocate(a(1:ni),stat=jerr) 2680 if(jerr.ne.0)go to 12180 2681 allocate(as(1:ni),stat=jerr) 2682 if(jerr.ne.0)go to 12180 2683 allocate(xs(1:ni),stat=jerr) 2684 if(jerr.ne.0)go to 12180 2685 allocate(ga(1:ni),stat=jerr) 2686 if(jerr.ne.0)go to 12180 2687 allocate(ixx(1:ni),stat=jerr) 2688 if(jerr.ne.0)go to 12180 2689 allocate(jp(1:no),stat=jerr) 2690 if(jerr.ne.0)go to 12180 2691 allocate(kp(1:no),stat=jerr) 2692 if(jerr.ne.0)go to 12180 2693 allocate(dk(1:no),stat=jerr) 2694 if(jerr.ne.0)go to 12180 2695 allocate(wr(1:no),stat=jerr) 2696 if(jerr.ne.0)go to 12180 2697 allocate(dq(1:no),stat=jerr) 2698 if(jerr.ne.0)go to 12180 2699 allocate(mm(1:ni),stat=jerr) 2700 if(jerr.ne.0)go to 12180 2701 call groups(no,y,d,q,nk,kp,jp,t0,jerr) 2702 if(jerr.ne.0) go to 12180 2702 alpha=parm 2703 oma=1.0-alpha 2703 nlm=0 2703 ixx=0 2703 al=0.0 2704 dq=d*q 2704 call died(no,nk,dq,kp,jp,dk) 2705 a=0.0 2705 f(1)=0.0 2705 fmax=log(huge(f(1))*0.1) 2706 if(nonzero(no,g) .eq. 0)goto 16871 2706 f=g-dot_product(q,g) 2707 e=q*exp(sign(min(abs(f),fmax),f)) 2708 goto 16881 2709 16871 continue 2709 f=0.0 2709 e=q 2709 16881 continue 2710 16861 continue 2710 r0=risk(no,ni,nk,dq,dk,f,e,kp,jp,uu) 2711 rr=-(dot_product(dk(1:nk),log(dk(1:nk)))+r0) 2711 dev0=rr 2712 16890 do 16891 i=1,no 2712 if((y(i) .ge. t0) .and. (q(i) .gt. 0.0))goto 16911 2712 w(i)=0.0 2712 wr(i)=w(i) 2712 16911 continue 2712 16891 continue 2713 16892 continue 2713 call outer(no,nk,dq,dk,kp,jp,e,wr,w,jerr,uu) 2714 if(jerr.ne.0) go to 12180 2716 alf=1.0 2718 if(flmin .ge. 1.0)goto 16931 2718 eqs=max(eps,flmin) 2718 alf=eqs**(1.0/(nlam-1)) 2718 16931 continue 2719 m=0 2719 mm=0 2719 nlp=0 2719 nin=nlp 2719 mnl=min(mnlam,nlam) 2719 as=0.0 2719 cthr=cthri*dev0 2720 16940 do 16941 j=1,ni 2720 if(ju(j).eq.0)goto 16941 2720 ga(j)=abs(dot_product(wr,x(:,j))) 2720 16941 continue 2721 16942 continue 2721 16950 do 16951 ilm=1,nlam 2721 al0=al 2722 if(flmin .lt. 1.0)goto 16971 2722 al=ulam(ilm) 2722 goto 16961 2723 16971 if(ilm .le. 2)goto 16981 2723 al=al*alf 2723 goto 16961 2724 16981 if(ilm .ne. 1)goto 16991 2724 al=big 2724 goto 17001 2725 16991 continue 2725 al0=0.0 2726 17010 do 17011 j=1,ni 2726 if(ju(j).eq.0)goto 17011 2726 if(vp(j).gt.0.0) al0=max(al0,ga(j)/vp(j)) 2726 17011 continue 2727 17012 continue 2727 al0=al0/max(parm,1.0d-3) 2727 al=alf*al0 2728 17001 continue 2729 16961 continue 2729 sa=alpha*al 2729 omal=oma*al 2729 tlam=alpha*(2.0*al-al0) 2730 17020 do 17021 k=1,ni 2730 if(ixx(k).eq.1)goto 17021 2730 if(ju(k).eq.0)goto 17021 2731 if(ga(k).gt.tlam*vp(k)) ixx(k)=1 2732 17021 continue 2733 17022 continue 2733 10880 continue 2734 17030 continue 2734 17031 continue 2734 if(nin.gt.0) as(m(1:nin))=a(m(1:nin)) 2735 call vars(no,ni,x,w,ixx,v) 2736 17040 continue 2736 17041 continue 2736 nlp=nlp+1 2736 dli=0.0 2737 17050 do 17051 j=1,ni 2737 if(ixx(j).eq.0)goto 17051 2738 u=a(j)*v(j)+dot_product(wr,x(:,j)) 2739 if(abs(u) .gt. vp(j)*sa)goto 17071 2739 at=0.0 2739 goto 17081 2740 17071 continue 2740 at=max(cl(1,j),min(cl(2,j),sign(abs(u)-vp(j)*sa,u)/ (v(j)+vp(j)*o 2742 *mal))) 17081 continue 2743 17061 continue 2743 if(at .eq. a(j))goto 17101 2743 del=at-a(j) 2743 a(j)=at 2743 dli=max(dli,v(j)*del**2) 2744 wr=wr-del*w*x(:,j) 2744 f=f+del*x(:,j) 2745 if(mm(j) .ne. 0)goto 17121 2745 nin=nin+1 2745 if(nin.gt.nx)goto 17052 2746 mm(j)=nin 2746 m(nin)=j 2747 17121 continue 2748 17101 continue 2749 17051 continue 2750 17052 continue 2750 if(nin.gt.nx)goto 17042 2750 if(dli.lt.cthr)goto 17042 2751 if(nlp .le. maxit)goto 17141 2751 jerr=-ilm 2751 return 2751 17141 continue 2752 17150 continue 2752 17151 continue 2752 nlp=nlp+1 2752 dli=0.0 2753 17160 do 17161 l=1,nin 2753 j=m(l) 2754 u=a(j)*v(j)+dot_product(wr,x(:,j)) 2755 if(abs(u) .gt. vp(j)*sa)goto 17181 2755 at=0.0 2755 goto 17191 2756 17181 continue 2756 at=max(cl(1,j),min(cl(2,j),sign(abs(u)-vp(j)*sa,u)/ (v(j)+vp(j)*o 2758 *mal))) 17191 continue 2759 17171 continue 2759 if(at .eq. a(j))goto 17211 2759 del=at-a(j) 2759 a(j)=at 2759 dli=max(dli,v(j)*del**2) 2760 wr=wr-del*w*x(:,j) 2760 f=f+del*x(:,j) 2761 17211 continue 2762 17161 continue 2763 17162 continue 2763 if(dli.lt.cthr)goto 17152 2763 if(nlp .le. maxit)goto 17231 2763 jerr=-ilm 2763 return 2763 17231 continue 2764 goto 17151 2765 17152 continue 2765 goto 17041 2766 17042 continue 2766 if(nin.gt.nx)goto 17032 2767 e=q*exp(sign(min(abs(f),fmax),f)) 2768 call outer(no,nk,dq,dk,kp,jp,e,wr,w,jerr,uu) 2769 if(jerr .eq. 0)goto 17251 2769 jerr=jerr-ilm 2769 go to 12180 2769 17251 continue 2770 ix=0 2771 17260 do 17261 j=1,nin 2771 k=m(j) 2772 if(v(k)*(a(k)-as(k))**2.lt.cthr)goto 17261 2772 ix=1 2772 goto 17262 2772 17261 continue 2773 17262 continue 2773 if(ix .ne. 0)goto 17281 2774 17290 do 17291 k=1,ni 2774 if(ixx(k).eq.1)goto 17291 2774 if(ju(k).eq.0)goto 17291 2775 ga(k)=abs(dot_product(wr,x(:,k))) 2776 if(ga(k) .le. sa*vp(k))goto 17311 2776 ixx(k)=1 2776 ix=1 2776 17311 continue 2777 17291 continue 2778 17292 continue 2778 if(ix.eq.1) go to 10880 2779 goto 17032 2780 17281 continue 2781 goto 17031 2782 17032 continue 2782 if(nin .le. nx)goto 17331 2782 jerr=-10000-ilm 2782 goto 16952 2782 17331 continue 2783 if(nin.gt.0) ao(1:nin,ilm)=a(m(1:nin)) 2783 kin(ilm)=nin 2784 alm(ilm)=al 2784 lmu=ilm 2785 dev(ilm)=(risk(no,ni,nk,dq,dk,f,e,kp,jp,uu)-r0)/rr 2786 if(ilm.lt.mnl)goto 16951 2786 if(flmin.ge.1.0)goto 16951 2787 me=0 2787 17340 do 17341 j=1,nin 2787 if(ao(j,ilm).ne.0.0) me=me+1 2787 17341 continue 2787 17342 continue 2787 if(me.gt.ne)goto 16952 2788 if((dev(ilm)-dev(ilm-mnl+1))/dev(ilm).lt.sml)goto 16952 2789 if(dev(ilm).gt.devmax)goto 16952 2790 16951 continue 2791 16952 continue 2791 g=f 2792 12180 continue 2792 deallocate(e,uu,w,dk,v,xs,f,wr,a,as,jp,kp,dq,mm,ga,ixx) 2793 return 2794 end 2795 subroutine cxmodval(ca,ia,nin,n,x,f) 2796 implicit double precision(a-h,o-z) 2797 double precision ca(nin),x(n,*),f(n) 2797 integer ia(nin) 2798 f=0.0 2798 if(nin.le.0) return 2799 17350 do 17351 i=1,n 2799 f(i)=f(i)+dot_product(ca(1:nin),x(i,ia(1:nin))) 2799 17351 continue 2800 17352 continue 2800 return 2801 end 2802 subroutine groups(no,y,d,q,nk,kp,jp,t0,jerr) 2803 implicit double precision(a-h,o-z) 2804 double precision y(no),d(no),q(no) 2804 integer jp(no),kp(*) 2805 17360 do 17361 j=1,no 2805 jp(j)=j 2805 17361 continue 2805 17362 continue 2805 call psort7(y,jp,1,no) 2806 nj=0 2806 17370 do 17371 j=1,no 2806 if(q(jp(j)).le.0.0)goto 17371 2806 nj=nj+1 2806 jp(nj)=jp(j) 2806 17371 continue 2807 17372 continue 2807 if(nj .ne. 0)goto 17391 2807 jerr=20000 2807 return 2807 17391 continue 2808 j=1 2808 17400 continue 2808 17401 if(d(jp(j)).gt.0.0)goto 17402 2808 j=j+1 2808 if(j.gt.nj)goto 17402 2808 goto 17401 2809 17402 continue 2809 if(j .lt. nj-1)goto 17421 2809 jerr=30000 2809 return 2809 17421 continue 2810 t0=y(jp(j)) 2810 j0=j-1 2811 if(j0 .le. 0)goto 17441 2812 17450 continue 2812 17451 if(y(jp(j0)).lt.t0)goto 17452 2812 j0=j0-1 2812 if(j0.eq.0)goto 17452 2812 goto 17451 2813 17452 continue 2813 if(j0 .le. 0)goto 17471 2813 nj=nj-j0 2813 17480 do 17481 j=1,nj 2813 jp(j)=jp(j+j0) 2813 17481 continue 2813 17482 continue 2813 17471 continue 2814 17441 continue 2815 jerr=0 2815 nk=0 2815 yk=t0 2815 j=2 2816 17490 continue 2816 17491 continue 2816 17500 continue 2817 17501 if(d(jp(j)).gt.0.0.and.y(jp(j)).gt.yk)goto 17502 2817 j=j+1 2817 if(j.gt.nj)goto 17502 2817 goto 17501 2818 17502 continue 2818 nk=nk+1 2818 kp(nk)=j-1 2818 if(j.gt.nj)goto 17492 2819 if(j .ne. nj)goto 17521 2819 nk=nk+1 2819 kp(nk)=nj 2819 goto 17492 2819 17521 continue 2820 yk=y(jp(j)) 2820 j=j+1 2821 goto 17491 2822 17492 continue 2822 return 2823 end 2824 subroutine outer(no,nk,d,dk,kp,jp,e,wr,w,jerr,u) 2825 implicit double precision(a-h,o-z) 2826 double precision d(no),dk(nk),wr(no),w(no) 2827 double precision e(no),u(no),b,c 2827 integer kp(nk),jp(no) 2828 call usk(no,nk,kp,jp,e,u) 2829 b=dk(1)/u(1) 2829 c=dk(1)/u(1)**2 2829 jerr=0 2830 17530 do 17531 j=1,kp(1) 2830 i=jp(j) 2831 w(i)=e(i)*(b-e(i)*c) 2831 if(w(i) .gt. 0.0)goto 17551 2831 jerr=-30000 2831 return 2831 17551 continue 2832 wr(i)=d(i)-e(i)*b 2833 17531 continue 2834 17532 continue 2834 17560 do 17561 k=2,nk 2834 j1=kp(k-1)+1 2834 j2=kp(k) 2835 b=b+dk(k)/u(k) 2835 c=c+dk(k)/u(k)**2 2836 17570 do 17571 j=j1,j2 2836 i=jp(j) 2837 w(i)=e(i)*(b-e(i)*c) 2837 if(w(i) .gt. 0.0)goto 17591 2837 jerr=-30000 2837 return 2837 17591 continue 2838 wr(i)=d(i)-e(i)*b 2839 17571 continue 2840 17572 continue 2840 17561 continue 2841 17562 continue 2841 return 2842 end 2843 subroutine vars(no,ni,x,w,ixx,v) 2844 implicit double precision(a-h,o-z) 2845 double precision x(no,ni),w(no),v(ni) 2845 integer ixx(ni) 2846 17600 do 17601 j=1,ni 2846 if(ixx(j).gt.0) v(j)=dot_product(w,x(:,j)**2) 2846 17601 continue 2847 17602 continue 2847 return 2848 end 2849 subroutine died(no,nk,d,kp,jp,dk) 2850 implicit double precision(a-h,o-z) 2851 double precision d(no),dk(nk) 2851 integer kp(nk),jp(no) 2852 dk(1)=sum(d(jp(1:kp(1)))) 2853 17610 do 17611 k=2,nk 2853 dk(k)=sum(d(jp((kp(k-1)+1):kp(k)))) 2853 17611 continue 2854 17612 continue 2854 return 2855 end 2856 subroutine usk(no,nk,kp,jp,e,u) 2857 implicit double precision(a-h,o-z) 2858 double precision e(no),u(nk),h 2858 integer kp(nk),jp(no) 2859 h=0.0 2860 17620 do 17621 k=nk,1,-1 2860 j2=kp(k) 2861 j1=1 2861 if(k.gt.1) j1=kp(k-1)+1 2862 17630 do 17631 j=j2,j1,-1 2862 h=h+e(jp(j)) 2862 17631 continue 2863 17632 continue 2863 u(k)=h 2864 17621 continue 2865 17622 continue 2865 return 2866 end 2867 function risk(no,ni,nk,d,dk,f,e,kp,jp,u) 2868 implicit double precision(a-h,o-z) 2869 double precision d(no),dk(nk),f(no) 2870 integer kp(nk),jp(no) 2870 double precision e(no),u(nk),s 2871 call usk(no,nk,kp,jp,e,u) 2871 u=log(u) 2872 risk=dot_product(d,f)-dot_product(dk,u) 2873 return 2874 end 2875 subroutine loglike(no,ni,x,y,d,g,w,nlam,a,flog,jerr) 2876 implicit double precision(a-h,o-z) 2877 double precision x(no,ni),y(no),d(no),g(no),w(no),a(ni,nlam),flog( 2878 *nlam) double precision, dimension (:), allocatable :: dk,f,xm,dq,q double precision, dimension (:), allocatable :: e,uu integer, dimension (:), allocatable :: jp,kp allocate(e(1:no),stat=jerr) 2884 if(jerr.ne.0) go to 12180 2885 allocate(q(1:no),stat=jerr) 2886 if(jerr.ne.0) go to 12180 2887 allocate(uu(1:no),stat=jerr) 2888 if(jerr.ne.0) go to 12180 2889 allocate(f(1:no),stat=jerr) 2890 if(jerr.ne.0) go to 12180 2891 allocate(dk(1:no),stat=jerr) 2892 if(jerr.ne.0) go to 12180 2893 allocate(jp(1:no),stat=jerr) 2894 if(jerr.ne.0) go to 12180 2895 allocate(kp(1:no),stat=jerr) 2896 if(jerr.ne.0) go to 12180 2897 allocate(dq(1:no),stat=jerr) 2898 if(jerr.ne.0) go to 12180 2899 allocate(xm(1:ni),stat=jerr) 2900 if(jerr.ne.0) go to 12180 2901 q=max(0d0,w) 2901 sw=sum(q) 2902 if(sw .gt. 0.0)goto 17651 2902 jerr=9999 2902 go to 12180 2902 17651 continue 2903 call groups(no,y,d,q,nk,kp,jp,t0,jerr) 2904 if(jerr.ne.0) go to 12180 2904 fmax=log(huge(e(1))*0.1) 2905 dq=d*q 2905 call died(no,nk,dq,kp,jp,dk) 2905 gm=dot_product(q,g)/sw 2906 17660 do 17661 j=1,ni 2906 xm(j)=dot_product(q,x(:,j))/sw 2906 17661 continue 2907 17662 continue 2907 17670 do 17671 lam=1,nlam 2908 17680 do 17681 i=1,no 2908 f(i)=g(i)-gm+dot_product(a(:,lam),(x(i,:)-xm)) 2909 e(i)=q(i)*exp(sign(min(abs(f(i)),fmax),f(i))) 2910 17681 continue 2911 17682 continue 2911 flog(lam)=risk(no,ni,nk,dq,dk,f,e,kp,jp,uu) 2912 17671 continue 2913 17672 continue 2913 12180 continue 2913 deallocate(e,uu,dk,f,jp,kp,dq) 2914 return 2915 end 2916 subroutine fishnet (parm,no,ni,x,y,g,w,jd,vp,cl,ne,nx,nlam,flmin,u 2918 *lam,thr, isd,intr,maxit,lmu,a0,ca,ia,nin,dev0,dev,alm,nlp,jerr) implicit double precision(a-h,o-z) 2919 double precision x(no,ni),y(no),g(no),w(no),vp(ni),ulam(nlam) 2920 double precision ca(nx,nlam),a0(nlam),dev(nlam),alm(nlam),cl(2,ni) 2921 integer jd(*),ia(nx),nin(nlam) 2922 double precision, dimension (:), allocatable :: xm,xs,ww,vq integer, dimension (:), allocatable :: ju if(maxval(vp) .gt. 0.0)goto 17701 2926 jerr=10000 2926 return 2926 17701 continue 2927 if(minval(y) .ge. 0.0)goto 17721 2927 jerr=8888 2927 return 2927 17721 continue 2928 allocate(ww(1:no),stat=jerr) 2929 if(jerr.ne.0) return 2930 allocate(ju(1:ni),stat=jerr) 2931 if(jerr.ne.0) return 2932 allocate(vq(1:ni),stat=jerr) 2933 if(jerr.ne.0) return 2934 allocate(xm(1:ni),stat=jerr) 2935 if(jerr.ne.0) return 2936 if(isd .le. 0)goto 17741 2936 allocate(xs(1:ni),stat=jerr) 2936 if(jerr.ne.0) return 2936 17741 continue 2937 call chkvars(no,ni,x,ju) 2938 if(jd(1).gt.0) ju(jd(2:(jd(1)+1)))=0 2939 if(maxval(ju) .gt. 0)goto 17761 2939 jerr=7777 2939 go to 12180 2939 17761 continue 2940 vq=max(0d0,vp) 2940 vq=vq*ni/sum(vq) 2941 ww=max(0d0,w) 2941 sw=sum(ww) 2941 if(sw .gt. 0.0)goto 17781 2941 jerr=9999 2941 go to 12180 2941 17781 continue 2942 ww=ww/sw 2943 call lstandard1(no,ni,x,ww,ju,isd,intr,xm,xs) 2944 if(isd .le. 0)goto 17801 2944 17810 do 17811 j=1,ni 2944 cl(:,j)=cl(:,j)*xs(j) 2944 17811 continue 2944 17812 continue 2944 17801 continue 2945 call fishnet1(parm,no,ni,x,y,g,ww,ju,vq,cl,ne,nx,nlam,flmin,ulam,t 2947 *hr, isd,intr,maxit,lmu,a0,ca,ia,nin,dev0,dev,alm,nlp,jerr) if(jerr.gt.0) go to 12180 2947 dev0=2.0*sw*dev0 2948 17820 do 17821 k=1,lmu 2948 nk=nin(k) 2949 if(isd.gt.0) ca(1:nk,k)=ca(1:nk,k)/xs(ia(1:nk)) 2950 if(intr .ne. 0)goto 17841 2950 a0(k)=0.0 2950 goto 17851 2951 17841 continue 2951 a0(k)=a0(k)-dot_product(ca(1:nk,k),xm(ia(1:nk))) 2951 17851 continue 2952 17831 continue 2952 17821 continue 2953 17822 continue 2953 12180 continue 2953 deallocate(ww,ju,vq,xm) 2953 if(isd.gt.0) deallocate(xs) 2954 return 2955 end 2956 subroutine fishnet1(parm,no,ni,x,y,g,q,ju,vp,cl,ne,nx,nlam,flmin,u 2958 *lam,shri, isd,intr,maxit,lmu,a0,ca,m,kin,dev0,dev,alm,nlp,jerr) implicit double precision(a-h,o-z) 2959 double precision x(no,ni),y(no),g(no),q(no),vp(ni),ulam(nlam) 2960 double precision ca(nx,nlam),a0(nlam),dev(nlam),alm(nlam),cl(2,ni) 2961 integer ju(ni),m(nx),kin(nlam) 2962 double precision, dimension (:), allocatable :: t,w,wr,v,a,f,as,ga integer, dimension (:), allocatable :: mm,ixx call get_int_parms(sml,eps,big,mnlam,devmax,pmin,exmx) 2966 sml=sml*10.0 2967 allocate(a(1:ni),stat=jerr) 2968 if(jerr.ne.0) return 2969 allocate(as(1:ni),stat=jerr) 2970 if(jerr.ne.0) return 2971 allocate(t(1:no),stat=jerr) 2972 if(jerr.ne.0) return 2973 allocate(mm(1:ni),stat=jerr) 2974 if(jerr.ne.0) return 2975 allocate(ga(1:ni),stat=jerr) 2976 if(jerr.ne.0) return 2977 allocate(ixx(1:ni),stat=jerr) 2978 if(jerr.ne.0) return 2979 allocate(wr(1:no),stat=jerr) 2980 if(jerr.ne.0) return 2981 allocate(v(1:ni),stat=jerr) 2982 if(jerr.ne.0) return 2983 allocate(w(1:no),stat=jerr) 2984 if(jerr.ne.0) return 2985 allocate(f(1:no),stat=jerr) 2986 if(jerr.ne.0) return 2987 bta=parm 2987 omb=1.0-bta 2988 t=q*y 2988 yb=sum(t) 2988 fmax=log(huge(bta)*0.1) 2989 if(nonzero(no,g) .ne. 0)goto 17871 2990 if(intr .eq. 0)goto 17891 2990 w=q*yb 2990 az=log(yb) 2990 f=az 2990 dv0=yb*(az-1.0) 2990 goto 17901 2991 17891 continue 2991 w=q 2991 az=0.0 2991 f=az 2991 dv0=-1.0 2991 17901 continue 2992 17881 continue 2992 goto 17911 2993 17871 continue 2993 w=q*exp(sign(min(abs(g),fmax),g)) 2993 v0=sum(w) 2994 if(intr .eq. 0)goto 17931 2994 eaz=yb/v0 2994 w=eaz*w 2994 az=log(eaz) 2994 f=az+g 2995 dv0=dot_product(t,g)-yb*(1.0-az) 2996 goto 17941 2997 17931 continue 2997 az=0.0 2997 f=g 2997 dv0=dot_product(t,g)-v0 2997 17941 continue 2998 17921 continue 2998 17911 continue 2999 17861 continue 2999 a=0.0 2999 as=0.0 2999 wr=t-w 2999 v0=1.0 2999 if(intr.ne.0) v0=yb 2999 dvr=-yb 3000 17950 do 17951 i=1,no 3000 if(t(i).gt.0.0) dvr=dvr+t(i)*log(y(i)) 3000 17951 continue 3000 17952 continue 3000 dvr=dvr-dv0 3000 dev0=dvr 3002 alf=1.0 3004 if(flmin .ge. 1.0)goto 17971 3004 eqs=max(eps,flmin) 3004 alf=eqs**(1.0/(nlam-1)) 3004 17971 continue 3005 m=0 3005 mm=0 3005 nlp=0 3005 nin=nlp 3005 mnl=min(mnlam,nlam) 3005 shr=shri*dev0 3005 ixx=0 3005 al=0.0 3006 17980 do 17981 j=1,ni 3006 if(ju(j).eq.0)goto 17981 3006 ga(j)=abs(dot_product(wr,x(:,j))) 3006 17981 continue 3007 17982 continue 3007 17990 do 17991 ilm=1,nlam 3007 al0=al 3008 if(flmin .lt. 1.0)goto 18011 3008 al=ulam(ilm) 3008 goto 18001 3009 18011 if(ilm .le. 2)goto 18021 3009 al=al*alf 3009 goto 18001 3010 18021 if(ilm .ne. 1)goto 18031 3010 al=big 3010 goto 18041 3011 18031 continue 3011 al0=0.0 3012 18050 do 18051 j=1,ni 3012 if(ju(j).eq.0)goto 18051 3012 if(vp(j).gt.0.0) al0=max(al0,ga(j)/vp(j)) 3012 18051 continue 3013 18052 continue 3013 al0=al0/max(bta,1.0d-3) 3013 al=alf*al0 3014 18041 continue 3015 18001 continue 3015 al2=al*omb 3015 al1=al*bta 3015 tlam=bta*(2.0*al-al0) 3016 18060 do 18061 k=1,ni 3016 if(ixx(k).eq.1)goto 18061 3016 if(ju(k).eq.0)goto 18061 3017 if(ga(k).gt.tlam*vp(k)) ixx(k)=1 3018 18061 continue 3019 18062 continue 3019 10880 continue 3020 18070 continue 3020 18071 continue 3020 az0=az 3021 if(nin.gt.0) as(m(1:nin))=a(m(1:nin)) 3022 18080 do 18081 j=1,ni 3022 if(ixx(j).ne.0) v(j)=dot_product(w,x(:,j)**2) 3022 18081 continue 3023 18082 continue 3023 18090 continue 3023 18091 continue 3023 nlp=nlp+1 3023 dlx=0.0 3024 18100 do 18101 k=1,ni 3024 if(ixx(k).eq.0)goto 18101 3024 ak=a(k) 3025 u=dot_product(wr,x(:,k))+v(k)*ak 3025 au=abs(u)-vp(k)*al1 3026 if(au .gt. 0.0)goto 18121 3026 a(k)=0.0 3026 goto 18131 3027 18121 continue 3028 a(k)=max(cl(1,k),min(cl(2,k),sign(au,u)/(v(k)+vp(k)*al2))) 3029 18131 continue 3030 18111 continue 3030 if(a(k).eq.ak)goto 18101 3030 d=a(k)-ak 3030 dlx=max(dlx,v(k)*d**2) 3031 wr=wr-d*w*x(:,k) 3031 f=f+d*x(:,k) 3032 if(mm(k) .ne. 0)goto 18151 3032 nin=nin+1 3032 if(nin.gt.nx)goto 18102 3033 mm(k)=nin 3033 m(nin)=k 3034 18151 continue 3035 18101 continue 3036 18102 continue 3036 if(nin.gt.nx)goto 18092 3037 if(intr .eq. 0)goto 18171 3037 d=sum(wr)/v0 3038 az=az+d 3038 dlx=max(dlx,v0*d**2) 3038 wr=wr-d*w 3038 f=f+d 3039 18171 continue 3040 if(dlx.lt.shr)goto 18092 3040 if(nlp .le. maxit)goto 18191 3040 jerr=-ilm 3040 return 3040 18191 continue 3041 18200 continue 3041 18201 continue 3041 nlp=nlp+1 3041 dlx=0.0 3042 18210 do 18211 l=1,nin 3042 k=m(l) 3042 ak=a(k) 3043 u=dot_product(wr,x(:,k))+v(k)*ak 3043 au=abs(u)-vp(k)*al1 3044 if(au .gt. 0.0)goto 18231 3044 a(k)=0.0 3044 goto 18241 3045 18231 continue 3046 a(k)=max(cl(1,k),min(cl(2,k),sign(au,u)/(v(k)+vp(k)*al2))) 3047 18241 continue 3048 18221 continue 3048 if(a(k).eq.ak)goto 18211 3048 d=a(k)-ak 3048 dlx=max(dlx,v(k)*d**2) 3049 wr=wr-d*w*x(:,k) 3049 f=f+d*x(:,k) 3051 18211 continue 3051 18212 continue 3051 if(intr .eq. 0)goto 18261 3051 d=sum(wr)/v0 3051 az=az+d 3052 dlx=max(dlx,v0*d**2) 3052 wr=wr-d*w 3052 f=f+d 3053 18261 continue 3054 if(dlx.lt.shr)goto 18202 3054 if(nlp .le. maxit)goto 18281 3054 jerr=-ilm 3054 return 3054 18281 continue 3055 goto 18201 3056 18202 continue 3056 goto 18091 3057 18092 continue 3057 if(nin.gt.nx)goto 18072 3058 w=q*exp(sign(min(abs(f),fmax),f)) 3058 v0=sum(w) 3058 wr=t-w 3059 if(v0*(az-az0)**2 .ge. shr)goto 18301 3059 ix=0 3060 18310 do 18311 j=1,nin 3060 k=m(j) 3061 if(v(k)*(a(k)-as(k))**2.lt.shr)goto 18311 3061 ix=1 3061 goto 18312 3062 18311 continue 3063 18312 continue 3063 if(ix .ne. 0)goto 18331 3064 18340 do 18341 k=1,ni 3064 if(ixx(k).eq.1)goto 18341 3064 if(ju(k).eq.0)goto 18341 3065 ga(k)=abs(dot_product(wr,x(:,k))) 3066 if(ga(k) .le. al1*vp(k))goto 18361 3066 ixx(k)=1 3066 ix=1 3066 18361 continue 3067 18341 continue 3068 18342 continue 3068 if(ix.eq.1) go to 10880 3069 goto 18072 3070 18331 continue 3071 18301 continue 3072 goto 18071 3073 18072 continue 3073 if(nin .le. nx)goto 18381 3073 jerr=-10000-ilm 3073 goto 17992 3073 18381 continue 3074 if(nin.gt.0) ca(1:nin,ilm)=a(m(1:nin)) 3074 kin(ilm)=nin 3075 a0(ilm)=az 3075 alm(ilm)=al 3075 lmu=ilm 3076 dev(ilm)=(dot_product(t,f)-v0-dv0)/dvr 3077 if(ilm.lt.mnl)goto 17991 3077 if(flmin.ge.1.0)goto 17991 3078 me=0 3078 18390 do 18391 j=1,nin 3078 if(ca(j,ilm).ne.0.0) me=me+1 3078 18391 continue 3078 18392 continue 3078 if(me.gt.ne)goto 17992 3079 if((dev(ilm)-dev(ilm-mnl+1))/dev(ilm).lt.sml)goto 17992 3080 if(dev(ilm).gt.devmax)goto 17992 3081 17991 continue 3082 17992 continue 3082 g=f 3083 12180 continue 3083 deallocate(t,w,wr,v,a,f,as,mm,ga,ixx) 3084 return 3085 end 3086 function nonzero(n,v) 3087 implicit double precision(a-h,o-z) 3088 double precision v(n) 3089 nonzero=0 3089 18400 do 18401 i=1,n 3089 if(v(i) .eq. 0.0)goto 18421 3089 nonzero=1 3089 return 3089 18421 continue 3089 18401 continue 3090 18402 continue 3090 return 3091 end 3092 subroutine solns(ni,nx,lmu,a,ia,nin,b) 3093 implicit double precision(a-h,o-z) 3094 double precision a(nx,lmu),b(ni,lmu) 3094 integer ia(nx),nin(lmu) 3095 18430 do 18431 lam=1,lmu 3095 call uncomp(ni,a(:,lam),ia,nin(lam),b(:,lam)) 3095 18431 continue 3096 18432 continue 3096 return 3097 end 3098 subroutine lsolns(ni,nx,nc,lmu,a,ia,nin,b) 3099 implicit double precision(a-h,o-z) 3100 double precision a(nx,nc,lmu),b(ni,nc,lmu) 3100 integer ia(nx),nin(lmu) 3101 18440 do 18441 lam=1,lmu 3101 call luncomp(ni,nx,nc,a(1,1,lam),ia,nin(lam),b(1,1,lam)) 3101 18441 continue 3102 18442 continue 3102 return 3103 end 3104 subroutine deviance(no,ni,x,y,g,q,nlam,a0,a,flog,jerr) 3105 implicit double precision(a-h,o-z) 3106 double precision x(no,ni),y(no),g(no),q(no),a(ni,nlam),a0(nlam),fl 3107 *og(nlam) double precision, dimension (:), allocatable :: w if(minval(y) .ge. 0.0)goto 18461 3110 jerr=8888 3110 return 3110 18461 continue 3111 allocate(w(1:no),stat=jerr) 3111 if(jerr.ne.0) return 3112 w=max(0d0,q) 3112 sw=sum(w) 3112 if(sw .gt. 0.0)goto 18481 3112 jerr=9999 3112 go to 12180 3112 18481 continue 3113 yb=dot_product(w,y)/sw 3113 fmax=log(huge(y(1))*0.1) 3114 18490 do 18491 lam=1,nlam 3114 s=0.0 3115 18500 do 18501 i=1,no 3115 if(w(i).le.0.0)goto 18501 3116 f=g(i)+a0(lam)+dot_product(a(:,lam),x(i,:)) 3117 s=s+w(i)*(y(i)*f-exp(sign(min(abs(f),fmax),f))) 3118 18501 continue 3119 18502 continue 3119 flog(lam)=2.0*(sw*yb*(log(yb)-1.0)-s) 3120 18491 continue 3121 18492 continue 3121 12180 continue 3121 deallocate(w) 3122 return 3123 end 3124 subroutine spfishnet (parm,no,ni,x,ix,jx,y,g,w,jd,vp,cl,ne,nx,nlam 3126 *,flmin, ulam,thr,isd,intr,maxit,lmu,a0,ca,ia,nin,dev0,dev,alm,nlp *,jerr) implicit double precision(a-h,o-z) 3127 double precision x(*),y(no),g(no),w(no),vp(ni),ulam(nlam),cl(2,ni) 3128 double precision ca(nx,nlam),a0(nlam),dev(nlam),alm(nlam) 3129 integer ix(*),jx(*),jd(*),ia(nx),nin(nlam) 3130 double precision, dimension (:), allocatable :: xm,xs,ww,vq integer, dimension (:), allocatable :: ju if(maxval(vp) .gt. 0.0)goto 18521 3134 jerr=10000 3134 return 3134 18521 continue 3135 if(minval(y) .ge. 0.0)goto 18541 3135 jerr=8888 3135 return 3135 18541 continue 3136 allocate(ww(1:no),stat=jerr) 3137 if(jerr.ne.0) return 3138 allocate(ju(1:ni),stat=jerr) 3139 if(jerr.ne.0) return 3140 allocate(vq(1:ni),stat=jerr) 3141 if(jerr.ne.0) return 3142 allocate(xm(1:ni),stat=jerr) 3143 if(jerr.ne.0) return 3144 allocate(xs(1:ni),stat=jerr) 3145 if(jerr.ne.0) return 3146 call spchkvars(no,ni,x,ix,ju) 3147 if(jd(1).gt.0) ju(jd(2:(jd(1)+1)))=0 3148 if(maxval(ju) .gt. 0)goto 18561 3148 jerr=7777 3148 go to 12180 3148 18561 continue 3149 vq=max(0d0,vp) 3149 vq=vq*ni/sum(vq) 3150 ww=max(0d0,w) 3150 sw=sum(ww) 3150 if(sw .gt. 0.0)goto 18581 3150 jerr=9999 3150 go to 12180 3150 18581 continue 3151 ww=ww/sw 3152 call splstandard2(no,ni,x,ix,jx,ww,ju,isd,intr,xm,xs) 3153 if(isd .le. 0)goto 18601 3153 18610 do 18611 j=1,ni 3153 cl(:,j)=cl(:,j)*xs(j) 3153 18611 continue 3153 18612 continue 3153 18601 continue 3154 call spfishnet1(parm,no,ni,x,ix,jx,y,g,ww,ju,vq,cl,ne,nx,nlam,flmi 3156 *n,ulam,thr, isd,intr,maxit,xm,xs,lmu,a0,ca,ia,nin,dev0,dev,alm,nl *p,jerr) if(jerr.gt.0) go to 12180 3156 dev0=2.0*sw*dev0 3157 18620 do 18621 k=1,lmu 3157 nk=nin(k) 3158 if(isd.gt.0) ca(1:nk,k)=ca(1:nk,k)/xs(ia(1:nk)) 3159 if(intr .ne. 0)goto 18641 3159 a0(k)=0.0 3159 goto 18651 3160 18641 continue 3160 a0(k)=a0(k)-dot_product(ca(1:nk,k),xm(ia(1:nk))) 3160 18651 continue 3161 18631 continue 3161 18621 continue 3162 18622 continue 3162 12180 continue 3162 deallocate(ww,ju,vq,xm,xs) 3163 return 3164 end 3165 subroutine spfishnet1(parm,no,ni,x,ix,jx,y,g,q,ju,vp,cl,ne,nx,nlam 3167 *,flmin,ulam, shri,isd,intr,maxit,xb,xs,lmu,a0,ca,m,kin,dev0,dev,a *lm,nlp,jerr) implicit double precision(a-h,o-z) 3168 double precision x(*),y(no),g(no),q(no),vp(ni),ulam(nlam),xb(ni),x 3169 *s(ni) double precision ca(nx,nlam),a0(nlam),dev(nlam),alm(nlam),cl(2,ni) 3170 integer ix(*),jx(*),ju(ni),m(nx),kin(nlam) 3171 double precision, dimension (:), allocatable :: qy,t,w,wr,v double precision, dimension (:), allocatable :: a,as,xm,ga integer, dimension (:), allocatable :: mm,ixx call get_int_parms(sml,eps,big,mnlam,devmax,pmin,exmx) 3176 sml=sml*10.0 3177 allocate(a(1:ni),stat=jerr) 3178 if(jerr.ne.0) return 3179 allocate(as(1:ni),stat=jerr) 3180 if(jerr.ne.0) return 3181 allocate(t(1:no),stat=jerr) 3182 if(jerr.ne.0) return 3183 allocate(mm(1:ni),stat=jerr) 3184 if(jerr.ne.0) return 3185 allocate(ga(1:ni),stat=jerr) 3186 if(jerr.ne.0) return 3187 allocate(ixx(1:ni),stat=jerr) 3188 if(jerr.ne.0) return 3189 allocate(wr(1:no),stat=jerr) 3190 if(jerr.ne.0) return 3191 allocate(v(1:ni),stat=jerr) 3192 if(jerr.ne.0) return 3193 allocate(xm(1:ni),stat=jerr) 3194 if(jerr.ne.0) return 3195 allocate(w(1:no),stat=jerr) 3196 if(jerr.ne.0) return 3197 allocate(qy(1:no),stat=jerr) 3198 if(jerr.ne.0) return 3199 bta=parm 3199 omb=1.0-bta 3199 fmax=log(huge(bta)*0.1) 3200 qy=q*y 3200 yb=sum(qy) 3201 if(nonzero(no,g) .ne. 0)goto 18671 3201 t=0.0 3202 if(intr .eq. 0)goto 18691 3202 w=q*yb 3202 az=log(yb) 3202 uu=az 3203 xm=yb*xb 3203 dv0=yb*(az-1.0) 3204 goto 18701 3205 18691 continue 3205 w=q 3205 xm=0.0 3205 uu=0.0 3205 az=uu 3205 dv0=-1.0 3205 18701 continue 3206 18681 continue 3206 goto 18711 3207 18671 continue 3207 w=q*exp(sign(min(abs(g),fmax),g)) 3207 ww=sum(w) 3207 t=g 3208 if(intr .eq. 0)goto 18731 3208 eaz=yb/ww 3209 w=eaz*w 3209 az=log(eaz) 3209 uu=az 3209 dv0=dot_product(qy,g)-yb*(1.0-az) 3210 goto 18741 3211 18731 continue 3211 uu=0.0 3211 az=uu 3211 dv0=dot_product(qy,g)-ww 3211 18741 continue 3212 18721 continue 3212 18750 do 18751 j=1,ni 3212 if(ju(j).eq.0)goto 18751 3212 jb=ix(j) 3212 je=ix(j+1)-1 3213 xm(j)=dot_product(w(jx(jb:je)),x(jb:je)) 3214 18751 continue 3215 18752 continue 3215 18711 continue 3216 18661 continue 3216 tt=yb*uu 3216 ww=1.0 3216 if(intr.ne.0) ww=yb 3216 wr=qy-q*(yb*(1.0-uu)) 3216 a=0.0 3216 as=0.0 3217 dvr=-yb 3218 18760 do 18761 i=1,no 3218 if(qy(i).gt.0.0) dvr=dvr+qy(i)*log(y(i)) 3218 18761 continue 3218 18762 continue 3218 dvr=dvr-dv0 3218 dev0=dvr 3220 alf=1.0 3222 if(flmin .ge. 1.0)goto 18781 3222 eqs=max(eps,flmin) 3222 alf=eqs**(1.0/(nlam-1)) 3222 18781 continue 3223 m=0 3223 mm=0 3223 nlp=0 3223 nin=nlp 3223 mnl=min(mnlam,nlam) 3223 shr=shri*dev0 3223 al=0.0 3223 ixx=0 3224 18790 do 18791 j=1,ni 3224 if(ju(j).eq.0)goto 18791 3225 jb=ix(j) 3225 je=ix(j+1)-1 3226 ga(j)=abs(dot_product(wr(jx(jb:je)),x(jb:je)) -uu*(xm(j)-ww*xb(j) 3228 *)-xb(j)*tt)/xs(j) 18791 continue 3229 18792 continue 3229 18800 do 18801 ilm=1,nlam 3229 al0=al 3230 if(flmin .lt. 1.0)goto 18821 3230 al=ulam(ilm) 3230 goto 18811 3231 18821 if(ilm .le. 2)goto 18831 3231 al=al*alf 3231 goto 18811 3232 18831 if(ilm .ne. 1)goto 18841 3232 al=big 3232 goto 18851 3233 18841 continue 3233 al0=0.0 3234 18860 do 18861 j=1,ni 3234 if(ju(j).eq.0)goto 18861 3234 if(vp(j).gt.0.0) al0=max(al0,ga(j)/vp(j)) 3234 18861 continue 3235 18862 continue 3235 al0=al0/max(bta,1.0d-3) 3235 al=alf*al0 3236 18851 continue 3237 18811 continue 3237 al2=al*omb 3237 al1=al*bta 3237 tlam=bta*(2.0*al-al0) 3238 18870 do 18871 k=1,ni 3238 if(ixx(k).eq.1)goto 18871 3238 if(ju(k).eq.0)goto 18871 3239 if(ga(k).gt.tlam*vp(k)) ixx(k)=1 3240 18871 continue 3241 18872 continue 3241 10880 continue 3242 18880 continue 3242 18881 continue 3242 az0=az 3243 if(nin.gt.0) as(m(1:nin))=a(m(1:nin)) 3244 18890 do 18891 j=1,ni 3244 if(ixx(j).eq.0)goto 18891 3244 jb=ix(j) 3244 je=ix(j+1)-1 3245 xm(j)=dot_product(w(jx(jb:je)),x(jb:je)) 3246 v(j)=(dot_product(w(jx(jb:je)),x(jb:je)**2) -2.0*xb(j)*xm(j)+ww*x 3248 *b(j)**2)/xs(j)**2 18891 continue 3249 18892 continue 3249 18900 continue 3249 18901 continue 3249 nlp=nlp+1 3250 dlx=0.0 3251 18910 do 18911 k=1,ni 3251 if(ixx(k).eq.0)goto 18911 3251 jb=ix(k) 3251 je=ix(k+1)-1 3251 ak=a(k) 3252 u=(dot_product(wr(jx(jb:je)),x(jb:je)) -uu*(xm(k)-ww*xb(k))-xb(k) 3254 **tt)/xs(k)+v(k)*ak au=abs(u)-vp(k)*al1 3255 if(au .gt. 0.0)goto 18931 3255 a(k)=0.0 3255 goto 18941 3256 18931 continue 3257 a(k)=max(cl(1,k),min(cl(2,k),sign(au,u)/(v(k)+vp(k)*al2))) 3258 18941 continue 3259 18921 continue 3259 if(a(k).eq.ak)goto 18911 3260 if(mm(k) .ne. 0)goto 18961 3260 nin=nin+1 3260 if(nin.gt.nx)goto 18912 3261 mm(k)=nin 3261 m(nin)=k 3262 18961 continue 3263 d=a(k)-ak 3263 dlx=max(dlx,v(k)*d**2) 3263 dv=d/xs(k) 3264 wr(jx(jb:je))=wr(jx(jb:je))-dv*w(jx(jb:je))*x(jb:je) 3265 t(jx(jb:je))=t(jx(jb:je))+dv*x(jb:je) 3266 uu=uu-dv*xb(k) 3266 tt=tt-dv*xm(k) 3267 18911 continue 3268 18912 continue 3268 if(nin.gt.nx)goto 18902 3269 if(intr .eq. 0)goto 18981 3269 d=tt/ww-uu 3270 az=az+d 3270 dlx=max(dlx,ww*d**2) 3270 uu=uu+d 3271 18981 continue 3272 if(dlx.lt.shr)goto 18902 3272 if(nlp .le. maxit)goto 19001 3272 jerr=-ilm 3272 return 3272 19001 continue 3273 19010 continue 3273 19011 continue 3273 nlp=nlp+1 3273 dlx=0.0 3274 19020 do 19021 l=1,nin 3274 k=m(l) 3275 jb=ix(k) 3275 je=ix(k+1)-1 3275 ak=a(k) 3276 u=(dot_product(wr(jx(jb:je)),x(jb:je)) -uu*(xm(k)-ww*xb(k))-xb(k) 3278 **tt)/xs(k)+v(k)*ak au=abs(u)-vp(k)*al1 3279 if(au .gt. 0.0)goto 19041 3279 a(k)=0.0 3279 goto 19051 3280 19041 continue 3281 a(k)=max(cl(1,k),min(cl(2,k),sign(au,u)/(v(k)+vp(k)*al2))) 3282 19051 continue 3283 19031 continue 3283 if(a(k).eq.ak)goto 19021 3283 d=a(k)-ak 3283 dlx=max(dlx,v(k)*d**2) 3284 dv=d/xs(k) 3284 wr(jx(jb:je))=wr(jx(jb:je))-dv*w(jx(jb:je))*x(jb:je) 3285 t(jx(jb:je))=t(jx(jb:je))+dv*x(jb:je) 3286 uu=uu-dv*xb(k) 3286 tt=tt-dv*xm(k) 3287 19021 continue 3288 19022 continue 3288 if(intr .eq. 0)goto 19071 3288 d=tt/ww-uu 3288 az=az+d 3289 dlx=max(dlx,ww*d**2) 3289 uu=uu+d 3290 19071 continue 3291 if(dlx.lt.shr)goto 19012 3291 if(nlp .le. maxit)goto 19091 3291 jerr=-ilm 3291 return 3291 19091 continue 3292 goto 19011 3293 19012 continue 3293 goto 18901 3294 18902 continue 3294 if(nin.gt.nx)goto 18882 3295 euu=exp(sign(min(abs(uu),fmax),uu)) 3296 w=euu*q*exp(sign(min(abs(t),fmax),t)) 3296 ww=sum(w) 3297 wr=qy-w*(1.0-uu) 3297 tt=sum(wr) 3298 if(ww*(az-az0)**2 .ge. shr)goto 19111 3298 kx=0 3299 19120 do 19121 j=1,nin 3299 k=m(j) 3300 if(v(k)*(a(k)-as(k))**2.lt.shr)goto 19121 3300 kx=1 3300 goto 19122 3301 19121 continue 3302 19122 continue 3302 if(kx .ne. 0)goto 19141 3303 19150 do 19151 j=1,ni 3303 if(ixx(j).eq.1)goto 19151 3303 if(ju(j).eq.0)goto 19151 3304 jb=ix(j) 3304 je=ix(j+1)-1 3305 xm(j)=dot_product(w(jx(jb:je)),x(jb:je)) 3306 ga(j)=abs(dot_product(wr(jx(jb:je)),x(jb:je)) -uu*(xm(j)-ww*xb(j) 3308 *)-xb(j)*tt)/xs(j) if(ga(j) .le. al1*vp(j))goto 19171 3308 ixx(j)=1 3308 kx=1 3308 19171 continue 3309 19151 continue 3310 19152 continue 3310 if(kx.eq.1) go to 10880 3311 goto 18882 3312 19141 continue 3313 19111 continue 3314 goto 18881 3315 18882 continue 3315 if(nin .le. nx)goto 19191 3315 jerr=-10000-ilm 3315 goto 18802 3315 19191 continue 3316 if(nin.gt.0) ca(1:nin,ilm)=a(m(1:nin)) 3316 kin(ilm)=nin 3317 a0(ilm)=az 3317 alm(ilm)=al 3317 lmu=ilm 3318 dev(ilm)=(dot_product(qy,t)+yb*uu-ww-dv0)/dvr 3319 if(ilm.lt.mnl)goto 18801 3319 if(flmin.ge.1.0)goto 18801 3320 me=0 3320 19200 do 19201 j=1,nin 3320 if(ca(j,ilm).ne.0.0) me=me+1 3320 19201 continue 3320 19202 continue 3320 if(me.gt.ne)goto 18802 3321 if((dev(ilm)-dev(ilm-mnl+1))/dev(ilm).lt.sml)goto 18802 3322 if(dev(ilm).gt.devmax)goto 18802 3323 18801 continue 3324 18802 continue 3324 g=t+uu 3325 12180 continue 3325 deallocate(t,w,wr,v,a,qy,xm,as,mm,ga,ixx) 3326 return 3327 end 3328 subroutine spdeviance(no,ni,x,ix,jx,y,g,q,nlam,a0,a,flog,jerr) 3329 implicit double precision(a-h,o-z) 3330 double precision x(*),y(no),g(no),q(no),a(ni,nlam),a0(nlam),flog(n 3331 *lam) integer ix(*),jx(*) 3332 double precision, dimension (:), allocatable :: w,f if(minval(y) .ge. 0.0)goto 19221 3335 jerr=8888 3335 return 3335 19221 continue 3336 allocate(w(1:no),stat=jerr) 3337 if(jerr.ne.0) return 3338 allocate(f(1:no),stat=jerr) 3339 if(jerr.ne.0) return 3340 w=max(0d0,q) 3340 sw=sum(w) 3340 if(sw .gt. 0.0)goto 19241 3340 jerr=9999 3340 go to 12180 3340 19241 continue 3341 yb=dot_product(w,y)/sw 3341 fmax=log(huge(y(1))*0.1) 3342 19250 do 19251 lam=1,nlam 3342 f=a0(lam) 3343 19260 do 19261 j=1,ni 3343 if(a(j,lam).eq.0.0)goto 19261 3343 jb=ix(j) 3343 je=ix(j+1)-1 3344 f(jx(jb:je))=f(jx(jb:je))+a(j,lam)*x(jb:je) 3345 19261 continue 3346 19262 continue 3346 f=f+g 3347 s=dot_product(w,y*f-exp(sign(min(abs(f),fmax),f))) 3348 flog(lam)=2.0*(sw*yb*(log(yb)-1.0)-s) 3349 19251 continue 3350 19252 continue 3350 12180 continue 3350 deallocate(w,f) 3351 return 3352 end 3353 subroutine cspdeviance(no,x,ix,jx,y,g,q,nx,nlam,a0,ca,ia,nin,flog, 3354 *jerr) implicit double precision(a-h,o-z) 3355 double precision x(*),y(no),g(no),q(no),ca(nx,nlam),a0(nlam),flog( 3356 *nlam) integer ix(*),jx(*),nin(nlam),ia(nx) 3357 double precision, dimension (:), allocatable :: w,f if(minval(y) .ge. 0.0)goto 19281 3360 jerr=8888 3360 return 3360 19281 continue 3361 allocate(w(1:no),stat=jerr) 3362 if(jerr.ne.0) return 3363 allocate(f(1:no),stat=jerr) 3364 if(jerr.ne.0) return 3365 w=max(0d0,q) 3365 sw=sum(w) 3365 if(sw .gt. 0.0)goto 19301 3365 jerr=9999 3365 go to 12180 3365 19301 continue 3366 yb=dot_product(w,y)/sw 3366 fmax=log(huge(y(1))*0.1) 3367 19310 do 19311 lam=1,nlam 3367 f=a0(lam) 3368 19320 do 19321 k=1,nin(lam) 3368 j=ia(k) 3368 jb=ix(j) 3368 je=ix(j+1)-1 3369 f(jx(jb:je))=f(jx(jb:je))+ca(k,lam)*x(jb:je) 3370 19321 continue 3371 19322 continue 3371 f=f+g 3372 s=dot_product(w,y*f-exp(sign(min(abs(f),fmax),f))) 3373 flog(lam)=2.0*(sw*yb*(log(yb)-1.0)-s) 3374 19311 continue 3375 19312 continue 3375 12180 continue 3375 deallocate(w,f) 3376 return 3377 end 3378 subroutine multelnet (parm,no,ni,nr,x,y,w,jd,vp,cl,ne,nx,nlam,flm 3381 *in,ulam,thr,isd,jsd,intr,maxit, lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr *) implicit double precision(a-h,o-z) 3382 double precision x(no,ni),y(no,nr),w(no),vp(ni),ca(nx,nr,nlam) 3383 double precision ulam(nlam),a0(nr,nlam),rsq(nlam),alm(nlam),cl(2,n 3384 *i) integer jd(*),ia(nx),nin(nlam) 3385 double precision, dimension (:), allocatable :: vq; if(maxval(vp) .gt. 0.0)goto 19341 3388 jerr=10000 3388 return 3388 19341 continue 3389 allocate(vq(1:ni),stat=jerr) 3389 if(jerr.ne.0) return 3390 vq=max(0d0,vp) 3390 vq=vq*ni/sum(vq) 3391 call multelnetn(parm,no,ni,nr,x,y,w,jd,vq,cl,ne,nx,nlam,flmin,ulam 3393 *,thr,isd, jsd,intr,maxit,lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr) deallocate(vq) 3394 return 3395 end 3396 subroutine multelnetn (parm,no,ni,nr,x,y,w,jd,vp,cl,ne,nx,nlam,flm 3398 *in,ulam,thr, isd,jsd,intr,maxit,lmu,a0,ca,ia,nin,rsq,alm,nlp,jerr *) implicit double precision(a-h,o-z) 3399 double precision vp(ni),x(no,ni),y(no,nr),w(no),ulam(nlam),cl(2,ni 3400 *) double precision ca(nx,nr,nlam),a0(nr,nlam),rsq(nlam),alm(nlam) 3401 integer jd(*),ia(nx),nin(nlam) 3402 double precision, dimension (:), allocatable :: xm,xs,xv,ym,ys integer, dimension (:), allocatable :: ju double precision, dimension (:,:,:), allocatable :: clt allocate(clt(1:2,1:nr,1:ni),stat=jerr); if(jerr.ne.0) return allocate(xm(1:ni),stat=jerr) 3410 if(jerr.ne.0) return 3411 allocate(xs(1:ni),stat=jerr) 3412 if(jerr.ne.0) return 3413 allocate(ym(1:nr),stat=jerr) 3414 if(jerr.ne.0) return 3415 allocate(ys(1:nr),stat=jerr) 3416 if(jerr.ne.0) return 3417 allocate(ju(1:ni),stat=jerr) 3418 if(jerr.ne.0) return 3419 allocate(xv(1:ni),stat=jerr) 3420 if(jerr.ne.0) return 3421 call chkvars(no,ni,x,ju) 3422 if(jd(1).gt.0) ju(jd(2:(jd(1)+1)))=0 3423 if(maxval(ju) .gt. 0)goto 19361 3423 jerr=7777 3423 return 3423 19361 continue 3424 call multstandard1(no,ni,nr,x,y,w,isd,jsd,intr,ju,xm,xs,ym,ys,xv,y 3425 *s0,jerr) if(jerr.ne.0) return 3426 19370 do 19371 j=1,ni 3426 19380 do 19381 k=1,nr 3426 19390 do 19391 i=1,2 3426 clt(i,k,j)=cl(i,j) 3426 19391 continue 3426 19392 continue 3426 19381 continue 3426 19382 continue 3426 19371 continue 3427 19372 continue 3427 if(isd .le. 0)goto 19411 3427 19420 do 19421 j=1,ni 3427 19430 do 19431 k=1,nr 3427 19440 do 19441 i=1,2 3427 clt(i,k,j)=clt(i,k,j)*xs(j) 3427 19441 continue 3427 19442 continue 3427 19431 continue 3427 19432 continue 3427 19421 continue 3427 19422 continue 3427 19411 continue 3428 if(jsd .le. 0)goto 19461 3428 19470 do 19471 j=1,ni 3428 19480 do 19481 k=1,nr 3428 19490 do 19491 i=1,2 3428 clt(i,k,j)=clt(i,k,j)/ys(k) 3428 19491 continue 3428 19492 continue 3428 19481 continue 3428 19482 continue 3428 19471 continue 3428 19472 continue 3428 19461 continue 3429 call multelnet2(parm,ni,nr,ju,vp,clt,y,no,ne,nx,x,nlam,flmin,ulam, 3431 *thr,maxit,xv, ys0,lmu,ca,ia,nin,rsq,alm,nlp,jerr) if(jerr.gt.0) return 3432 19500 do 19501 k=1,lmu 3432 nk=nin(k) 3433 19510 do 19511 j=1,nr 3434 19520 do 19521 l=1,nk 3434 ca(l,j,k)=ys(j)*ca(l,j,k)/xs(ia(l)) 3434 19521 continue 3435 19522 continue 3435 if(intr .ne. 0)goto 19541 3435 a0(j,k)=0.0 3435 goto 19551 3436 19541 continue 3436 a0(j,k)=ym(j)-dot_product(ca(1:nk,j,k),xm(ia(1:nk))) 3436 19551 continue 3437 19531 continue 3437 19511 continue 3438 19512 continue 3438 19501 continue 3439 19502 continue 3439 deallocate(xm,xs,ym,ys,ju,xv,clt) 3440 return 3441 end 3442 subroutine multstandard1 (no,ni,nr,x,y,w,isd,jsd,intr,ju,xm,xs,ym 3444 *,ys,xv,ys0,jerr) implicit double precision(a-h,o-z) 3445 double precision x(no,ni),y(no,nr),w(no),xm(ni),xs(ni),xv(ni),ym(n 3446 *r),ys(nr) integer ju(ni) 3447 double precision, dimension (:), allocatable :: v allocate(v(1:no),stat=jerr) 3450 if(jerr.ne.0) return 3451 w=w/sum(w) 3451 v=sqrt(w) 3452 if(intr .ne. 0)goto 19571 3453 19580 do 19581 j=1,ni 3453 if(ju(j).eq.0)goto 19581 3453 xm(j)=0.0 3453 x(:,j)=v*x(:,j) 3454 z=dot_product(x(:,j),x(:,j)) 3455 if(isd .le. 0)goto 19601 3455 xbq=dot_product(v,x(:,j))**2 3455 vc=z-xbq 3456 xs(j)=sqrt(vc) 3456 x(:,j)=x(:,j)/xs(j) 3456 xv(j)=1.0+xbq/vc 3457 goto 19611 3458 19601 continue 3458 xs(j)=1.0 3458 xv(j)=z 3458 19611 continue 3459 19591 continue 3459 19581 continue 3460 19582 continue 3460 ys0=0.0 3461 19620 do 19621 j=1,nr 3461 ym(j)=0.0 3461 y(:,j)=v*y(:,j) 3462 z=dot_product(y(:,j),y(:,j)) 3463 if(jsd .le. 0)goto 19641 3463 u=z-dot_product(v,y(:,j))**2 3463 ys0=ys0+z/u 3464 ys(j)=sqrt(u) 3464 y(:,j)=y(:,j)/ys(j) 3465 goto 19651 3466 19641 continue 3466 ys(j)=1.0 3466 ys0=ys0+z 3466 19651 continue 3467 19631 continue 3467 19621 continue 3468 19622 continue 3468 go to 10700 3469 19571 continue 3470 19660 do 19661 j=1,ni 3470 if(ju(j).eq.0)goto 19661 3471 xm(j)=dot_product(w,x(:,j)) 3471 x(:,j)=v*(x(:,j)-xm(j)) 3472 xv(j)=dot_product(x(:,j),x(:,j)) 3472 if(isd.gt.0) xs(j)=sqrt(xv(j)) 3473 19661 continue 3474 19662 continue 3474 if(isd .ne. 0)goto 19681 3474 xs=1.0 3474 goto 19691 3475 19681 continue 3475 19700 do 19701 j=1,ni 3475 if(ju(j).eq.0)goto 19701 3475 x(:,j)=x(:,j)/xs(j) 3475 19701 continue 3476 19702 continue 3476 xv=1.0 3477 19691 continue 3478 19671 continue 3478 ys0=0.0 3479 19710 do 19711 j=1,nr 3480 ym(j)=dot_product(w,y(:,j)) 3480 y(:,j)=v*(y(:,j)-ym(j)) 3481 z=dot_product(y(:,j),y(:,j)) 3482 if(jsd .le. 0)goto 19731 3482 ys(j)=sqrt(z) 3482 y(:,j)=y(:,j)/ys(j) 3482 goto 19741 3483 19731 continue 3483 ys0=ys0+z 3483 19741 continue 3484 19721 continue 3484 19711 continue 3485 19712 continue 3485 if(jsd .ne. 0)goto 19761 3485 ys=1.0 3485 goto 19771 3485 19761 continue 3485 ys0=nr 3485 19771 continue 3486 19751 continue 3486 10700 continue 3486 deallocate(v) 3487 return 3488 end 3489 subroutine multelnet2(beta,ni,nr,ju,vp,cl,y,no,ne,nx,x,nlam,flmin, 3491 *ulam,thri, maxit,xv,ys0,lmu,ao,ia,kin,rsqo,almo,nlp,jerr) implicit double precision(a-h,o-z) 3492 double precision vp(ni),y(no,nr),x(no,ni),ulam(nlam),ao(nx,nr,nlam 3493 *) double precision rsqo(nlam),almo(nlam),xv(ni),cl(2,nr,ni) 3494 integer ju(ni),ia(nx),kin(nlam) 3495 double precision, dimension (:), allocatable :: g,gk,del,gj integer, dimension (:), allocatable :: mm,ix,isc double precision, dimension (:,:), allocatable :: a allocate(a(1:nr,1:ni),stat=jerr) if(jerr.ne.0) return call get_int_parms(sml,eps,big,mnlam,rsqmax,pmin,exmx) 3503 allocate(gj(1:nr),stat=jerr) 3504 if(jerr.ne.0) return 3505 allocate(gk(1:nr),stat=jerr) 3506 if(jerr.ne.0) return 3507 allocate(del(1:nr),stat=jerr) 3508 if(jerr.ne.0) return 3509 allocate(mm(1:ni),stat=jerr) 3510 if(jerr.ne.0) return 3511 allocate(g(1:ni),stat=jerr) 3512 if(jerr.ne.0) return 3513 allocate(ix(1:ni),stat=jerr) 3514 if(jerr.ne.0) return 3515 allocate(isc(1:nr),stat=jerr) 3516 if(jerr.ne.0) return 3517 bta=beta 3517 omb=1.0-bta 3517 ix=0 3517 thr=thri*ys0/nr 3519 alf=1.0 3521 if(flmin .ge. 1.0)goto 19791 3521 eqs=max(eps,flmin) 3521 alf=eqs**(1.0/(nlam-1)) 3521 19791 continue 3522 rsq=ys0 3522 a=0.0 3522 mm=0 3522 nlp=0 3522 nin=nlp 3522 iz=0 3522 mnl=min(mnlam,nlam) 3522 alm=0.0 3523 19800 do 19801 j=1,ni 3523 if(ju(j).eq.0)goto 19801 3523 g(j)=0.0 3524 19810 do 19811 k=1,nr 3524 g(j)=g(j)+dot_product(y(:,k),x(:,j))**2 3524 19811 continue 3525 19812 continue 3525 g(j)=sqrt(g(j)) 3526 19801 continue 3527 19802 continue 3527 19820 do 19821 m=1,nlam 3527 alm0=alm 3528 if(flmin .lt. 1.0)goto 19841 3528 alm=ulam(m) 3528 goto 19831 3529 19841 if(m .le. 2)goto 19851 3529 alm=alm*alf 3529 goto 19831 3530 19851 if(m .ne. 1)goto 19861 3530 alm=big 3530 goto 19871 3531 19861 continue 3531 alm0=0.0 3532 19880 do 19881 j=1,ni 3532 if(ju(j).eq.0)goto 19881 3533 if(vp(j).gt.0.0) alm0=max(alm0,g(j)/vp(j)) 3534 19881 continue 3535 19882 continue 3535 alm0=alm0/max(bta,1.0d-3) 3535 alm=alf*alm0 3536 19871 continue 3537 19831 continue 3537 dem=alm*omb 3537 ab=alm*bta 3537 rsq0=rsq 3537 jz=1 3538 tlam=bta*(2.0*alm-alm0) 3539 19890 do 19891 k=1,ni 3539 if(ix(k).eq.1)goto 19891 3539 if(ju(k).eq.0)goto 19891 3540 if(g(k).gt.tlam*vp(k)) ix(k)=1 3541 19891 continue 3542 19892 continue 3542 19900 continue 3542 19901 continue 3542 if(iz*jz.ne.0) go to 10360 3543 10880 continue 3543 nlp=nlp+1 3543 dlx=0.0 3544 19910 do 19911 k=1,ni 3544 if(ix(k).eq.0)goto 19911 3544 gkn=0.0 3545 19920 do 19921 j=1,nr 3545 gj(j)=dot_product(y(:,j),x(:,k)) 3546 gk(j)=gj(j)+a(j,k)*xv(k) 3546 gkn=gkn+gk(j)**2 3548 19921 continue 3548 19922 continue 3548 gkn=sqrt(gkn) 3548 u=1.0-ab*vp(k)/gkn 3548 del=a(:,k) 3549 if(u .gt. 0.0)goto 19941 3549 a(:,k)=0.0 3549 goto 19951 3550 19941 continue 3550 a(:,k)=gk*(u/(xv(k)+dem*vp(k))) 3551 call chkbnds(nr,gk,gkn,xv(k),cl(1,1,k), dem*vp(k),ab*vp(k),a(:,k) 3553 *,isc,jerr) if(jerr.ne.0) return 3554 19951 continue 3555 19931 continue 3555 del=a(:,k)-del 3555 if(maxval(abs(del)).le.0.0)goto 19911 3556 19960 do 19961 j=1,nr 3556 rsq=rsq-del(j)*(2.0*gj(j)-del(j)*xv(k)) 3557 y(:,j)=y(:,j)-del(j)*x(:,k) 3557 dlx=max(dlx,xv(k)*del(j)**2) 3558 19961 continue 3559 19962 continue 3559 if(mm(k) .ne. 0)goto 19981 3559 nin=nin+1 3559 if(nin.gt.nx)goto 19912 3560 mm(k)=nin 3560 ia(nin)=k 3561 19981 continue 3562 19911 continue 3563 19912 continue 3563 if(nin.gt.nx)goto 19902 3564 if(dlx .ge. thr)goto 20001 3564 ixx=0 3565 20010 do 20011 k=1,ni 3565 if(ix(k).eq.1)goto 20011 3565 if(ju(k).eq.0)goto 20011 3565 g(k)=0.0 3566 20020 do 20021 j=1,nr 3566 g(k)=g(k)+dot_product(y(:,j),x(:,k))**2 3566 20021 continue 3567 20022 continue 3567 g(k)=sqrt(g(k)) 3568 if(g(k) .le. ab*vp(k))goto 20041 3568 ix(k)=1 3568 ixx=1 3568 20041 continue 3569 20011 continue 3570 20012 continue 3570 if(ixx.eq.1) go to 10880 3571 goto 19902 3572 20001 continue 3573 if(nlp .le. maxit)goto 20061 3573 jerr=-m 3573 return 3573 20061 continue 3574 10360 continue 3574 iz=1 3575 20070 continue 3575 20071 continue 3575 nlp=nlp+1 3575 dlx=0.0 3576 20080 do 20081 l=1,nin 3576 k=ia(l) 3576 gkn=0.0 3577 20090 do 20091 j=1,nr 3577 gj(j)=dot_product(y(:,j),x(:,k)) 3578 gk(j)=gj(j)+a(j,k)*xv(k) 3578 gkn=gkn+gk(j)**2 3580 20091 continue 3580 20092 continue 3580 gkn=sqrt(gkn) 3580 u=1.0-ab*vp(k)/gkn 3580 del=a(:,k) 3581 if(u .gt. 0.0)goto 20111 3581 a(:,k)=0.0 3581 goto 20121 3582 20111 continue 3582 a(:,k)=gk*(u/(xv(k)+dem*vp(k))) 3583 call chkbnds(nr,gk,gkn,xv(k),cl(1,1,k), dem*vp(k),ab*vp(k),a(:,k) 3585 *,isc,jerr) if(jerr.ne.0) return 3586 20121 continue 3587 20101 continue 3587 del=a(:,k)-del 3587 if(maxval(abs(del)).le.0.0)goto 20081 3588 20130 do 20131 j=1,nr 3588 rsq=rsq-del(j)*(2.0*gj(j)-del(j)*xv(k)) 3589 y(:,j)=y(:,j)-del(j)*x(:,k) 3589 dlx=max(dlx,xv(k)*del(j)**2) 3590 20131 continue 3591 20132 continue 3591 20081 continue 3592 20082 continue 3592 if(dlx.lt.thr)goto 20072 3592 if(nlp .le. maxit)goto 20151 3592 jerr=-m 3592 return 3592 20151 continue 3593 goto 20071 3594 20072 continue 3594 jz=0 3595 goto 19901 3596 19902 continue 3596 if(nin .le. nx)goto 20171 3596 jerr=-10000-m 3596 goto 19822 3596 20171 continue 3597 if(nin .le. 0)goto 20191 3597 20200 do 20201 j=1,nr 3597 ao(1:nin,j,m)=a(j,ia(1:nin)) 3597 20201 continue 3597 20202 continue 3597 20191 continue 3598 kin(m)=nin 3599 rsqo(m)=1.0-rsq/ys0 3599 almo(m)=alm 3599 lmu=m 3600 if(m.lt.mnl)goto 19821 3600 if(flmin.ge.1.0)goto 19821 3601 me=0 3601 20210 do 20211 j=1,nin 3601 if(ao(j,1,m).ne.0.0) me=me+1 3601 20211 continue 3601 20212 continue 3601 if(me.gt.ne)goto 19822 3602 if(rsq0-rsq.lt.sml*rsq)goto 19822 3602 if(rsqo(m).gt.rsqmax)goto 19822 3603 19821 continue 3604 19822 continue 3604 deallocate(a,mm,g,ix,del,gj,gk) 3605 return 3606 end 3607 subroutine chkbnds(nr,gk,gkn,xv,cl,al1,al2,a,isc,jerr) 3608 implicit double precision(a-h,o-z) 3609 double precision gk(nr),cl(2,nr),a(nr) 3609 integer isc(nr) 3610 kerr=0 3610 al1p=1.0+al1/xv 3610 al2p=al2/xv 3610 isc=0 3611 gsq=gkn**2 3611 asq=dot_product(a,a) 3611 usq=0.0 3613 u=0.0 3613 kn=-1 3615 20220 continue 3615 20221 continue 3615 vmx=0.0 3616 20230 do 20231 k=1,nr 3616 v=max(a(k)-cl(2,k),cl(1,k)-a(k)) 3617 if(v .le. vmx)goto 20251 3617 vmx=v 3617 kn=k 3617 20251 continue 3618 20231 continue 3619 20232 continue 3619 if(vmx.le.0.0)goto 20222 3619 if(isc(kn).ne.0)goto 20222 3620 gsq=gsq-gk(kn)**2 3620 g=sqrt(gsq)/xv 3621 if(a(kn).lt.cl(1,kn)) u=cl(1,kn) 3621 if(a(kn).gt.cl(2,kn)) u=cl(2,kn) 3622 usq=usq+u**2 3623 if(usq .ne. 0.0)goto 20271 3623 b=max(0d0,(g-al2p)/al1p) 3623 goto 20281 3624 20271 continue 3624 b0=sqrt(asq-a(kn)**2) 3625 b=bnorm(b0,al1p,al2p,g,usq,kerr) 3625 if(kerr.ne.0)goto 20222 3626 20281 continue 3627 20261 continue 3627 asq=usq+b**2 3627 if(asq .gt. 0.0)goto 20301 3627 a=0.0 3627 goto 20222 3627 20301 continue 3628 a(kn)=u 3628 isc(kn)=1 3628 f=1.0/(xv*(al1p+al2p/sqrt(asq))) 3629 20310 do 20311 j=1,nr 3629 if(isc(j).eq.0) a(j)=f*gk(j) 3629 20311 continue 3630 20312 continue 3630 goto 20221 3631 20222 continue 3631 if(kerr.ne.0) jerr=kerr 3632 return 3633 end 3634 subroutine chkbnds1(nr,gk,gkn,xv,cl1,cl2,al1,al2,a,isc,jerr) 3635 implicit double precision(a-h,o-z) 3636 double precision gk(nr),a(nr) 3636 integer isc(nr) 3637 kerr=0 3637 al1p=1.0+al1/xv 3637 al2p=al2/xv 3637 isc=0 3638 gsq=gkn**2 3638 asq=dot_product(a,a) 3638 usq=0.0 3640 u=0.0 3640 kn=-1 3642 20320 continue 3642 20321 continue 3642 vmx=0.0 3643 20330 do 20331 k=1,nr 3643 v=max(a(k)-cl2,cl1-a(k)) 3644 if(v .le. vmx)goto 20351 3644 vmx=v 3644 kn=k 3644 20351 continue 3645 20331 continue 3646 20332 continue 3646 if(vmx.le.0.0)goto 20322 3646 if(isc(kn).ne.0)goto 20322 3647 gsq=gsq-gk(kn)**2 3647 g=sqrt(gsq)/xv 3648 if(a(kn).lt.cl1) u=cl1 3648 if(a(kn).gt.cl2) u=cl2 3649 usq=usq+u**2 3650 if(usq .ne. 0.0)goto 20371 3650 b=max(0d0,(g-al2p)/al1p) 3650 goto 20381 3651 20371 continue 3651 b0=sqrt(asq-a(kn)**2) 3652 b=bnorm(b0,al1p,al2p,g,usq,kerr) 3652 if(kerr.ne.0)goto 20322 3653 20381 continue 3654 20361 continue 3654 asq=usq+b**2 3654 if(asq .gt. 0.0)goto 20401 3654 a=0.0 3654 goto 20322 3654 20401 continue 3655 a(kn)=u 3655 isc(kn)=1 3655 f=1.0/(xv*(al1p+al2p/sqrt(asq))) 3656 20410 do 20411 j=1,nr 3656 if(isc(j).eq.0) a(j)=f*gk(j) 3656 20411 continue 3657 20412 continue 3657 goto 20321 3658 20322 continue 3658 if(kerr.ne.0) jerr=kerr 3659 return 3660 end 3661 function bnorm(b0,al1p,al2p,g,usq,jerr) 3662 implicit double precision(a-h,o-z) 3663 data thr,mxit /1.0d-10,100/ 3664 b=b0 3664 zsq=b**2+usq 3664 if(zsq .gt. 0.0)goto 20431 3664 bnorm=0.0 3664 return 3664 20431 continue 3665 z=sqrt(zsq) 3665 f=b*(al1p+al2p/z)-g 3665 jerr=0 3666 20440 do 20441 it=1,mxit 3666 b=b-f/(al1p+al2p*usq/(z*zsq)) 3667 zsq=b**2+usq 3667 if(zsq .gt. 0.0)goto 20461 3667 bnorm=0.0 3667 return 3667 20461 continue 3668 z=sqrt(zsq) 3668 f=b*(al1p+al2p/z)-g 3669 if(abs(f).le.thr)goto 20442 3669 if(b .gt. 0.0)goto 20481 3669 b=0.0 3669 goto 20442 3669 20481 continue 3670 20441 continue 3671 20442 continue 3671 bnorm=b 3671 if(it.ge.mxit) jerr=90000 3672 return 3674 entry chg_bnorm(arg,irg) 3674 bnorm = 0.0 3674 thr=arg 3674 mxit=irg 3674 return 3675 entry get_bnorm(arg,irg) 3675 bnorm = 0.0 3675 arg=thr 3675 irg=mxit 3675 return 3677 end 3678 subroutine multsolns(ni,nx,nr,lmu,a,ia,nin,b) 3679 implicit double precision(a-h,o-z) 3680 double precision a(nx,nr,lmu),b(ni,nr,lmu) 3680 integer ia(nx),nin(lmu) 3681 20490 do 20491 lam=1,lmu 3681 call multuncomp(ni,nr,nx,a(1,1,lam),ia,nin(lam),b(1,1,lam)) 3681 20491 continue 3682 20492 continue 3682 return 3683 end 3684 subroutine multuncomp(ni,nr,nx,ca,ia,nin,a) 3685 implicit double precision(a-h,o-z) 3686 double precision ca(nx,nr),a(ni,nr) 3686 integer ia(nx) 3687 a=0.0 3688 if(nin .le. 0)goto 20511 3688 20520 do 20521 j=1,nr 3688 a(ia(1:nin),j)=ca(1:nin,j) 3688 20521 continue 3688 20522 continue 3688 20511 continue 3689 return 3690 end 3691 subroutine multmodval(nx,nr,a0,ca,ia,nin,n,x,f) 3692 implicit double precision(a-h,o-z) 3693 double precision a0(nr),ca(nx,nr),x(n,*),f(nr,n) 3693 integer ia(nx) 3694 20530 do 20531 i=1,n 3694 f(:,i)=a0 3694 20531 continue 3694 20532 continue 3694 if(nin.le.0) return 3695 20540 do 20541 i=1,n 3695 20550 do 20551 j=1,nr 3695 f(j,i)=f(j,i)+dot_product(ca(1:nin,j),x(i,ia(1:nin))) 3695 20551 continue 3695 20552 continue 3695 20541 continue 3696 20542 continue 3696 return 3697 end 3698 subroutine multspelnet (parm,no,ni,nr,x,ix,jx,y,w,jd,vp,cl,ne,nx, 3701 *nlam,flmin,ulam,thr,isd, jsd,intr,maxit,lmu,a0,ca,ia,nin,rsq,alm, *nlp,jerr) implicit double precision(a-h,o-z) 3702 double precision x(*),y(no,nr),w(no),vp(ni),ulam(nlam),cl(2,ni) 3703 double precision ca(nx,nr,nlam),a0(nr,nlam),rsq(nlam),alm(nlam) 3704 integer ix(*),jx(*),jd(*),ia(nx),nin(nlam) 3705 double precision, dimension (:), allocatable :: vq; if(maxval(vp) .gt. 0.0)goto 20571 3708 jerr=10000 3708 return 3708 20571 continue 3709 allocate(vq(1:ni),stat=jerr) 3709 if(jerr.ne.0) return 3710 vq=max(0d0,vp) 3710 vq=vq*ni/sum(vq) 3711 call multspelnetn(parm,no,ni,nr,x,ix,jx,y,w,jd,vq,cl,ne,nx,nlam,fl 3713 *min, ulam,thr,isd,jsd,intr,maxit,lmu,a0,ca,ia,nin,rsq,alm,nlp,jer *r) deallocate(vq) 3714 return 3715 end 3716 subroutine multspelnetn(parm,no,ni,nr,x,ix,jx,y,w,jd,vp,cl,ne,nx,n 3718 *lam,flmin, ulam,thr,isd,jsd,intr,maxit,lmu,a0,ca,ia,nin,rsq,alm,n *lp,jerr) implicit double precision(a-h,o-z) 3719 double precision x(*),vp(ni),y(no,nr),w(no),ulam(nlam),cl(2,ni) 3720 double precision ca(nx,nr,nlam),a0(nr,nlam),rsq(nlam),alm(nlam) 3721 integer ix(*),jx(*),jd(*),ia(nx),nin(nlam) 3722 double precision, dimension (:), allocatable :: xm,xs,xv,ym,ys integer, dimension (:), allocatable :: ju double precision, dimension (:,:,:), allocatable :: clt allocate(clt(1:2,1:nr,1:ni),stat=jerr) if(jerr.ne.0) return allocate(xm(1:ni),stat=jerr) 3730 if(jerr.ne.0) return 3731 allocate(xs(1:ni),stat=jerr) 3732 if(jerr.ne.0) return 3733 allocate(ym(1:nr),stat=jerr) 3734 if(jerr.ne.0) return 3735 allocate(ys(1:nr),stat=jerr) 3736 if(jerr.ne.0) return 3737 allocate(ju(1:ni),stat=jerr) 3738 if(jerr.ne.0) return 3739 allocate(xv(1:ni),stat=jerr) 3740 if(jerr.ne.0) return 3741 call spchkvars(no,ni,x,ix,ju) 3742 if(jd(1).gt.0) ju(jd(2:(jd(1)+1)))=0 3743 if(maxval(ju) .gt. 0)goto 20591 3743 jerr=7777 3743 return 3743 20591 continue 3744 call multspstandard1(no,ni,nr,x,ix,jx,y,w,ju,isd,jsd,intr, xm,xs, 3746 *ym,ys,xv,ys0,jerr) if(jerr.ne.0) return 3747 20600 do 20601 j=1,ni 3747 20610 do 20611 k=1,nr 3747 20620 do 20621 i=1,2 3747 clt(i,k,j)=cl(i,j) 3747 20621 continue 3747 20622 continue 3747 20611 continue 3747 20612 continue 3747 20601 continue 3748 20602 continue 3748 if(isd .le. 0)goto 20641 3748 20650 do 20651 j=1,ni 3748 20660 do 20661 k=1,nr 3748 20670 do 20671 i=1,2 3748 clt(i,k,j)=clt(i,k,j)*xs(j) 3748 20671 continue 3748 20672 continue 3748 20661 continue 3748 20662 continue 3748 20651 continue 3748 20652 continue 3748 20641 continue 3749 if(jsd .le. 0)goto 20691 3749 20700 do 20701 j=1,ni 3749 20710 do 20711 k=1,nr 3749 20720 do 20721 i=1,2 3749 clt(i,k,j)=clt(i,k,j)/ys(k) 3749 20721 continue 3749 20722 continue 3749 20711 continue 3749 20712 continue 3749 20701 continue 3749 20702 continue 3749 20691 continue 3750 call multspelnet2(parm,ni,nr,y,w,no,ne,nx,x,ix,jx,ju,vp,clt,nlam,f 3752 *lmin, ulam,thr,maxit,xm,xs,xv,ys0,lmu,ca,ia,nin,rsq,alm,nlp,jerr) if(jerr.gt.0) return 3753 20730 do 20731 k=1,lmu 3753 nk=nin(k) 3754 20740 do 20741 j=1,nr 3755 20750 do 20751 l=1,nk 3755 ca(l,j,k)=ys(j)*ca(l,j,k)/xs(ia(l)) 3755 20751 continue 3756 20752 continue 3756 if(intr .ne. 0)goto 20771 3756 a0(j,k)=0.0 3756 goto 20781 3757 20771 continue 3757 a0(j,k)=ym(j)-dot_product(ca(1:nk,j,k),xm(ia(1:nk))) 3757 20781 continue 3758 20761 continue 3758 20741 continue 3759 20742 continue 3759 20731 continue 3760 20732 continue 3760 deallocate(xm,xs,ym,ys,ju,xv,clt) 3761 return 3762 end 3763 subroutine multspstandard1(no,ni,nr,x,ix,jx,y,w,ju,isd,jsd,intr, 3765 *xm,xs,ym,ys,xv,ys0,jerr) implicit double precision(a-h,o-z) 3766 double precision x(*),y(no,nr),w(no),xm(ni),xs(ni),xv(ni),ym(nr),y 3767 *s(nr) integer ix(*),jx(*),ju(ni) 3768 w=w/sum(w) 3769 if(intr .ne. 0)goto 20801 3770 20810 do 20811 j=1,ni 3770 if(ju(j).eq.0)goto 20811 3770 xm(j)=0.0 3770 jb=ix(j) 3770 je=ix(j+1)-1 3771 z=dot_product(w(jx(jb:je)),x(jb:je)**2) 3772 if(isd .le. 0)goto 20831 3772 xbq=dot_product(w(jx(jb:je)),x(jb:je))**2 3772 vc=z-xbq 3773 xs(j)=sqrt(vc) 3773 xv(j)=1.0+xbq/vc 3774 goto 20841 3775 20831 continue 3775 xs(j)=1.0 3775 xv(j)=z 3775 20841 continue 3776 20821 continue 3776 20811 continue 3777 20812 continue 3777 ys0=0.0 3778 20850 do 20851 j=1,nr 3778 ym(j)=0.0 3778 z=dot_product(w,y(:,j)**2) 3779 if(jsd .le. 0)goto 20871 3779 u=z-dot_product(w,y(:,j))**2 3779 ys0=ys0+z/u 3780 ys(j)=sqrt(u) 3780 y(:,j)=y(:,j)/ys(j) 3781 goto 20881 3782 20871 continue 3782 ys(j)=1.0 3782 ys0=ys0+z 3782 20881 continue 3783 20861 continue 3783 20851 continue 3784 20852 continue 3784 return 3785 20801 continue 3786 20890 do 20891 j=1,ni 3786 if(ju(j).eq.0)goto 20891 3787 jb=ix(j) 3787 je=ix(j+1)-1 3787 xm(j)=dot_product(w(jx(jb:je)),x(jb:je)) 3788 xv(j)=dot_product(w(jx(jb:je)),x(jb:je)**2)-xm(j)**2 3789 if(isd.gt.0) xs(j)=sqrt(xv(j)) 3790 20891 continue 3791 20892 continue 3791 if(isd .ne. 0)goto 20911 3791 xs=1.0 3791 goto 20921 3791 20911 continue 3791 xv=1.0 3791 20921 continue 3792 20901 continue 3792 ys0=0.0 3793 20930 do 20931 j=1,nr 3794 ym(j)=dot_product(w,y(:,j)) 3794 y(:,j)=y(:,j)-ym(j) 3795 z=dot_product(w,y(:,j)**2) 3796 if(jsd .le. 0)goto 20951 3796 ys(j)=sqrt(z) 3796 y(:,j)=y(:,j)/ys(j) 3796 goto 20961 3797 20951 continue 3797 ys0=ys0+z 3797 20961 continue 3798 20941 continue 3798 20931 continue 3799 20932 continue 3799 if(jsd .ne. 0)goto 20981 3799 ys=1.0 3799 goto 20991 3799 20981 continue 3799 ys0=nr 3799 20991 continue 3800 20971 continue 3800 return 3801 end 3802 subroutine multspelnet2(beta,ni,nr,y,w,no,ne,nx,x,ix,jx,ju,vp,cl,n 3804 *lam,flmin, ulam,thri,maxit,xm,xs,xv,ys0,lmu,ao,ia,kin,rsqo,almo,n *lp,jerr) implicit double precision(a-h,o-z) 3805 double precision y(no,nr),w(no),x(*),vp(ni),ulam(nlam),cl(2,nr,ni) 3806 double precision ao(nx,nr,nlam),rsqo(nlam),almo(nlam),xm(ni),xs(ni 3807 *),xv(ni) integer ix(*),jx(*),ju(ni),ia(nx),kin(nlam) 3808 double precision, dimension (:), allocatable :: g,gj,gk,del,o integer, dimension (:), allocatable :: mm,iy,isc double precision, dimension (:,:), allocatable :: a allocate(a(1:nr,1:ni),stat=jerr) if(jerr.ne.0) return call get_int_parms(sml,eps,big,mnlam,rsqmax,pmin,exmx) 3816 allocate(mm(1:ni),stat=jerr) 3817 if(jerr.ne.0) return 3818 allocate(g(1:ni),stat=jerr) 3819 if(jerr.ne.0) return 3820 allocate(gj(1:nr),stat=jerr) 3821 if(jerr.ne.0) return 3822 allocate(gk(1:nr),stat=jerr) 3823 if(jerr.ne.0) return 3824 allocate(del(1:nr),stat=jerr) 3825 if(jerr.ne.0) return 3826 allocate(o(1:nr),stat=jerr) 3827 if(jerr.ne.0) return 3828 allocate(iy(1:ni),stat=jerr) 3829 if(jerr.ne.0) return 3830 allocate(isc(1:nr),stat=jerr) 3831 if(jerr.ne.0) return 3832 bta=beta 3832 omb=1.0-bta 3832 alm=0.0 3832 iy=0 3832 thr=thri*ys0/nr 3834 alf=1.0 3836 if(flmin .ge. 1.0)goto 21011 3836 eqs=max(eps,flmin) 3836 alf=eqs**(1.0/(nlam-1)) 3836 21011 continue 3837 rsq=ys0 3837 a=0.0 3837 mm=0 3837 o=0.0 3837 nlp=0 3837 nin=nlp 3837 iz=0 3837 mnl=min(mnlam,nlam) 3838 21020 do 21021 j=1,ni 3838 if(ju(j).eq.0)goto 21021 3838 jb=ix(j) 3838 je=ix(j+1)-1 3838 g(j)=0.0 3839 21030 do 21031 k=1,nr 3840 g(j)=g(j)+(dot_product(y(jx(jb:je),k),w(jx(jb:je))*x(jb:je))/xs(j) 3841 *)**2 21031 continue 3842 21032 continue 3842 g(j)=sqrt(g(j)) 3843 21021 continue 3844 21022 continue 3844 21040 do 21041 m=1,nlam 3844 alm0=alm 3845 if(flmin .lt. 1.0)goto 21061 3845 alm=ulam(m) 3845 goto 21051 3846 21061 if(m .le. 2)goto 21071 3846 alm=alm*alf 3846 goto 21051 3847 21071 if(m .ne. 1)goto 21081 3847 alm=big 3847 goto 21091 3848 21081 continue 3848 alm0=0.0 3849 21100 do 21101 j=1,ni 3849 if(ju(j).eq.0)goto 21101 3850 if(vp(j).gt.0.0) alm0=max(alm0,g(j)/vp(j)) 3851 21101 continue 3852 21102 continue 3852 alm0=alm0/max(bta,1.0d-3) 3852 alm=alf*alm0 3853 21091 continue 3854 21051 continue 3854 dem=alm*omb 3854 ab=alm*bta 3854 rsq0=rsq 3854 jz=1 3855 tlam=bta*(2.0*alm-alm0) 3856 21110 do 21111 k=1,ni 3856 if(iy(k).eq.1)goto 21111 3856 if(ju(k).eq.0)goto 21111 3857 if(g(k).gt.tlam*vp(k)) iy(k)=1 3858 21111 continue 3859 21112 continue 3859 21120 continue 3859 21121 continue 3859 if(iz*jz.ne.0) go to 10360 3860 10880 continue 3860 nlp=nlp+1 3860 dlx=0.0 3861 21130 do 21131 k=1,ni 3861 if(iy(k).eq.0)goto 21131 3861 jb=ix(k) 3861 je=ix(k+1)-1 3861 gkn=0.0 3862 21140 do 21141 j=1,nr 3863 gj(j)=dot_product(y(jx(jb:je),j)+o(j),w(jx(jb:je))*x(jb:je))/xs(k) 3864 gk(j)=gj(j)+a(j,k)*xv(k) 3864 gkn=gkn+gk(j)**2 3865 21141 continue 3866 21142 continue 3866 gkn=sqrt(gkn) 3866 u=1.0-ab*vp(k)/gkn 3866 del=a(:,k) 3867 if(u .gt. 0.0)goto 21161 3867 a(:,k)=0.0 3867 goto 21171 3868 21161 continue 3868 a(:,k)=gk*(u/(xv(k)+dem*vp(k))) 3869 call chkbnds(nr,gk,gkn,xv(k),cl(1,1,k), dem*vp(k),ab*vp(k),a(:,k) 3871 *,isc,jerr) if(jerr.ne.0) return 3872 21171 continue 3873 21151 continue 3873 del=a(:,k)-del 3873 if(maxval(abs(del)).le.0.0)goto 21131 3874 if(mm(k) .ne. 0)goto 21191 3874 nin=nin+1 3874 if(nin.gt.nx)goto 21132 3875 mm(k)=nin 3875 ia(nin)=k 3876 21191 continue 3877 21200 do 21201 j=1,nr 3877 rsq=rsq-del(j)*(2.0*gj(j)-del(j)*xv(k)) 3878 y(jx(jb:je),j)=y(jx(jb:je),j)-del(j)*x(jb:je)/xs(k) 3879 o(j)=o(j)+del(j)*xm(k)/xs(k) 3879 dlx=max(xv(k)*del(j)**2,dlx) 3880 21201 continue 3881 21202 continue 3881 21131 continue 3882 21132 continue 3882 if(nin.gt.nx)goto 21122 3883 if(dlx .ge. thr)goto 21221 3883 ixx=0 3884 21230 do 21231 j=1,ni 3884 if(iy(j).eq.1)goto 21231 3884 if(ju(j).eq.0)goto 21231 3885 jb=ix(j) 3885 je=ix(j+1)-1 3885 g(j)=0.0 3886 21240 do 21241 k=1,nr 3886 g(j)=g(j)+ (dot_product(y(jx(jb:je),k)+o(k),w(jx(jb:je))*x(jb:je) 3888 *)/xs(j))**2 21241 continue 3889 21242 continue 3889 g(j)=sqrt(g(j)) 3890 if(g(j) .le. ab*vp(j))goto 21261 3890 iy(j)=1 3890 ixx=1 3890 21261 continue 3891 21231 continue 3892 21232 continue 3892 if(ixx.eq.1) go to 10880 3893 goto 21122 3894 21221 continue 3895 if(nlp .le. maxit)goto 21281 3895 jerr=-m 3895 return 3895 21281 continue 3896 10360 continue 3896 iz=1 3897 21290 continue 3897 21291 continue 3897 nlp=nlp+1 3897 dlx=0.0 3898 21300 do 21301 l=1,nin 3898 k=ia(l) 3898 jb=ix(k) 3898 je=ix(k+1)-1 3898 gkn=0.0 3899 21310 do 21311 j=1,nr 3899 gj(j)= dot_product(y(jx(jb:je),j)+o(j),w(jx(jb:je))*x(jb:je))/xs( 3901 *k) gk(j)=gj(j)+a(j,k)*xv(k) 3901 gkn=gkn+gk(j)**2 3902 21311 continue 3903 21312 continue 3903 gkn=sqrt(gkn) 3903 u=1.0-ab*vp(k)/gkn 3903 del=a(:,k) 3904 if(u .gt. 0.0)goto 21331 3904 a(:,k)=0.0 3904 goto 21341 3905 21331 continue 3905 a(:,k)=gk*(u/(xv(k)+dem*vp(k))) 3906 call chkbnds(nr,gk,gkn,xv(k),cl(1,1,k), dem*vp(k),ab*vp(k),a(:,k) 3908 *,isc,jerr) if(jerr.ne.0) return 3909 21341 continue 3910 21321 continue 3910 del=a(:,k)-del 3910 if(maxval(abs(del)).le.0.0)goto 21301 3911 21350 do 21351 j=1,nr 3911 rsq=rsq-del(j)*(2.0*gj(j)-del(j)*xv(k)) 3912 y(jx(jb:je),j)=y(jx(jb:je),j)-del(j)*x(jb:je)/xs(k) 3913 o(j)=o(j)+del(j)*xm(k)/xs(k) 3913 dlx=max(xv(k)*del(j)**2,dlx) 3914 21351 continue 3915 21352 continue 3915 21301 continue 3916 21302 continue 3916 if(dlx.lt.thr)goto 21292 3916 if(nlp .le. maxit)goto 21371 3916 jerr=-m 3916 return 3916 21371 continue 3917 goto 21291 3918 21292 continue 3918 jz=0 3919 goto 21121 3920 21122 continue 3920 if(nin .le. nx)goto 21391 3920 jerr=-10000-m 3920 goto 21042 3920 21391 continue 3921 if(nin .le. 0)goto 21411 3921 21420 do 21421 j=1,nr 3921 ao(1:nin,j,m)=a(j,ia(1:nin)) 3921 21421 continue 3921 21422 continue 3921 21411 continue 3922 kin(m)=nin 3923 rsqo(m)=1.0-rsq/ys0 3923 almo(m)=alm 3923 lmu=m 3924 if(m.lt.mnl)goto 21041 3924 if(flmin.ge.1.0)goto 21041 3925 me=0 3925 21430 do 21431 j=1,nin 3925 if(ao(j,1,m).ne.0.0) me=me+1 3925 21431 continue 3925 21432 continue 3925 if(me.gt.ne)goto 21042 3926 if(rsq0-rsq.lt.sml*rsq)goto 21042 3926 if(rsqo(m).gt.rsqmax)goto 21042 3927 21041 continue 3928 21042 continue 3928 deallocate(a,mm,g,iy,gj,gk,del,o) 3929 return 3930 end 3931 subroutine multlognetn(parm,no,ni,nc,x,y,g,w,ju,vp,cl,ne,nx,nlam,f 3933 *lmin,ulam, shri,intr,maxit,xv,lmu,a0,a,m,kin,dev0,dev,alm,nlp,jer *r) implicit double precision(a-h,o-z) 3934 double precision x(no,ni),y(no,nc),g(no,nc),w(no),vp(ni),ulam(nlam 3935 *),cl(2,ni) double precision a(nx,nc,nlam),a0(nc,nlam),dev(nlam),alm(nlam),xv( 3936 *ni) integer ju(ni),m(nx),kin(nlam) 3937 double precision, dimension (:,:), allocatable :: q,r,b,bs double precision, dimension (:), allocatable :: sxp,sxpl,ga,gk,del integer, dimension (:), allocatable :: mm,is,ixx,isc allocate(b(0:ni,1:nc),stat=jerr) if(jerr.ne.0) return allocate(bs(0:ni,1:nc),stat=jerr) if(jerr.ne.0) return allocate(q(1:no,1:nc),stat=jerr) if(jerr.ne.0) return allocate(r(1:no,1:nc),stat=jerr) if(jerr.ne.0) return call get_int_parms(sml,eps,big,mnlam,devmax,pmin,exmx) 3950 exmn=-exmx 3951 allocate(mm(1:ni),stat=jerr) 3952 if(jerr.ne.0) return 3953 allocate(is(1:max(nc,ni)),stat=jerr) 3954 if(jerr.ne.0) return 3955 allocate(sxp(1:no),stat=jerr) 3956 if(jerr.ne.0) return 3957 allocate(sxpl(1:no),stat=jerr) 3958 if(jerr.ne.0) return 3959 allocate(ga(1:ni),stat=jerr) 3960 if(jerr.ne.0) return 3961 allocate(ixx(1:ni),stat=jerr) 3962 if(jerr.ne.0) return 3963 allocate(gk(1:nc),stat=jerr) 3964 if(jerr.ne.0) return 3965 allocate(del(1:nc),stat=jerr) 3966 if(jerr.ne.0) return 3967 allocate(isc(1:nc),stat=jerr) 3968 if(jerr.ne.0) return 3969 pmax=1.0-pmin 3969 emin=pmin/pmax 3969 emax=1.0/emin 3970 bta=parm 3970 omb=1.0-bta 3970 dev1=0.0 3970 dev0=0.0 3971 21440 do 21441 ic=1,nc 3971 q0=dot_product(w,y(:,ic)) 3972 if(q0 .gt. pmin)goto 21461 3972 jerr =8000+ic 3972 return 3972 21461 continue 3973 if(q0 .lt. pmax)goto 21481 3973 jerr =9000+ic 3973 return 3973 21481 continue 3974 if(intr .ne. 0)goto 21501 3974 q0=1.0/nc 3974 b(0,ic)=0.0 3974 goto 21511 3975 21501 continue 3975 b(0,ic)=log(q0) 3975 dev1=dev1-q0*b(0,ic) 3975 21511 continue 3976 21491 continue 3976 b(1:ni,ic)=0.0 3977 21441 continue 3978 21442 continue 3978 if(intr.eq.0) dev1=log(float(nc)) 3978 ixx=0 3978 al=0.0 3979 if(nonzero(no*nc,g) .ne. 0)goto 21531 3980 b(0,:)=b(0,:)-sum(b(0,:))/nc 3980 sxp=0.0 3981 21540 do 21541 ic=1,nc 3981 q(:,ic)=exp(b(0,ic)) 3981 sxp=sxp+q(:,ic) 3981 21541 continue 3982 21542 continue 3982 goto 21551 3983 21531 continue 3983 21560 do 21561 i=1,no 3983 g(i,:)=g(i,:)-sum(g(i,:))/nc 3983 21561 continue 3983 21562 continue 3983 sxp=0.0 3984 if(intr .ne. 0)goto 21581 3984 b(0,:)=0.0 3984 goto 21591 3985 21581 continue 3985 call kazero(nc,no,y,g,w,b(0,:),jerr) 3985 if(jerr.ne.0) return 3985 21591 continue 3986 21571 continue 3986 dev1=0.0 3987 21600 do 21601 ic=1,nc 3987 q(:,ic)=b(0,ic)+g(:,ic) 3988 dev1=dev1-dot_product(w,y(:,ic)*q(:,ic)) 3989 q(:,ic)=exp(q(:,ic)) 3989 sxp=sxp+q(:,ic) 3990 21601 continue 3991 21602 continue 3991 sxpl=w*log(sxp) 3991 21610 do 21611 ic=1,nc 3991 dev1=dev1+dot_product(y(:,ic),sxpl) 3991 21611 continue 3992 21612 continue 3992 21551 continue 3993 21521 continue 3993 21620 do 21621 ic=1,nc 3993 21630 do 21631 i=1,no 3993 if(y(i,ic).gt.0.0) dev0=dev0+w(i)*y(i,ic)*log(y(i,ic)) 3993 21631 continue 3993 21632 continue 3993 21621 continue 3994 21622 continue 3994 dev0=dev0+dev1 3996 alf=1.0 3998 if(flmin .ge. 1.0)goto 21651 3998 eqs=max(eps,flmin) 3998 alf=eqs**(1.0/(nlam-1)) 3998 21651 continue 3999 m=0 3999 mm=0 3999 nin=0 3999 nlp=0 3999 mnl=min(mnlam,nlam) 3999 bs=0.0 3999 shr=shri*dev0 4000 ga=0.0 4001 21660 do 21661 ic=1,nc 4001 r(:,ic)=w*(y(:,ic)-q(:,ic)/sxp) 4002 21670 do 21671 j=1,ni 4002 if(ju(j).ne.0) ga(j)=ga(j)+dot_product(r(:,ic),x(:,j))**2 4002 21671 continue 4003 21672 continue 4003 21661 continue 4004 21662 continue 4004 ga=sqrt(ga) 4005 21680 do 21681 ilm=1,nlam 4005 al0=al 4006 if(flmin .lt. 1.0)goto 21701 4006 al=ulam(ilm) 4006 goto 21691 4007 21701 if(ilm .le. 2)goto 21711 4007 al=al*alf 4007 goto 21691 4008 21711 if(ilm .ne. 1)goto 21721 4008 al=big 4008 goto 21731 4009 21721 continue 4009 al0=0.0 4010 21740 do 21741 j=1,ni 4010 if(ju(j).eq.0)goto 21741 4010 if(vp(j).gt.0.0) al0=max(al0,ga(j)/vp(j)) 4010 21741 continue 4011 21742 continue 4011 al0=al0/max(bta,1.0d-3) 4011 al=alf*al0 4012 21731 continue 4013 21691 continue 4013 al2=al*omb 4013 al1=al*bta 4013 tlam=bta*(2.0*al-al0) 4014 21750 do 21751 k=1,ni 4014 if(ixx(k).eq.1)goto 21751 4014 if(ju(k).eq.0)goto 21751 4015 if(ga(k).gt.tlam*vp(k)) ixx(k)=1 4016 21751 continue 4017 21752 continue 4017 10880 continue 4018 21760 continue 4018 21761 continue 4018 ix=0 4018 jx=ix 4018 kx=jx 4018 t=0.0 4019 21770 do 21771 ic=1,nc 4019 t=max(t,maxval(q(:,ic)*(1.0-q(:,ic)/sxp)/sxp)) 4019 21771 continue 4020 21772 continue 4020 if(t .ge. eps)goto 21791 4020 kx=1 4020 goto 21762 4020 21791 continue 4020 t=2.0*t 4020 alt=al1/t 4020 al2t=al2/t 4021 21800 do 21801 ic=1,nc 4022 bs(0,ic)=b(0,ic) 4022 if(nin.gt.0) bs(m(1:nin),ic)=b(m(1:nin),ic) 4023 r(:,ic)=w*(y(:,ic)-q(:,ic)/sxp)/t 4024 d=0.0 4024 if(intr.ne.0) d=sum(r(:,ic)) 4025 if(d .eq. 0.0)goto 21821 4026 b(0,ic)=b(0,ic)+d 4026 r(:,ic)=r(:,ic)-d*w 4026 dlx=max(dlx,d**2) 4027 21821 continue 4028 21801 continue 4029 21802 continue 4029 21830 continue 4029 21831 continue 4029 nlp=nlp+nc 4029 dlx=0.0 4030 21840 do 21841 k=1,ni 4030 if(ixx(k).eq.0)goto 21841 4030 gkn=0.0 4031 21850 do 21851 ic=1,nc 4031 gk(ic)=dot_product(r(:,ic),x(:,k))+b(k,ic)*xv(k) 4032 gkn=gkn+gk(ic)**2 4033 21851 continue 4034 21852 continue 4034 gkn=sqrt(gkn) 4034 u=1.0-alt*vp(k)/gkn 4034 del=b(k,:) 4035 if(u .gt. 0.0)goto 21871 4035 b(k,:)=0.0 4035 goto 21881 4036 21871 continue 4036 b(k,:)=gk*(u/(xv(k)+vp(k)*al2t)) 4037 call chkbnds1(nc,gk,gkn,xv(k),cl(1,k), cl(2,k),vp(k)*al2t,alt*vp( 4039 *k),b(k,:),isc,jerr) if(jerr.ne.0) return 4040 21881 continue 4041 21861 continue 4041 del=b(k,:)-del 4041 if(maxval(abs(del)).le.0.0)goto 21841 4042 21890 do 21891 ic=1,nc 4042 dlx=max(dlx,xv(k)*del(ic)**2) 4043 r(:,ic)=r(:,ic)-del(ic)*w*x(:,k) 4044 21891 continue 4045 21892 continue 4045 if(mm(k) .ne. 0)goto 21911 4045 nin=nin+1 4046 if(nin .le. nx)goto 21931 4046 jx=1 4046 goto 21842 4046 21931 continue 4047 mm(k)=nin 4047 m(nin)=k 4048 21911 continue 4049 21841 continue 4050 21842 continue 4050 if(jx.gt.0)goto 21832 4050 if(dlx.lt.shr)goto 21832 4051 if(nlp .le. maxit)goto 21951 4051 jerr=-ilm 4051 return 4051 21951 continue 4052 21960 continue 4052 21961 continue 4052 nlp=nlp+nc 4052 dlx=0.0 4053 21970 do 21971 l=1,nin 4053 k=m(l) 4053 gkn=0.0 4054 21980 do 21981 ic=1,nc 4054 gk(ic)=dot_product(r(:,ic),x(:,k))+b(k,ic)*xv(k) 4055 gkn=gkn+gk(ic)**2 4056 21981 continue 4057 21982 continue 4057 gkn=sqrt(gkn) 4057 u=1.0-alt*vp(k)/gkn 4057 del=b(k,:) 4058 if(u .gt. 0.0)goto 22001 4058 b(k,:)=0.0 4058 goto 22011 4059 22001 continue 4059 b(k,:)=gk*(u/(xv(k)+vp(k)*al2t)) 4060 call chkbnds1(nc,gk,gkn,xv(k),cl(1,k), cl(2,k),vp(k)*al2t,alt*vp( 4062 *k),b(k,:),isc,jerr) if(jerr.ne.0) return 4063 22011 continue 4064 21991 continue 4064 del=b(k,:)-del 4064 if(maxval(abs(del)).le.0.0)goto 21971 4065 22020 do 22021 ic=1,nc 4065 dlx=max(dlx,xv(k)*del(ic)**2) 4066 r(:,ic)=r(:,ic)-del(ic)*w*x(:,k) 4067 22021 continue 4068 22022 continue 4068 21971 continue 4069 21972 continue 4069 if(dlx.lt.shr)goto 21962 4069 if(nlp .le. maxit)goto 22041 4069 jerr=-ilm 4069 return 4069 22041 continue 4071 goto 21961 4072 21962 continue 4072 goto 21831 4073 21832 continue 4073 if(jx.gt.0)goto 21762 4074 22050 do 22051 ic=1,nc 4075 if((b(0,ic)-bs(0,ic))**2.gt.shr) ix=1 4076 if(ix .ne. 0)goto 22071 4077 22080 do 22081 j=1,nin 4077 k=m(j) 4078 if(xv(k)*(b(k,ic)-bs(k,ic))**2 .le. shr)goto 22101 4078 ix=1 4078 goto 22082 4078 22101 continue 4080 22081 continue 4081 22082 continue 4081 22071 continue 4082 22110 do 22111 i=1,no 4082 fi=b(0,ic)+g(i,ic) 4084 if(nin.gt.0) fi=fi+dot_product(b(m(1:nin),ic),x(i,m(1:nin))) 4085 fi=min(max(exmn,fi),exmx) 4085 sxp(i)=sxp(i)-q(i,ic) 4086 q(i,ic)=min(max(emin*sxp(i),exp(fi)),emax*sxp(i)) 4087 sxp(i)=sxp(i)+q(i,ic) 4088 22111 continue 4089 22112 continue 4089 22051 continue 4090 22052 continue 4090 s=-sum(b(0,:))/nc 4090 b(0,:)=b(0,:)+s 4091 if(jx.gt.0)goto 21762 4092 if(ix .ne. 0)goto 22131 4093 22140 do 22141 k=1,ni 4093 if(ixx(k).eq.1)goto 22141 4093 if(ju(k).eq.0)goto 22141 4093 ga(k)=0.0 4093 22141 continue 4094 22142 continue 4094 22150 do 22151 ic=1,nc 4094 r(:,ic)=w*(y(:,ic)-q(:,ic)/sxp) 4095 22160 do 22161 k=1,ni 4095 if(ixx(k).eq.1)goto 22161 4095 if(ju(k).eq.0)goto 22161 4096 ga(k)=ga(k)+dot_product(r(:,ic),x(:,k))**2 4097 22161 continue 4098 22162 continue 4098 22151 continue 4099 22152 continue 4099 ga=sqrt(ga) 4100 22170 do 22171 k=1,ni 4100 if(ixx(k).eq.1)goto 22171 4100 if(ju(k).eq.0)goto 22171 4101 if(ga(k) .le. al1*vp(k))goto 22191 4101 ixx(k)=1 4101 ix=1 4101 22191 continue 4102 22171 continue 4103 22172 continue 4103 if(ix.eq.1) go to 10880 4104 goto 21762 4105 22131 continue 4106 goto 21761 4107 21762 continue 4107 if(kx .le. 0)goto 22211 4107 jerr=-20000-ilm 4107 goto 21682 4107 22211 continue 4108 if(jx .le. 0)goto 22231 4108 jerr=-10000-ilm 4108 goto 21682 4108 22231 continue 4108 devi=0.0 4109 22240 do 22241 ic=1,nc 4110 if(nin.gt.0) a(1:nin,ic,ilm)=b(m(1:nin),ic) 4110 a0(ic,ilm)=b(0,ic) 4111 22250 do 22251 i=1,no 4111 if(y(i,ic).le.0.0)goto 22251 4112 devi=devi-w(i)*y(i,ic)*log(q(i,ic)/sxp(i)) 4113 22251 continue 4114 22252 continue 4114 22241 continue 4115 22242 continue 4115 kin(ilm)=nin 4115 alm(ilm)=al 4115 lmu=ilm 4116 dev(ilm)=(dev1-devi)/dev0 4117 if(ilm.lt.mnl)goto 21681 4117 if(flmin.ge.1.0)goto 21681 4118 me=0 4118 22260 do 22261 j=1,nin 4118 if(a(j,1,ilm).ne.0.0) me=me+1 4118 22261 continue 4118 22262 continue 4118 if(me.gt.ne)goto 21682 4119 if(dev(ilm).gt.devmax)goto 21682 4119 if(dev(ilm)-dev(ilm-1).lt.sml)goto 21682 4120 21681 continue 4121 21682 continue 4121 g=log(q) 4121 22270 do 22271 i=1,no 4121 g(i,:)=g(i,:)-sum(g(i,:))/nc 4121 22271 continue 4122 22272 continue 4122 deallocate(sxp,b,bs,r,q,mm,is,ga,ixx,gk,del,sxpl) 4123 return 4124 end 4125 subroutine multsprlognetn(parm,no,ni,nc,x,ix,jx,y,g,w,ju,vp,cl,ne, 4127 *nx,nlam, flmin,ulam,shri,intr,maxit,xv,xb,xs,lmu,a0,a,m,kin,dev0, *dev,alm,nlp,jerr) implicit double precision(a-h,o-z) 4128 double precision x(*),y(no,nc),g(no,nc),w(no),vp(ni) 4129 double precision ulam(nlam),xb(ni),xs(ni),xv(ni) 4130 double precision a(nx,nc,nlam),a0(nc,nlam),dev(nlam),alm(nlam),cl( 4131 *2,ni) integer ix(*),jx(*),ju(ni),m(nx),kin(nlam) 4132 double precision, dimension (:,:), allocatable :: q,r,b,bs double precision, dimension (:), allocatable :: sxp,sxpl,ga,gk double precision, dimension (:), allocatable :: del,sc,svr integer, dimension (:), allocatable :: mm,is,iy,isc allocate(b(0:ni,1:nc),stat=jerr) if(jerr.ne.0) return allocate(bs(0:ni,1:nc),stat=jerr) if(jerr.ne.0) return allocate(q(1:no,1:nc),stat=jerr) if(jerr.ne.0) return allocate(r(1:no,1:nc),stat=jerr) if(jerr.ne.0) return call get_int_parms(sml,eps,big,mnlam,devmax,pmin,exmx) 4146 exmn=-exmx 4147 allocate(mm(1:ni),stat=jerr) 4148 if(jerr.ne.0) return 4149 allocate(ga(1:ni),stat=jerr) 4150 if(jerr.ne.0) return 4151 allocate(gk(1:nc),stat=jerr) 4152 if(jerr.ne.0) return 4153 allocate(del(1:nc),stat=jerr) 4154 if(jerr.ne.0) return 4155 allocate(iy(1:ni),stat=jerr) 4156 if(jerr.ne.0) return 4157 allocate(is(1:max(nc,ni)),stat=jerr) 4158 if(jerr.ne.0) return 4159 allocate(sxp(1:no),stat=jerr) 4160 if(jerr.ne.0) return 4161 allocate(sxpl(1:no),stat=jerr) 4162 if(jerr.ne.0) return 4163 allocate(svr(1:nc),stat=jerr) 4164 if(jerr.ne.0) return 4165 allocate(sc(1:no),stat=jerr) 4166 if(jerr.ne.0) return 4167 allocate(isc(1:nc),stat=jerr) 4168 if(jerr.ne.0) return 4169 pmax=1.0-pmin 4169 emin=pmin/pmax 4169 emax=1.0/emin 4170 bta=parm 4170 omb=1.0-bta 4170 dev1=0.0 4170 dev0=0.0 4171 22280 do 22281 ic=1,nc 4171 q0=dot_product(w,y(:,ic)) 4172 if(q0 .gt. pmin)goto 22301 4172 jerr =8000+ic 4172 return 4172 22301 continue 4173 if(q0 .lt. pmax)goto 22321 4173 jerr =9000+ic 4173 return 4173 22321 continue 4174 b(1:ni,ic)=0.0 4175 if(intr .ne. 0)goto 22341 4175 q0=1.0/nc 4175 b(0,ic)=0.0 4175 goto 22351 4176 22341 continue 4176 b(0,ic)=log(q0) 4176 dev1=dev1-q0*b(0,ic) 4176 22351 continue 4177 22331 continue 4177 22281 continue 4178 22282 continue 4178 if(intr.eq.0) dev1=log(float(nc)) 4178 iy=0 4178 al=0.0 4179 if(nonzero(no*nc,g) .ne. 0)goto 22371 4180 b(0,:)=b(0,:)-sum(b(0,:))/nc 4180 sxp=0.0 4181 22380 do 22381 ic=1,nc 4181 q(:,ic)=exp(b(0,ic)) 4181 sxp=sxp+q(:,ic) 4181 22381 continue 4182 22382 continue 4182 goto 22391 4183 22371 continue 4183 22400 do 22401 i=1,no 4183 g(i,:)=g(i,:)-sum(g(i,:))/nc 4183 22401 continue 4183 22402 continue 4183 sxp=0.0 4184 if(intr .ne. 0)goto 22421 4184 b(0,:)=0.0 4184 goto 22431 4185 22421 continue 4185 call kazero(nc,no,y,g,w,b(0,:),jerr) 4185 if(jerr.ne.0) return 4185 22431 continue 4186 22411 continue 4186 dev1=0.0 4187 22440 do 22441 ic=1,nc 4187 q(:,ic)=b(0,ic)+g(:,ic) 4188 dev1=dev1-dot_product(w,y(:,ic)*q(:,ic)) 4189 q(:,ic)=exp(q(:,ic)) 4189 sxp=sxp+q(:,ic) 4190 22441 continue 4191 22442 continue 4191 sxpl=w*log(sxp) 4191 22450 do 22451 ic=1,nc 4191 dev1=dev1+dot_product(y(:,ic),sxpl) 4191 22451 continue 4192 22452 continue 4192 22391 continue 4193 22361 continue 4193 22460 do 22461 ic=1,nc 4193 22470 do 22471 i=1,no 4193 if(y(i,ic).gt.0.0) dev0=dev0+w(i)*y(i,ic)*log(y(i,ic)) 4193 22471 continue 4193 22472 continue 4193 22461 continue 4194 22462 continue 4194 dev0=dev0+dev1 4196 alf=1.0 4198 if(flmin .ge. 1.0)goto 22491 4198 eqs=max(eps,flmin) 4198 alf=eqs**(1.0/(nlam-1)) 4198 22491 continue 4199 m=0 4199 mm=0 4199 nin=0 4199 nlp=0 4199 mnl=min(mnlam,nlam) 4199 bs=0.0 4200 shr=shri*dev0 4200 ga=0.0 4201 22500 do 22501 ic=1,nc 4201 r(:,ic)=w*(y(:,ic)-q(:,ic)/sxp) 4201 svr(ic)=sum(r(:,ic)) 4202 22510 do 22511 j=1,ni 4202 if(ju(j).eq.0)goto 22511 4203 jb=ix(j) 4203 je=ix(j+1)-1 4204 gj=dot_product(r(jx(jb:je),ic),x(jb:je)) 4205 ga(j)=ga(j)+((gj-svr(ic)*xb(j))/xs(j))**2 4206 22511 continue 4207 22512 continue 4207 22501 continue 4208 22502 continue 4208 ga=sqrt(ga) 4209 22520 do 22521 ilm=1,nlam 4209 al0=al 4210 if(flmin .lt. 1.0)goto 22541 4210 al=ulam(ilm) 4210 goto 22531 4211 22541 if(ilm .le. 2)goto 22551 4211 al=al*alf 4211 goto 22531 4212 22551 if(ilm .ne. 1)goto 22561 4212 al=big 4212 goto 22571 4213 22561 continue 4213 al0=0.0 4214 22580 do 22581 j=1,ni 4214 if(ju(j).eq.0)goto 22581 4214 if(vp(j).gt.0.0) al0=max(al0,ga(j)/vp(j)) 4214 22581 continue 4215 22582 continue 4215 al0=al0/max(bta,1.0d-3) 4215 al=alf*al0 4216 22571 continue 4217 22531 continue 4217 al2=al*omb 4217 al1=al*bta 4217 tlam=bta*(2.0*al-al0) 4218 22590 do 22591 k=1,ni 4218 if(iy(k).eq.1)goto 22591 4218 if(ju(k).eq.0)goto 22591 4219 if(ga(k).gt.tlam*vp(k)) iy(k)=1 4220 22591 continue 4221 22592 continue 4221 10880 continue 4222 22600 continue 4222 22601 continue 4222 ixx=0 4222 jxx=ixx 4222 kxx=jxx 4222 t=0.0 4223 22610 do 22611 ic=1,nc 4223 t=max(t,maxval(q(:,ic)*(1.0-q(:,ic)/sxp)/sxp)) 4223 22611 continue 4224 22612 continue 4224 if(t .ge. eps)goto 22631 4224 kxx=1 4224 goto 22602 4224 22631 continue 4224 t=2.0*t 4224 alt=al1/t 4224 al2t=al2/t 4225 22640 do 22641 ic=1,nc 4225 bs(0,ic)=b(0,ic) 4225 if(nin.gt.0) bs(m(1:nin),ic)=b(m(1:nin),ic) 4226 r(:,ic)=w*(y(:,ic)-q(:,ic)/sxp)/t 4226 svr(ic)=sum(r(:,ic)) 4227 if(intr .eq. 0)goto 22661 4227 b(0,ic)=b(0,ic)+svr(ic) 4227 r(:,ic)=r(:,ic)-svr(ic)*w 4228 dlx=max(dlx,svr(ic)**2) 4229 22661 continue 4230 22641 continue 4231 22642 continue 4231 22670 continue 4231 22671 continue 4231 nlp=nlp+nc 4231 dlx=0.0 4232 22680 do 22681 k=1,ni 4232 if(iy(k).eq.0)goto 22681 4233 jb=ix(k) 4233 je=ix(k+1)-1 4233 del=b(k,:) 4233 gkn=0.0 4234 22690 do 22691 ic=1,nc 4235 u=(dot_product(r(jx(jb:je),ic),x(jb:je))-svr(ic)*xb(k))/xs(k) 4236 gk(ic)=u+del(ic)*xv(k) 4236 gkn=gkn+gk(ic)**2 4237 22691 continue 4238 22692 continue 4238 gkn=sqrt(gkn) 4238 u=1.0-alt*vp(k)/gkn 4239 if(u .gt. 0.0)goto 22711 4239 b(k,:)=0.0 4239 goto 22721 4240 22711 continue 4241 b(k,:)=gk*(u/(xv(k)+vp(k)*al2t)) 4242 call chkbnds1(nc,gk,gkn,xv(k),cl(1,k),cl(2,k), vp(k)*al2t,alt*vp( 4244 *k),b(k,:),isc,jerr) if(jerr.ne.0) return 4245 22721 continue 4246 22701 continue 4246 del=b(k,:)-del 4246 if(maxval(abs(del)).le.0.0)goto 22681 4247 22730 do 22731 ic=1,nc 4247 dlx=max(dlx,xv(k)*del(ic)**2) 4248 r(jx(jb:je),ic)=r(jx(jb:je),ic) -del(ic)*w(jx(jb:je))*(x(jb:je)-x 4250 *b(k))/xs(k) 22731 continue 4251 22732 continue 4251 if(mm(k) .ne. 0)goto 22751 4251 nin=nin+1 4252 if(nin .le. nx)goto 22771 4252 jxx=1 4252 goto 22682 4252 22771 continue 4253 mm(k)=nin 4253 m(nin)=k 4254 22751 continue 4255 22681 continue 4256 22682 continue 4256 if(jxx.gt.0)goto 22672 4257 if(dlx.lt.shr)goto 22672 4257 if(nlp .le. maxit)goto 22791 4257 jerr=-ilm 4257 return 4257 22791 continue 4258 22800 continue 4258 22801 continue 4258 nlp=nlp+nc 4258 dlx=0.0 4259 22810 do 22811 l=1,nin 4259 k=m(l) 4259 jb=ix(k) 4259 je=ix(k+1)-1 4259 del=b(k,:) 4259 gkn=0.0 4260 22820 do 22821 ic=1,nc 4261 u=(dot_product(r(jx(jb:je),ic),x(jb:je)) -svr(ic)*xb(k))/xs(k) 4263 gk(ic)=u+del(ic)*xv(k) 4263 gkn=gkn+gk(ic)**2 4264 22821 continue 4265 22822 continue 4265 gkn=sqrt(gkn) 4265 u=1.0-alt*vp(k)/gkn 4266 if(u .gt. 0.0)goto 22841 4266 b(k,:)=0.0 4266 goto 22851 4267 22841 continue 4268 b(k,:)=gk*(u/(xv(k)+vp(k)*al2t)) 4269 call chkbnds1(nc,gk,gkn,xv(k),cl(1,k),cl(2,k), vp(k)*al2t,alt*vp( 4271 *k),b(k,:),isc,jerr) if(jerr.ne.0) return 4272 22851 continue 4273 22831 continue 4273 del=b(k,:)-del 4273 if(maxval(abs(del)).le.0.0)goto 22811 4274 22860 do 22861 ic=1,nc 4274 dlx=max(dlx,xv(k)*del(ic)**2) 4275 r(jx(jb:je),ic)=r(jx(jb:je),ic) -del(ic)*w(jx(jb:je))*(x(jb:je)-x 4277 *b(k))/xs(k) 22861 continue 4278 22862 continue 4278 22811 continue 4279 22812 continue 4279 if(dlx.lt.shr)goto 22802 4279 if(nlp .le. maxit)goto 22881 4279 jerr=-ilm 4279 return 4279 22881 continue 4281 goto 22801 4282 22802 continue 4282 goto 22671 4283 22672 continue 4283 if(jxx.gt.0)goto 22602 4284 22890 do 22891 ic=1,nc 4285 if((b(0,ic)-bs(0,ic))**2.gt.shr) ixx=1 4286 if(ixx .ne. 0)goto 22911 4287 22920 do 22921 j=1,nin 4287 k=m(j) 4288 if(xv(k)*(b(k,ic)-bs(k,ic))**2 .le. shr)goto 22941 4288 ixx=1 4288 goto 22922 4288 22941 continue 4290 22921 continue 4291 22922 continue 4291 22911 continue 4292 sc=b(0,ic)+g(:,ic) 4292 b0=0.0 4293 22950 do 22951 j=1,nin 4293 l=m(j) 4293 jb=ix(l) 4293 je=ix(l+1)-1 4294 sc(jx(jb:je))=sc(jx(jb:je))+b(l,ic)*x(jb:je)/xs(l) 4295 b0=b0-b(l,ic)*xb(l)/xs(l) 4296 22951 continue 4297 22952 continue 4297 sc=min(max(exmn,sc+b0),exmx) 4298 sxp=sxp-q(:,ic) 4299 q(:,ic)=min(max(emin*sxp,exp(sc)),emax*sxp) 4300 sxp=sxp+q(:,ic) 4301 22891 continue 4302 22892 continue 4302 s=sum(b(0,:))/nc 4302 b(0,:)=b(0,:)-s 4303 if(jxx.gt.0)goto 22602 4304 if(ixx .ne. 0)goto 22971 4305 22980 do 22981 j=1,ni 4305 if(iy(j).eq.1)goto 22981 4305 if(ju(j).eq.0)goto 22981 4305 ga(j)=0.0 4305 22981 continue 4306 22982 continue 4306 22990 do 22991 ic=1,nc 4306 r(:,ic)=w*(y(:,ic)-q(:,ic)/sxp) 4307 23000 do 23001 j=1,ni 4307 if(iy(j).eq.1)goto 23001 4307 if(ju(j).eq.0)goto 23001 4308 jb=ix(j) 4308 je=ix(j+1)-1 4309 gj=dot_product(r(jx(jb:je),ic),x(jb:je)) 4310 ga(j)=ga(j)+((gj-svr(ic)*xb(j))/xs(j))**2 4311 23001 continue 4312 23002 continue 4312 22991 continue 4313 22992 continue 4313 ga=sqrt(ga) 4314 23010 do 23011 k=1,ni 4314 if(iy(k).eq.1)goto 23011 4314 if(ju(k).eq.0)goto 23011 4315 if(ga(k) .le. al1*vp(k))goto 23031 4315 iy(k)=1 4315 ixx=1 4315 23031 continue 4316 23011 continue 4317 23012 continue 4317 if(ixx.eq.1) go to 10880 4318 goto 22602 4319 22971 continue 4320 goto 22601 4321 22602 continue 4321 if(kxx .le. 0)goto 23051 4321 jerr=-20000-ilm 4321 goto 22522 4321 23051 continue 4322 if(jxx .le. 0)goto 23071 4322 jerr=-10000-ilm 4322 goto 22522 4322 23071 continue 4322 devi=0.0 4323 23080 do 23081 ic=1,nc 4324 if(nin.gt.0) a(1:nin,ic,ilm)=b(m(1:nin),ic) 4324 a0(ic,ilm)=b(0,ic) 4325 23090 do 23091 i=1,no 4325 if(y(i,ic).le.0.0)goto 23091 4326 devi=devi-w(i)*y(i,ic)*log(q(i,ic)/sxp(i)) 4327 23091 continue 4328 23092 continue 4328 23081 continue 4329 23082 continue 4329 kin(ilm)=nin 4329 alm(ilm)=al 4329 lmu=ilm 4330 dev(ilm)=(dev1-devi)/dev0 4331 if(ilm.lt.mnl)goto 22521 4331 if(flmin.ge.1.0)goto 22521 4332 me=0 4332 23100 do 23101 j=1,nin 4332 if(a(j,1,ilm).ne.0.0) me=me+1 4332 23101 continue 4332 23102 continue 4332 if(me.gt.ne)goto 22522 4333 if(dev(ilm).gt.devmax)goto 22522 4333 if(dev(ilm)-dev(ilm-1).lt.sml)goto 22522 4334 22521 continue 4335 22522 continue 4335 g=log(q) 4335 23110 do 23111 i=1,no 4335 g(i,:)=g(i,:)-sum(g(i,:))/nc 4335 23111 continue 4336 23112 continue 4336 deallocate(sxp,b,bs,r,q,mm,is,sc,ga,iy,gk,del,sxpl) 4337 return 4338 end 4339 subroutine psort7 (v,a,ii,jj) implicit double precision(a-h,o-z) c c puts into a the permutation vector which sorts v into c increasing order. the array v is not modified. c only elements from ii to jj are considered. c arrays iu(k) and il(k) permit sorting up to 2**(k+1)-1 elements c c this is a modification of cacm algorithm #347 by r. c. singleton, c which is a modified hoare quicksort. c dimension a(jj),v(jj),iu(20),il(20) integer t,tt integer a double precision v m=1 i=ii j=jj 10 if (i.ge.j) go to 80 20 k=i ij=(j+i)/2 t=a(ij) vt=v(t) if (v(a(i)).le.vt) go to 30 a(ij)=a(i) a(i)=t t=a(ij) vt=v(t) 30 l=j if (v(a(j)).ge.vt) go to 50 a(ij)=a(j) a(j)=t t=a(ij) vt=v(t) if (v(a(i)).le.vt) go to 50 a(ij)=a(i) a(i)=t t=a(ij) vt=v(t) go to 50 40 a(l)=a(k) a(k)=tt 50 l=l-1 if (v(a(l)).gt.vt) go to 50 tt=a(l) vtt=v(tt) 60 k=k+1 if (v(a(k)).lt.vt) go to 60 if (k.le.l) go to 40 if (l-i.le.j-k) go to 70 il(m)=i iu(m)=l i=k m=m+1 go to 90 70 il(m)=k iu(m)=j j=l m=m+1 go to 90 80 m=m-1 if (m.eq.0) return i=il(m) j=iu(m) 90 if (j-i.gt.10) go to 20 if (i.eq.ii) go to 10 i=i-1 100 i=i+1 if (i.eq.j) go to 80 t=a(i+1) vt=v(t) if (v(a(i)).le.vt) go to 100 k=i 110 a(k+1)=a(k) k=k-1 if (vt.lt.v(a(k))) go to 110 a(k+1)=t go to 100 end glmnet/NAMESPACE0000644000176200001440000000262413240602077012764 0ustar liggesusersuseDynLib("glmnet") importFrom(utils,head,tail,packageDescription) importFrom("graphics", "abline", "axis", "matplot", "points", "segments", "text") import("methods") importFrom("stats", "approx", "coef", "median", "predict", "rmultinom", "runif", "weighted.mean") import(Matrix) import(foreach) export(glmnet, print.glmnet,plot.glmnet,plot.multnet,plot.mrelnet,predict.glmnet,coef.glmnet,coef.cv.glmnet,predict.cv.glmnet,plot.cv.glmnet,deviance.glmnet, cv.glmnet, cv.elnet,cv.lognet,cv.multnet,cv.fishnet,cv.coxnet,cv.mrelnet,getmin,auc,auc.mat,cvcompute,coxnet.deviance,cvtype, lambda.interp,response.coxnet,rmult,glmnet_softmax,na.mean,glmnet.control, predict.elnet,predict.lognet,predict.fishnet,mrelnet,predict.multnet,predict.coxnet,predict.mrelnet,nonzeroCoef,plotCoef,jerr,jerr.elnet,jerr.lognet,jerr.fishnet,jerr.coxnet,jerr.mrelnet,elnet,lognet,fishnet,coxnet,getcoef,getcoef.multinomial,coefnorm,check_dots) S3method("print","glmnet") S3method("plot","glmnet") S3method("plot","multnet") S3method("plot","mrelnet") S3method("predict","glmnet") S3method("predict","lognet") S3method("predict","elnet") S3method("predict","coxnet") S3method("predict","fishnet") S3method("predict","mrelnet") S3method("predict","multnet") S3method("coef","glmnet") S3method("coef","cv.glmnet") S3method("predict","cv.glmnet") S3method("plot","cv.glmnet") S3method("deviance","glmnet") glmnet/data/0000755000176200001440000000000012507264754012465 5ustar liggesusersglmnet/data/CoxExample.RData0000644000176200001440000072222512400076717015451 0ustar liggesusersw[1j)VaXx3nc``߮oW)"D:ߌ = Iŕ1' Z0էd@T`~ͦ\sXeo/kNv8ܬ|% nQ/j?w{ =',2׳ na#}+D7 9Pܓ;N ԍ$ݰRꋔ ;r}oP4vwQc#?H35zdL x:naOU'QV+iVcK܇>MBpWhsL OTCuZataۻ[1}"RS(X=D1 ,YgĢ-`фpe\M( neAM^X,PC?2$em(lCi]pC +1:B_sw:Z‚еpPG\:BEw{RH՟DAkۥ0m_a'w1/M`/U` ,pû*X#c 'tr }w˸Яo ~pH RGQǹړ&1(Y^ 10I|{1'0*:wS"V$cEI[zߣ]0~;MUX$m,3 󭿯~3ՋG7zt mvYsgb RxmvARɎG@?7<ҲҎq0=;k1AŜX,ҿ=Gu\R:Xh=@g$Fḳ۽D"ʮ8[q@wW6\>}*<,N12{=8(*c>ҟ?R5gl3, gbC*IJ8 K!ёy1gjO ehV q~Yr$QlYL.} c,tmǥfy`cC ]ψ y*$%N\2r-$?PSS )&zkv̆eNE~qbaXDŰrJv&mw_vM"Qja߬<#H\1%1#6~s^šjK(n39B HrS5Cw@z,ͼO)A6޸=RU6v4rj֘yWX'CY"ctIdh(L zwGd ^\b{DS0?Cӕ>vȐE\:;"\53_¤ɾ&h7PŹ s1lWpu?}=au3P0^I$)]fKGˉ!Hv(%ms[qjU;.:΅^Xڗ _->ˮ`V'Eg ƱqLE Hظ sz֗40DH8w{_yOpS% *a鑦P/?Ď>;[x;L^}.ì&y ~ƍn:r[BQ}a{{b?t:,?pݾuGwo9CGAm`D=a%; .wJx\Y^{.ΟA潦g?>A)3n ~Iطl+y tJ_;eLx5,+0^19m}9i{rZflb <@./0/[>+GOi†mٴcTz [ _QGv/PW0]{IJ\Bȹ3ǰG){ͦ1a,yCK|{+_[n%~=+78?oݐ+6t-<:kQ\nXpTԺgG?cNj{[Vj5%~MJ-\*r]a8;͐_QCSLv8.Z,%*eqQk."-h&OT\c8+,WHZv=Cg=|z 㿳xÜs}c\X?zu Lro|3i F>M@'dž?@<ۮy9~ߗ<`g-03t 95d==<8}_m, B/j+IY&(IiA3o\\c%IVE[QI˘h(`Ў`r&54Re 7;gax7o5l۱OI}o'z@g'J Cbc,|x(ʪ:uZrox..'4+r\;C\֔rǁs|VO'ܹ< ' jA5 1L ?epG[hsr!Vv`˅XLo3Y\- cig^m-+}naDȾ¢-+zpߨ/b#sw|hʃyw/=5ˇKLH}l=,Ч#q0'譔H۶y|Swɶ~Vq >ű e/ZƢE%M.,-~-FFF"kr V&DPuVۢ맼6['qB%%|FP ȹ3mn@ũq16NuSj1`_Wwp hzHq: uUH:|^ B{KpuG Һ`w$)z%NH8Ƕ0wt0>JkNڅ/Zö.Dh-k~e:'7g k7}1eߐ'~ $ҡx"[Uhխ0JHKA 9cQUah{ t}ŋ!)QY|/ZpfЀ~$V]Bݻ/i|Y _w<8.;2@xXx[ <R ƻyP=x2[܁i 'SiIW/¡KCr}i'6ԽlRIx]y#ZH=K!C&۱Q~[lzx&jH`纹d$΋PD@uʷWx'fÙ#s)]jbl~{y#Ο9", O]rwqIgʱn~f;Pc.{Zc-Z"fMg5>!Ώ.ջuAZ>BfG"݉F2&o.zl[TOxm7Zdvzͥ:Ƚ5Sz+֊ [﹍4h^< ޝm3_[blb6W?69 ņyf#tDqv첞?>|j!0e0ƁJŋpHli5{P>Y5aEŐlэSQ{*w]u|/<\]u]\MzKݵif@o*8*:QRBGƴ5黠/#t#fXYO:%"N|=wwacs)-[ e ;nK`ϱZW*5W#իߢvb Pʒ mcunlm }Sj\{*M*Q4\r )mo`[`Wc\ 9̺Ʀ]x "kȅ fa3Hu? %ers:L&qdjIUwasg7R 9+H9 o._)ۥEXt[QQRqJ'b gYnDhp5߁%~|ND|,Q[n@WLBrLݹ40bQЪNKӓNhm9x|yFמaQ$.LVGStA% uCV`}>@y/b>h>d`r_жh 6>,%~BhC~~+gϟUI" j[a)`":ExoHF]H2&}W y`<)"g5TilkwyRc1x8.{-jv %CNVFt[Jnd|ܿ14"Sڞ $L>vջ꣈33El:YcSqu K2-#E5=am UtNXB| H:T9Uwp ilҬ'~GXEnEX&Br˃ػܷJdp( JYZi,1 ;}޲Ɔ÷R`։}:oZ=x?>}/UJRP)kxǷ&:QXL=C V6}Be:'iͼozU ӛ9iP(?0|ʼn #"Ɯ?(ifwlékZt)=;8z^F%v@鎕Ї8+xKOK{⋿mu!2̃-zePm |Iz.G߆o}v\v Lx +40'pٓm] ]߈6LuV8}Vv붗Dz1c-5QN¿9&KO^easO;XaSylf5'3\ y$9_ga9bV:No$ǵaGɔÉXbxR("{wA t+Mv ܽo=iV>"ZT?=OdJƅxf=aLp[I B/>$Þ m8fQ 1"["OQmr%2/fÕ *H;4(!e۶gpeU%VHƽ608}h-W- $U~) )lpvyə4;C36 IAkKUH9&|.Hsop&hД1#}¨]U)M^bJƴqGM?_v?ũZ=39%U !K2OnXn&F d ]gzjɗ8_&1,Xvmzn7^Z+~3Vt^B7` n򊩺]![Ӳ=;1d1m^8#HEN ZŖͬ0gzQi 6 D<%(a%Snq->GӱsWcab|yg[:: l^~:<-{ED%0yDVgƁ\ŁEkg QEmW\-k»^9y̷HM*l9&nu^P ɟvi =}c:k~C둿Ǧs/UaNÒ[fx_DZϑpA+,P#Su,,+zRs.SeB/[zb_7L`;,Vcg_mcҵjpH?hiNDx9ɾi?3 y~9C$y+6]mfʿ)(,IU6:^+4z \?}w<`yQ6SS'p1o/Fǰ!y` Q(H"}ewrBj"v^>YMl<j}IeٰkIp}pCȪ\4w,Th8/oö;o`rR+Y0)z̊~irmC7-Ǔxym&/N[7N;}>냾ǘrqAvmqzgk/N~\UĎ`@SHᄱNH+X #Zoq2۞`{2>&N_fF"YK ̑2z'(skgd. _="Bcm|@ #՘.K7w\ږPJ#?4l@htñfOAW=}Юs>Ou'@k]Jw!nXa~jsSGwIڀ;%\{U"Ep>83|6)QֽK0;`GV.~ \ggO\q*W67EqTeX1S7j6g_ *{W y3Ęj'`__?BNAq{{-;Nּaqۏ H+\ZՄV kѢ0Sio<},)*NT c.~r#8 53`}}qޛg{Oq욕uq5-bw?ZdTq/(-3~~ LʂyR=9%lȂ+1Kf>% 򛈁S+8r,g% ,?=95B8ćC0K(΄C#bn!`2>nЯi>e])?98#EOK߱y' ƞ)|0Gd5h ‴;rglfA|$C@IXyóUw4> bGDv5܍DYv EMFdX.G*}(;/\顿{,^8}ռaQlxrMBz#Am>`<60rމؓ}u>jL Oք`ٿcKisvUݿ)V#g$< #GzpVbz RkSE4 .k+mHXHi9qQ*%1){J>KrX qF0(sK}/`(%.X%]܅nIZ'xB*f~?}}0R856A #f7ur`btUWϨy_ar +8;z ᱦ#p8 ю09RdTt fG_|A=t8?f>kc " ;*,+H?ق]GY7IoxLϾ*> GV 9ix a2Ęd-Hp^ ,wO;-ν0>EX<g<ѾP>S8LB4!˼` V&!{2H8lkOkbwIWbnC~?dXcD4A'~D]ھmOG!@^P)p^/F ) /JT YZw_-gr eu`+wc@M(;qU&{xm9Oe9Z@ѝbaW~Y֬کQPTY fc(/k[d̕s/agu7}$!Rh+#k$j&J'=r}H 1g*'kݒ&bq$'1p|:|Tr7dT٠WXl?SKiѸ8Yə cB05ͥ s ÆZHO3Q{jp.Ew ~};I*˓ZI |P:vΣC?ae"F`#)s困Sw/bĥ.Gطx~=fxhbwyCdW?(0#qؗe{`j8PJzzWdS/>^:>H`SzaxK O?5mcHG0oQ>_G!թBUoo5҆a\ W ˺'J dOL9s`1H; кCMo$ :Zf8LRG1jrjy}k eK8yt?eF¤Tp#e@3NcElDr;WaG_Pzqt/ 6&9-Kn EH9!j+ҞfKNu@% ?(l˩-3*hȍ㿹2je45z u_Ld`ܖ0siKs8y?(v9s=X~D8轪!Nՠw7r-#5$tl-q8m}R?O" i2@ɶAyu+;0q1`-R}UӦIYnj~hFξ 2W[w=;)Dߠ(\{PV#gΛר17֛JA K7s}9Oziw>Y+Y-m[=c6h{!'+x{(.%~8;Wh{W ] -/~gxpz{ғ?ozU"хۣ[>V2 XOnzJq( ?(6|n ڿu,6l.ߞ|ЙZpZh\}g]-%Nlc+ьKVlT=ݱͿRt't6t,wס}ZZFg?G$ [݃d.%HMӞo`AkxE%n-z^zhw[nÚGk mp.(H}_k96J[rV(?٧CY眻Ɯ iqCyC8 zΩZQ y%v% $6=T> _"J]\?v,K]oUj3F9<p л%Fkg zV>땚!WLw %k٢]u!;Vإhǯ8Py' Z^;*\M_ G|`tW`\JdWAWJ܍wڤ \_k@K[B \'iL4Ӌmu[R?tRaFЗ*8(6$tPb]yc\F1 5M2r@ʋ*<+kpx&I/.@@79a)dJt~n+ EX%Dl֛ソO7? U鯮B/c teŁ]߫wSoGv: Ir6ĆCgoK_Fъy0q-z:;D;ļ3Okh(uo!:~JnUbu \<v=x왉"9fՕA ÉC8}^W|p\!u=EE3d͟i62ŀ>*92Ϧnq8eOc,~]Soec[ԁ4!i.1σ|u !cO 1]^2Li\;d> ~k\!KV3-aA]4WX{+m|RrGL)&!7$'-pɐm`ZP^ݮ'3Bv]k!y_f*Gd0q{ 6 ԽS?GjG"އFfz'ҟ8f Ṡ;MeFDF8:jө;`bhQnu\}4Lq&ɏ /N4k]?gd>N!IV'U*xvW/؟>4*WOaq ]ť'1N*e-~2Έ';Ɗh$QO Jαj¬葁Y:@iO u"kϮ@T SWef#jvչ8Z˸#BHBx0*lCo0#8=dWkdt025 ;T ? eKeocˤÚ ԥ+K4lG\ grR 99)YuB婰.~~gPIKY6p\YVY}qX¥ʅD>@iP|bg,`0Wm.^~"_}qeheo+wY݊YnVXT)ekȮa"}pY!pTogޱ')N6]޼5!}.v uZRA_ <>npz;?.\"aͭg!=9`Z]'89jqCSa\ҳ*) M )vԹҸr} WU_ s>6J*Lor[wJr&V==j+FjT;4G4^0)'2vzmhlbu!l>{&p'V*/9ܜVIbuTW_\&9g8#E1ds0R=[FtObG#˗)0mJSpnC^j8sYD6l; 1Bog/.Q pP]Oxlqy8.{fZ>$ᜢlb`LIToߗd¨+f- }><91iAڌ@mk c-ot%@7CNV%gVJj4k֊i35*=qf"yf:R*߇-=z@}JyBHZ>+ Gx~|_[iB\ALXx:|U + orlƛ*}bƧZm7Ow%SРh KIoq͎1PqwzAgDr5.:h;}bt NHv$RN99e>CfZ3{la@$w_ފH`+آ350k V _}H)sPds?0jV/+ƙcIn0H93g:fI0Tzq $"Y0=| _Fhqj#b=,8*u  H\KM-o!yǓ۔o#L8`\S0|?ƒ%׮-U';qy)SyJ84$I6csqA$9%9vFJnkݲnmϩ.cI aO_'2lz@i[txm Dž0$8_p %ކɋ8:n-:yуk_vt+Nu7 ~m@r\Y+VNdQaTTS f,.)@m w3*ћ%l?UX+,ywGh(-/cvA{ca6Ts͵5ҽ1!~صۮ ?`%:Qf5{bF{8}?ħ[pC?%Mi_\Db/\KO\ Iԋ0]&b{n@#]|$gɰ[Y^@2f7<\W'a׷m~g94=SL]Z;2a=n:v[KGTr#ec&ɭpl|O*]:+N wv (W~:U},L þukk8Sr@)z3~|0^jB$.=R`Tnj\e o{ksO5 ՗i)}-^%-c"G.u}^՗eGEbm(.Z͆0? uy4?=7j0߽c/lvh`ݽ+TvÄ ZnUDhӮ 0}3Rs[ eҝuh_`i+:~z { _q,xi(kT6) CaiH 99/5@[V2~&21Y6۪CB!NU~^{fd(ǒ0X? \4C"s ޳#(Z˲f t95ydh[=R5eqNM?ΰgkSW,s>C}b -!H"I>/;SxA=&BN[ay֫` |=2B`igahQy_ro~: u0#[ y CgBc,o*&Kjs}([Aiolio;\Ho.|5#I3W<g^z~xXxǦ/iYu!tH=϶gOԭΌ+~H~]a4K/r jO6Xf:%6w똈sTi8Q{jv?T߽^ߡ5m!仰fop]U Ϣ {m-Sş\_mhym<,y.g^<<6 'Wi.V $2JX"@Gf0Z:#_3]8=`%i\Mi'Ga ݮI;bah4# y%XmU =9q?UWL9qJIȧ;U.xlMY0tlg+ 3Zta4[s(:s9Vvb" d3'J`ް*\CbجLW1x4raKp,}h;mʻz 0y/PͧMRrׂBϙ>9–Q÷ayM㭔erkM5&8X35р^70RxRg+.Y@=|U0R_YϋĚK' >Ti!\dUcQ[L{2lǢG\K/q\PS&Ԙml !U3d-=zOuwkJ(+%ކ n yً&<1%mu Wv~ ZW1I%X6Nµ-nkA-{:'v+5ܩKe\E-BX27x:Lk̇[`8uDUwƃd#(M|rLFدFhb(AʗKu ƭGס1^P*es:?sq%v@;C4?A5 7hy.=T@_B]Zze/8 )Ny"-S:,;.1Dߝw? %Bnh&lY?}?c{FHvfgQ]8r-hi.ݸٴ t5FPmYL+,̈́c_8ځjoY.N=xGl "0@M7ep/ pJoە0ڭ&}c==,nzSW TްqH-,[X+-."!ͥMU..AB1 8ݭμ`T!53ӔdA\~s%S\۰66U>z)L)љ/8hR_F;{δn5vꌲHQY9yʌ=Ӿ-wfg`78!{R$ujWU!&+2IрV="ߕoP^ B?pO 0y Я?="?nکArC@ UF.R%qѾ%.>w[I53,W>ʭ *sZVFY㺎*QsPg0CGY8]8iWRnv܇#/YJL"] _-6mi>3.GJ\b: &qŌ6@[JqJ-d sBݞiLH 㜑}ΉUe[vth'_eқ:hl*yC6"Бz+Akҟ1|&W& p28it0)=lAɃ8 ]b4 >:|}jFZgmxcHLՙ.[C]l/X2+KCLoD[ع` ^|=CjPw"plt͙dͣAtc^S  lq\"sfJGV ПP3:'4pskASpQ^ ;?U.X&0,nsoLc[)}+9 <]ggXq6ˍgaK|Q d[ky*e[XțW i]1&Xc1\ MIIQEZt]+ﶟU %ո5k|{(&S1 Rכ ,tvU r0aB5;X>̂ -h_7\)z"ɵ'kgmZ (7#sB-UX'XF2OVg{~k6]ϖ[c\u:T5gm}zm:0COX,#Dr* t'{wڎφ lm/+<0RFmhgZSf~_3ayW\ Ϲ\$-lf bN1"97qsK8NC9/G=Aa}sn]ͨӍC`0^{f# ʢ0kɁwz!%6.vܣpeG{z46`z㸴\S.r̖K8LRL}w0:&s,(l Śĺv8OQL>1Zó5M T1OlQO|!!XᖴQ#OCWpӤfW v`@Ҷ˴S'I81}֪W=8tv4}%",>d6LF@ͷ>s 0->֥m2 # }PkV:w7ǎ9!ݧ8K<>Z=ӃA>X- IVeX~k-/N:I/f\t$Q\V {c-ıK45#=r}V:%8͋da Ȑqyyh0)<4AKy?:>=;Wqd֦&:L꜄9o 2 c+ ?Gajߛ"@cV ^-"?ޱS i{8JX94A\xsB3̾`_~1zReoCdnMmߓ;K طvtM)=9\0_uYwۑYFgK٠Vp^ql{|l- \klj $ r3ѐy6{AgΙ׽+,@_nj}8*("Wսɍ|ʠv̙fmoȫqy*'ęFgםUDf6歷8u"(=#XBJVm94xh{9vPk6*^NIW<4jUH(tpD'PT 5T9u:8}}-읋c+b*bSBfO߹~g)Oo;?ĮV]rS,;׸YF:LD>#2H+B wTC.FTJWO{ZM9Շ L@% 0 'q^I8(tשJ<2 ;}IT^XOµQƠd4b5y{TG⨂*ЙqQ\f'kwmaPǪIEXb;0 Yn_BHە+) .orxݛ<69\",NOj`V{콿lr玭pg0(#K&v`'cpl2I>7ݲ.jV e]K a)\POUaccٔ+R[NQ(0/zl9f}yTĆ"`\uD ;e| u9 M/3DOl3I\Ifyl򔪱Gӵ&*jpJMҡyߵ菔'ұU{Zñ8eFGDLq۵k0:im4k==`LVxN\ ^,8x= $Y 9ڃ';y {iKۈGa,+܈fǑܥFӲؙ  ǽ mӄ[7{hGcFĈg,-q~t?y"p1麁 >ܙF|} ))B07/sN@Khmwhްxw/ ){|c?m8Z}y{6i1?yл?+N]W;1ۊ]w耮mD&"ɥ'bCX>p - W+G⪆m+Wųka! tԓϚ ?-݃VȠԴ(<(Öctp+o8yYj.ahP褙c/,8Zǜ~?}3.QD,#ۺ6%6y=4ç}5KXUr` eZ+9m[֖tYa)40KN܁]8" J܆uoɥքHQ{'ۋ2WC_8jhP%e8օ> bu.¢-?o`>R03!8d;rdF&F{vGwz-$<Ewev}7;, WP9+awq1q"`óODwW{+ *n||6bJ&`7ļ>F2'$ܛPsbeX25:5iv$_ ||xN|"UA'aBj/3koI sa1hH;:51?$,\ /wsahܚjql&L+xԺi(8ܳIٱ<@C{z:rH,%0}C$%C?ˣ8#P1I4/W`6y%X-*$.+`Ȟ2uK mYsȿFF4'E7kS \0PJd.x t\`GTeq1$̷9bjTb{xwxu{k,ڐCx,ѫ9ϰ)ǥWoU_Ǟwdv-`W\y}͜nޕ S8sn>D]w#aj"`m*{3$(4*-ZKCl@- /.? mWp6BiAN<z#,?c|' JMm(>|줬6h9I%jsӶzؕy o{`Ok!q ydU0K;\/u.n__YBok֧Ϗ!8wC͚3:uLf&o\ÙAXh$e |!! ?K.o`Uf0țeXb u]ŹI $MO`罩8V:o ~K\_,Y qpܝ~D(Wԁ炪 NXlCO Z1l &yr`-}*q ǼE8 `h {]Ll6څvHɲWJɦ{q3 [SWD(`OzI1XS|L3z#:^uZ}<2|YɋfHZVyx ߯᫉ggı[]eW$G$9*g$2нD7l$M&`Z&`ݠ(|`ܟ^j:f Bnyw9w/$ӥ߿}z/%oO ʭuBr#0@#;[Mà+ZCc~v|2I^p Bn{q8%ھCJb0Ũn{{ټ#BmKRO]Tf iO;]OVa_[M:W朙]9K0rτ2N- nTQ=HmS/v2dNad2+']q@J[L2̤0rkDx.·9;C=8:~JGm*a^t͍70)/`S'&L)2[>Oоաk-8Pߺ}A8Ww iw9aT`Jzq&6/|-`? L)fScZc%-WNdmg zc<4ɹ\ SO'iU V bC}ulZ{g\aR򙫱L=8y*G?h!1qgqek0vck?!mHL]Sj*L^eU \ٳ85;bԹ uv `΋.T=Vrͽ% Ca5@)(VBjܴ&u5.V=-Tr~ex=Ҁ1lScNVP%^h/ՅJ{ 1K]5df4#.ӯY|fa@;'_L5Ħr9q9ыEs}>Q i8ok'xgk㬂և^п=~2 T]{>DZ@!8V,tcؑ2HޅF7DW`kbسel(~:ڍvD`I/(Ir7a2rlr)Lf<YSq42tw$Պ۫6 q2\gն|RIJ0껗ikC_zgSŒ{ԌHoJr mwmߴ}@2W<)ӢB=`)uK#j0`_ñ@yw,zXhYy_OTBkk|78u0 Fڅ[TWcvouzj"v]Ro:A\[!dqemܘPQq1wKmH a蛪Ǩ-pfT0wāM/MA"ls\)P~ OU8FQ1g; u:ױpPsTŶm0ti&t99ꥠ/8J叮h␔q5$i2UK)Z`.  x-ܞ!~~x.;UA(:m8HYi*UTB'阾G3O5bذsp!TCtQi[!] v Lo h]=%O}?]A`NJ -^]-@z`I%3}AooJpXM᭑Pl0I܉c&g$^'R1f k bK0Ē1;Eii=>Ĝ/ͰXDG5)`ʲX0V0š)zo2\}?}ow؃ޔzio 4E 6#]l|{={8Ef҆ʙq޿l${ S_%aS{Y9^n/턊=nck챍rppG5[֑Ҟm*#d qaV# MxU3:ʈ"Qp0{y EYL_nh9A".{Oم @SM,aX'19#0YԆtqvg_qL]#0 1ᬩDƖ)-Ptԫ}82w'伣G_bp-8F[\ЄKy 4oq s/|^'Пkڬs_x Nmv,I:ˢ Oo%]Н)4P. Ѣ38C0/<5Hy%F*>+GIkEs=A~}iV[`i\aQ?(thZft (_-yOQ$;t. qׅ];pr.i$Z` 0ܥ✯DJ=!p$NH+q&z[YE$sF3;D=Gva{t^Zkyb粰ޙ^;|-LJ R/T퉦Aˤ4L 0L*߾C71fG֋Kpa%ߏCzĿ8⨠(7VMΊ  ^~wtŏTòeáKש&wI{`Z|̸ ̺+Og@ j:7"fV@kظ vuDxdnm ?PJ:)O+Lx: &c>qXz=^3ZTЦ,e O,`ַm`+?k\HUԹ {2`p*$ךUO=ϥe^xj .p~!XOwim#qSt3Hl"k @q99+Dܰ9E~ L j4Y`yIU-}ug@.Ѻv?F54b )]웫=}ts8-j7IAq.<# ?Ija\}j*^yj:p]w^} Wo~g|{sjjC?bi&c!.Yʹ#|Ew]#y`+$TNd Qoa|qb@}@7z4xB]zӧBq=,$x띀4}>XPz\$k/S;C!:q]bJ'2%6w `cTЩ mƕo$4l~_DwO}Z].q\ .H1ixJ!6/ .L͔$mȽ_ ]^ᰮH=ll4^aѐT6j:h+7tt=wH>pEE$L)>܍K2.榆ȗYPH$л: B#]r_t4l 2F28"0wi%LFʊtƎ0qoF͝0X" ⮨&n3+VX՚`N?|E D} ꬻQ[M 掃`=W" Mu/8L[]>TzMϰՊ@):s sppofА6SC9kaDHTjs2QaFHi:!u&@Zv~)$e<4$pBfJw 5Sح,}fLHAENtkGHhNɖ]ߠ=*;w⁵;˫.c_ Gqy ;-攃P5P;˳wLc{W;d׎Ϭ҆EUlz8Jο?La%3:ԺpV@"==?7y4g.Ko:03*_"J7ewGh;t!ށN:"C,94Gm3B0Ez /zWlݏu P:\{&D #8*s(1.a7ゃsDڠ}q~IOLڷ/^4Ȣc9]> s̩Oq^G3 YK7^!gsLZR-]qpoT2~UQd^5 di2T7! c5@߱-8w7!?ro3|!K-ρ1/ɽP"U%,*2<85tZ}'ƞ D: q`M^oـ?I`?5\?R0JZz~oC}J2~#8z20PrBh[ -zw&}BkiCg*1<%5G )ck ;0AfLC/P~^?  ^$~|?ptbdݒ/(~6"[};{)tFj3˙.~%_L5Ws=PҬ)r=WO_x-UM&aF{GݝANx^4Nf fwq8M }ꊍ|g-M@974(Jq[7~r)P!dhCD"oMl,WUw=<uesۺ11x\*+3DJJI 6Jy=Cp V HL 3_fqC uB/ ̷?z4hg朆E _yqG/}$YBE^OK]Sj`opo(w0s{pYN9@Ps: j@}ٳ<K6"YHdgw\DAjG辖H\d~;&8ɾkT<4/̷6|T[qlӰﺙ?@C Ϟgc ݭ}DMfRq W/8U?5&c:`92~Yq=5[w)AqscPou5ذqfXXzM{GdAJto\|bŅ)]sXntKVB?tv9,32F`^Rv_X;NvLkmgbTYEJ^&!cJRxK s;N9a~]W_&ﷂ}r+ t#vhc6q-6,2H_w=dm1)*yfS;g0igN2}zvZTu '#U_(4v@B[Yq鍬EU 0^ZӃ3&^hK ӫJBR`QBƺ+4ߓX鏷c^]ęw41A[ ~dÖ|'}`a,\ ~;~S0zm`E/y*=RF;z{[*a-.SNh3fCftv:h}$yӰ,繏E4׋$2r~^@y }fH8>@%P^p@TE }]v)S:]服y?Ba,_f+$++[u7iө}\GNXo)l 3UT>m6$ _{M_"SKs\\x{(g >|^Z ^C`09iӷs<]E?H|a;z1MW,iJ'ar`vTp+fS@cJ.G_1rCq OתrO2]pɬ YJDZ59[GP{P& ',aV0: -^H@B3ܖ>sgvEKiqWa>P.lX/8i Q /wn~9 n*`so 98=,popQ@ţ\< 4q QͅD)u8>Sw x*5_~{^AV:1''7g6ku"ke'< lN%xH?:G>l>NNmأ_i$_ ń[R)k1ٽ` k턷C`kT)JKm<{oӄ'Px 8]XPI+g#Ƀ6o?JnbJ9pHW)#P,,,㌣E$ XŜəȺUGHqp2B23D\7g+~ $b8[+׋rIWqZ3ͷZfH1BG(`h_ i}MsY!G r>Y$sV8Lz(JY;ItW> s+U;PaKxۉާ{ffa1uNh!ʽƕE2{Aag3+Id.^S@N2K8@e'Rv"ʡ1Xq4uԛ<qJ#WD+@2cB6`0u+uU>5ۉ# oEiL}E;+ -L܊tEJ0eA3* lW!1fWTS(/;AيHrG*6 7ʼqr@J6 v|rf۷*l8gau<&~ӂ ͳ30!aM3.ksb<{;:0ά4År,yt$rw N2`яxn}PqGYȠ^|gҀT8X**[C5frU$gjd`ePl 5n. VIF<%֍oĝ|ɓoLN]:Nfoc5_\m{r" >XJn' I|OABǚk8) FpJk[='ەמZV6"57N}.}#ʡ譖s j#^P(sW'Yaиʫ0z[N3D#֎TOȺq㉣ K(jQ¡5L#OcÙԷYp螞6ӝW3?oV3W='P]صeo 6WVۓEaf}M"[+0wo,JoDZ4&\,8ų $zcߛzírLH=[w%=X ->r ԝڽBaMie۳K顗pKIΔf w6g+&|** ] n^2m/bb%ze>_xNUHM5Xдrw:V K*6ykdp/X',ﲾNV!>~#ѕqժ3įrE˴ŤSa0n'&C1VY8\.z;:86|D>~JV_㕴ۇz8J J%Lnh©c4}d/IoOW^6d6х7?jF"Nv]tҤhe\2's+|瑺VmIruw*oVH~{N nYqy Wc}/ |~uA05XNGTBq#/9]уi+:wa b\'rlLj'WfMAշ#O]y ņ,~T!8x29fN{'>?d6XaRȩ qr_I^2rCn%[ uX걷JZ6 !ʪaP&ZmG"{&2]5]Q[N5AQl xk 'q oD:b4;nna9X>5OVZ۰;<L&:Ӈw<X|_#rWai= _㞗Rt) "~= Uu<-+;S0YЇ^~?],3fsd_7l4m9˲ޙâg}a NPX`Oӕ˂L?rS38VJ ^g HXg)dk8=[e6WƗ@]}u_}~azQNٵ#;JXՑb ^",pvOLENJاk~M*Ո (niWch'*-vTv_pXT{cB8')ܰ }<S;wAïy8ؠvMUsRQ^ol R̈̏.|Ԫ͋W.wK7P ɓ"tQFK_dZa2}țrTSvcáJP71Cu" hiũו<`!,/O9sFu#R>pÊ[ݫa0yF盵(2ɵ{\]#pu=BJaDYwIf,y3ES, sm09J{,Pݫ ~q1`6+?蜬v`x ~.},6$??V#K: U3*5]cqTk!Hu\8z" ^JvuŔu񸶏1gKhqwL(jyѿqvŤ0o;)8$;hH7̞'R{yV{ᠹ+w;S 暉> mגBqʧ0rDqy=^'jSW~FiflTCO.NGh/d=+x>n5@-ٶij&n <6%6B̋vDʳ|1ΫnPq\V&'"C9\1滌14< ?򛀡e\6 j Kkpb%G°{kL~83>p1駓`. >ўE%ШPZf܂]I#OC#2{$BR e:Q9pRX'AE<oJ~z滔Wz£Wjpݥ1 ҰqOr ڢ,ʭa7u#g .yCƑH UЭ/iA^ ~l;Gb9;wH#I`xZ^Xfq#Ѓ4Q1t|U'x(*OEXV>T5L2gp1k&IFmq^8A?~ 'iLXӋqxFbP53R`tzVGw2۰}{ \Qv腗Pe`9Z9I_9rXI̋R!^ݮبd #Mwβckm߆aCaXp zäΘV5oew]g5O"UF.ˮ3$P;sOS2ö7}d O [)pq3XhwnKTP`V\Swj.{r7.O1, X0١{wϿ=Rld>U:ډO~U'pY&PT8 @kW]Sϱ㩉_GTV?&6NgM0Êey_2T(*-㚟eJqGe0i8ksg>I05ؿ3(Pk87nm+jL.6[j$=rÆ Kמ΁2).yf;G}a((z PXkV~WaNjD6+L=.Fud5aI8o1Ɛ>=k99ůW CQsu+pB%'"Y uXb3EcdԼ-*#zBNT=XJ{F)\%xWMŪHXMP# BC @Y+ڋ缅/b\A1P sBHe'pBn8ד`A_׋\^;~X Ru8K|܉#> Յ+e C,w?K{Z3ǹ.CeQ͇3v/OFLeújWϲ {>I58z?]P8S xߋvP(X~w2i%hcw?(]ufi2?.Y EǙӧ}0jwu, Tz:tƌoWB߉LW`ZZn:d)4Ҹ~9v{d:@kzckX1p؛GV<=P'WG}5}O99@}^NR,7p#UcOo,V*G`i|,dy~&G辈Ŗ!S?GN F;3Mq y=荋Sb?i\&4ˎ}zo 36)hh?J(Fl1X'ޮ<0ۗ_AMߓ4:öu4-ٮ =]dl K^\AMW&fD* 85\>UvSRxUO3ip+] nsp[4J@;p@6H9 &1_FN"1]'.žWn:@SP0Ïs6bS~/vԜ=2wn~DlسɕJ_0u; è~^v3HCȝ'ps[' sߟІyDRin֩@Ua~8ݎMއ\NOH|eOpcRׂjp❗춿]T;᫵jG`Ig%up*/;Z>RXk)bNV皷f[nvZjBi^ ѽ  dbZ0%{"{ô]y7*H&=Nަ~ MeXB}S+y+{*'e*a Rw+=%7E_ej'1S|$te#NeB|`rm7n-?U$ޟLDZ[U H?~2p*.ٌ_|KA >JY}rq yp6Vдr|P:ʾ+9Q0{JΪrT`7K5;+D*h,pJ]bely98~7fAѲIeBɧQm/l zsaN"ٳxgE9N\xFyYc#ӈLr'>wG+8 U6'!V݇ xAIB_w5SyY.tL+_{=5%(zjq\ }K1%wڰRF' IHxZUHb9G58V!ːeO~ F@&oe䊍Cwa5Q1U xq"+ wGEPsU2mW8R 㥆EC#X(4f3dgN8Ie%%^rӿ8"`oe+bZP{"fٙMxŅz!0;١% IRdV&ꄦ{v t8vyh(u㏃R#_%c |^|EICK ,3U{mnbBSX.HQKҼCv<PMĮ ӞPZ/rŴM[ӆpZG͠a "{#ӿ_C3_Eyb;7hsv1`3=pPtDXHĄQAQ"/;lrUɁjD*/8چiuJtǻpVqѰqfpx^Eʞ?wBkc)rNað,ėHfgM:oY\+K864X,t!F\oqqTɘu^BNy^jN/-aQч8Mst]uFYtYQI0ܹVWrB3S]qTC8c36쫙أ76بb?\7WM"w{l,1v T.`ng['0iG8Xd)#}'|N6BRΙʩ+5` =7Hi$n 7J:9UÄ|ZuqO<6fв1^Ϟ҉F#<sybd`P45h04˂'pm |Qg| /P.0.sVqr<"\ѳ0ht X%4?aGdDuL'8;u+Q~`ı%nRo%)XS_˜Wܨ M?$5gబƽknEゥ𢔌+{_:X\c~g6_M']p㡟5/~{AA/z~^Y܈gϊ||ثt =OCWOΫZA7ΰ[@v#T+U01~"T&w/ݯ!0L=??OU8}cd8dW5†S1_jn]6(3 QؖP,  ??L)5眽B"R 2ͶNHa.疿뭁Sڙe9 =t<;ki6s͸jo;cY#Vqn/qմ=l)n&Ԗ:7%g+jHw5\ ]TunS/BA@t\dTe^* Dl/lMݺ|>j{q`GGZo:rw=%ƴ)s(̟Ak> )ü!=bzpa2p2dp2Ƈ^Y 3/[߂o۹_ux]O󘖊଩cg.4܄ڿ?5aݷְK*uk-"ߨOTۊ8uBu]L%[)Y,8x7 tf9j% P᤹cwX߿h7=-٫B]_B>ZX5C_6'?AJ|}a0et!VD=b5Y%lLc K?ﲋ;a~yn<(7 KXū&P|~ar9 #|bUw3$J#o b;_Pto֥ &`j~? ~O+y!"CO; T"503&IBxOM=ǖd{[2QrG>NRC_K&p9e8VV o\`5 hu4*H{e $28ɽޞn)cwWa0DR(vef)\McęjxAayE5HN_0'NM 6rN%%Ώ~ `z<1Y@Z7XpZ$:.kh,_0rc#%/1F6dB#cql>Өih bWU%NJ:"u~dWr9I=xP, FUw,JdjwPf9lu\;ba vZHU!mTwP-48Ǎ?/K/ZuXŠa¼jYցM}Nh s`GIȫ(qcV6wZZySZ4g= yo݄TJ"0Ej=> ? 8WaT;ybs3Aà}0vm4F {]M23 ;p"--xQGJfyBOVW."ę5P6FJ 9-¾"lh c6<0~2*K|aRsm%R{5R-3oWF TUχO4KƟS Tӕ?NL\ö`[Y,,(0z Vޒ+"0 ^MM1BMI*1|f -fq(åk.U2W11AWWj8-䠝sOLƮʮai{\G,3oao,XC\9u =4C!ۡϼ/x}"̊ f;SGC0V=.ꏳo"SÎz'kV8d@و^N~'&1|4Fz 0[ 6z099. mθR}v9lw]ki??{>i)\(t7k)hulI\:#sU89\0پ&3{ xCcP{-[+Ŧb.~f-lNWC!30,=*(=i:W0+ 67yϏ[Cw#oq A$+fcu^u!F޿[&14ִ@ rޜz $f>]t&EQ` }z*NM* z X_0`sMz_̽.U7Xw0)'N0Lb{5=ory1 .%yLHГX#iA o!Y K hqzإo9Gxad޳8ff0X)v3N@FaO\2mG]O 9!ٓx0%"ͧd>=$9qIk+xR#QWM)th\#7ιx` Ն>֟5O[ \0O5ض#Tuퟪd.FYtzgWia٨0pnȑ2XH:f ʮ@zT6_Nkg^_N30՛ _Jq=o%ba诪<&(ni!lO4v1o1.[z˃Bm66e[cM u5Q (UrUjn7k mA9dM ܭùTԡb%:k`%ăYXXQ|;B)ewX<u {}pʁƶ[aۧ+8Yuf* >zg܃&ꎳmH}BYg8/E bKΈ}Tq9x 8B㡜8#z<]p~FU&c]mvg5asn )~l%E!p-"n×PzNV;Nq;l10JDB+9q[zltpuF ;GqHTfY0ۚ~w7HA+/my>IiFcRWbj d)<+/z?qm>;KY?Hjea0RkaYXLl+shr0odFHZ1I:Ol Lө ρ4fEWtnqvٲ^Qy]?iωxYQ_+2]oٮ<=amЅ ¯6[؅-fB{Ox5b\,qʼU#tNww<{pxo57N<@х:' wݤ[eLP3M#/Wݔ;ֱi{sJ1\o BW&!ic# r`0,ljsE1Un,Kzf)f/!7Ju=c[m?s<0dX}k F˧k~{b.sɏ=I#.-\X4c]@r=}O9U>Û@~e@`ˉk;i:pcx .Qךےpy(76?P#&a=#]vS,Ղkv.V8YLb!ErQ^7llk+a˔66 UN_TOah⦇r21;y wEC瘳 &MT xn`ܹ?|/cO`B8+ Z`jgkї{y,ۄ9MZL%$R[h`S+cuض߮cMrA}1),ӝ=)[ ▤>pe)(0xz_[l5/L(RKo{mxS0n A=W.dB0X;^f6X>LVX%;H!O5OKx%@u֦|d\Qe(-Km<^;ؤ:1l % }}w ;o0 R[t)1g;B?B]9u7C%N) 8\~o~NǎՕs7lcgk@!,tVyv Z7+5v-6=׼(m_x{Ú,_Dl}to;$ 8 f籽$ /~6ĺ.QP{y΂S"k:1ߙdvvh'FYyWz(}mƂ0]k _ZC{b9hazljLI;Բ k W[ΞςX)1(nĘ.bWcԔbwv&?ּ}o AuAyt3 7 `edl[koY*I}OȢ35԰m0s(mz`Ys<lQlq؂"zW -4޶m24:hu>g*L3S)..F)EGqoF34 z wªSkCv;۴RhD%a,H{`2Մ^{2+GeT'fr݅ q!(PN>cxwȵ@g)Bv?ڊ3RIvQHb?c\{ͺ^NQf4 Nd1Of83id/;tQL0[|4s.Nsi,h>G8^ mމGzj8p1f9I"P04>hTmɾbW7%t 2$,I⭩ITv0sy YS5q7L` {c+]:A.AE$xX%,Bs%_y4. GyNWk/ kx;UBw\˼H3KhiOgcij8{-KrټrMuƺM0<,}S` mxCQbq/=,bYwH@'>i)9Lj5< Q,\tZna_a/S(Xyp4#ypARޜE(cai}(T=뱈 Ã%l^YBvT kw aՅsXV7q:Nyh܂ i:N+ҔMS4}Ôa|\!ptӫY.I);mrE*mp 탞+0Ҭ;ݻR7pj l)j|׿?a?qaNz-- p26퀭aWPXUlfBƃ7*RC0v>g8|M'ۻzFsRU!}Vj O$yˡN`$^Opv|Q7v50 fb0wPm;ea [ -q#l'elKi#;n{ya'0 bY;Vl^S?O>Cr }{8k-# Θ ,Q6P2oWe˨Yitġ;UNgq6nen;{=GrY8[x Sßji,>=dZ $Yiԭq/<Eǎb.rXQKmh't"{&$X4VXqkaһ׺.+Ǚ.8f-A->]%x ZNHݔ{]$4/ ;,>FFN;{4$q6.HaДkpixQ 6ikBUۑ8|Ѯ& ^̺{rzAKǨ[p)Ŀ_{6v%LuXPIҸL͟,E7k-<Aeւ'a,gXm&L`K W>3oƌHRy \r/cCW|aR#7+W^Xiž=o=Bĥ^`Õ=_aLMq3[fg8dF!z 欶8`TCJO"?ILsFuWUDo+0S(ƿefWȢ!8']aN?Qldts xϾ{"\-A??'<)j ASmꇱ[Gw˿/gLuiwerWg[j8Mѭφl0V\Luj׊O߷e>|Uoh[VpV,;W3hٸTd߾8W&3L^/iQ%R6qTP*[sm^bӁs,Ä0is woPȡE-f6X=C=u?)a[( 0 JJ%Q60qR*~P曀kZb1hzH]_DM/ 6w Cd6U0`f .]gp,iuwz~d&H91'Pb55^2)m ҥQc0XotT+vɍHuFLF?4CdTxrFV+u;p=K6~ƀׯ̽pi83B#X- D"R?hJi·'O- CzNٰf'PLƲD }>zJLtqoaP@m1-0)D@|Og,`,jw1[~0L_~+yPX%N8Rԧ$ ҆;$`fKʴXf1dѷGi̭k2'yvo.'awῲNPO6x6n~m2iS<DhT䕱pIMki+)3Ý ׋`,g'.儐N[_d9H:n愱+Q~G5ҢȂU6Cf0dR޷ד@uN]@ kzO`x†&t 65!qWPɓL,λɋ†Aϝ2.{1b3'g'$md %pW khXI#=Z ̦ARX0{FWhEP>?hS7W c2j:%`RD/N bZ@!J?GN*~eÿKQ_ /% 7>9nARͰJ%+~t/H3ӟr@睛!F"5z_N*6mpG^.~ִwuBBl#rH{ͧ`΅G<mk)F-pCIXd/61{>u wcWӿ. 7 VrK-quWt.@J|޸թ7uV]ofˑ^ I05y̔vTP7&HrFg\V(dwM0x3e,g;^ʳ Ў(PuۇZa}&,%g5vhy@ՙ} +,26Rt?ILIؓjMوtu o{PgLVhrLJ@e®jC TI٠{Iҥo{:--s>0Xkz|&6Z?}'ԟAbU<fܧY͎dǾ/~k0n FRNBuV\͛Ʉb,+2#^;ɚێ-ۿډRuMm3gʠ5WK _l>I"r5. cjzyM\2 kW@-4Ep~z~" #lSd-O&=8n{YΖ 7/p% [ʍ_y֭$Mw'r b}Skՙީ{U'RβdHp{==!`a PŅ%sV,/<:작]k%2PK\^j@e x iGhOPI.gǟ+fՅӅθ q W ֕赺pa5*f;ڃiMsDŽzq,7)a_r%чMRL`~]Y4V枖M#^yriN;t&N1|:l%zX[oɣ$s{N`SIqfG?z ͯG~kE G:Bo`"AlaRK:ZaQ@"l1< x|Š?`s qeov<=}EjjpƼ_!־,ZW_p '_rL.B0ct@X6..{?|0W N\~K I<{|m!y],lK&P:t-2 \p6K:(!P!/G}uwH5UO*提Rh~p;8b!lz0mKFO@\L2r*&ö #uF{B͎Oժ;]jpSj)(z5pqwA9*c6`{Ġ7W[(4?+m;Y/ pЫj6X{h2edFCⱖZ;6Γp~D8N~/[egL7'Փ*yn79E^zFAzN6c,QU(=ILu4?(,S4rt(}$L5G͆?8FvOy7^Xm1WH_י5ICp.ɭm<^ gZo$AJO†D_Ћ"ߏ!"~._rl'iY˲nnʿ+K4UY3#0%|y4ѳM d13\ z24do^\տ%wlz}){pʝ8l+:iF\jڇOqKHђxv->c+c`X ˽g:4TWs?9m Fyе.uY;J4S"wOGNJӢZ\yA_p]-wXb0gNW?[ D?Ns~,xO⊽St`6~[۲vH~~۱%e8CgL>a`4IP5Cmۼ$W pHj39Ȫ9Y]E\ `DMJj!,nl ^Y +tl?A}=0?ؕq&Zoa%aa`F5}!@Zuj$ ބG^ߡ[.bxɁ>35 u'/ϴNA=]RaEUnu+e ǸKP}?i+ Y iMx7+et) @yBP ..E=Fi06qj AI#PFY8T[m\rӔߺ$ hȑm~KYliL"cPjd e!t2CzJ v_ PX{VTߣbj_ ~:]zb=^>@2~'1ZwnMlp%_pS5@>FLF$s3WIc.hVˈ'9qܿ䈕8-˞ILD*= 98Hu)(t.}#ڍ˜ ʒu&"]ɤvKh0})|ŕ˯`Æ|&ⲥqoRX'_:@ T2P<~=8 En\h#}p_^%;\-} aҋ/l2m>esZ*M!wQRHM\_~*'յ #$w6cڀ=xr; KJn=4wqyzZytZ8'f6V ̆!Թ4$9T GEև8-E: Cn)ww;ˁ0`| J@G =uۏ^ޑwԊ0ɰ- 0,~M{J) q̟UH!dMC}P>.it4(~|XVGυbӝfet.!1~"c 'fn CH@o ~5lVs= /LY썱M'UL@^cЕ}aR7)&LnP?1- \iŕYjW)JN=b.E Y(g30)OEÞ_ i۠/X>0F/!vįtkBaI-\pK ܅ s%z֕$ܗW>G]aJo,􀵝"$1TTninߏO޼M;zܡzf9N'q#fD=4_+\:&C· VB[+,QHcCHdN>L` c?.լyAa.f H$ҽ;)YmuLc+:!Lo?;T_~]pԙ:KF8(.Mkb߇{މۿl}rLd.90ĔwiCp߯SXOcmKC7}8;Kc$>GbH·s8<76#p.MA=T 8أ*|-Z}zKRM6}MAkl2M?> URc@oqk#}K(hłE>qaN{IכPD[N[ 2Nq` R-=?j#v27QQB_^w-IuS'qbs*2K81/+ \`2GYR6@W{fZE5+Dz>i7ki5)7?jqXK;βho=f|7>Jb^ރ@v^ˆ )3ndB_ӈ.PΕܸd\ 4³LLG[3رz$` 6(Jqk~,~X;5{6s^BLd\_ 6_/*x~.:WHxVŨx%Aҋxgv$KݣGZ5EX|4XFܓX2~6 =YS:|`[$tpzm"m5Hy"0YD&|Gi&D.S̨]y<Fa=2ZjbMQCr9+ p: [B=A\w9SVo9 EJ%\HjW:;F.Iˬ.| 91] d *.[O6 ARvO@„3=ؑAkOOGvaO8h*nhw Z|/j+`)#~ t&荄!a9?_, {/+Y%f< ~ٓ-ngo1u5uz>~Z1kwnw8ؐ#wS_O7$#I_@kyCy2_op+ESyoݺy, T 9b&iϠU m@m$]M' WE{ 4@ n*8vG*+QRaJZŪ 1FoҼB篼quODX P?Sss|>Q|7f`^ MwINe/qx<戃R<7pW|;N )$'f†u#ŏP\,<CK0$~)5sfwӵkڵoѰL֚sN0g'lhi5]:q#z (ʄ:"oA1 vV-0t]GX9Lk߾jXK} e޽0rCe7Xl$n țk> ^rUk{;_:C5 GQD=ҔK\fn݉ɣ%[H5sW .l0/| ]|5\/^Nb_ V`YFF`T lϰvRD ȑ<g^~Cd7ƞ73e+J~ `Ds_H!oL.>YV|;ôWH" ]olÿcJ͇z8{zk#0n=l8p%\zg{1",\)WJk03cܔzp6΢k? C3&Pm*8Rv6 g4*"S4/U=n iӌH=ۊwC`r* Bz>$s ?d$"A0yܢ,3%I\Ƞvi2r{U(zQ9W}4{*˜Tțp!qpu A#W^8hF[<> 3~ة u  01GS˕B_Q]"0F3~&W%D'Gpe]l)T<|u8:WBok{u^( 5塏׭y.~^E[?$}!2je2pˆl0RثWg5ߛg|*ܛ@Eԇ:Al1 add_ Vus9ӎ>Y^aX((ПF8&y,K = q.,vH;#݋"sq8sA>|N<qz,ԺSZs$T]^ַ̘ZT!HǕ4r0~=ټ&Jp4{yt[xy0u ~'`)$wJ%C8l|9? *aw{` &q2>ޟ 1X>]էm/rA]لDc .%hSxÞ7"k5qdΥMFlō^V} Y낍r3ٿ"Hj ODl"6қ3FX&euR+:85g&Sy'MNHLZpW @':]آ՟lѺcwiyP^ mU!͆\1Ǻ1̟{ >ǎR 0xtJ: |IKg@Jr&cawR"w1i&Z&3]`};hwo|yr2Wq4dOKS2qa.B*ڐcvϵMV}K=aOM@OIKCǸS`[u}EؼNW.L$;|"[θMzX"L"IOUIǏ FT1;n{ZZ_:1E藕OSR%\Pxup(L)GI;54q=e[7wLgm`p/"7P\n0sf7#/{f+}HXWw@b+[Z{qZXMvv]9Pw7I|s$v;$1Ls\P/cH`RBG7`)rf%L.2%JAYƫGŎ"q2ZI(cwb1]S86Q zuU }t0ߋu'<-'i\Gg3!y6[fl΍`\< 1kp>+f7m{~OJ㧓`VLlh€)3*P5+R.5CVY2T} юY?ؠ瞲bX=E]['-nF†+/%lǯPĠ}Zf`X 2:4FeHf_kO@SBvkoCt'= s=%^"QɘN/D OpO, ^`=:i %R8q׭Arp)< KMOZ %l>y*Oo V%i$B+a{Zk4 $\OG[&bDR#'oʂOfz0(rY$lIi鼩Mwf#88F8<+C$W/a#C<=֝+"kE%. en1av:uX[>fi=" )]mkaijW šȃ9mb\boQҞ \,]%@lO} mxjw9=VRsxq>Ω.xP=>egE ˽0l{xR$Gla]ml f{ux"a۰/"^L? }iFa}8NmMT!Sh?QfBIgp9u@kZ q&3FO=[w͊Wdu!v.voa|d'?`n Ih:s >f~Si;cvcgDŽS8 E89zY!Py=tłz͔> wea}P" m;{lN3s#dϣq^]:`~ -Ė)4n )ڃs7wن]@Úsw.J?S%4.]+zS?khYO7v& d¶TG"w֍ OZ:šXhXhN?jv)g{XٺQaG0.\JB8}1툷S%6j Ѷ@wQX 3gy9E t]޼cƴs׼ `Iawc_rf"BzҖA8*dgp| 6A8屹ІMG4/p Qbh=OӨŕ4t҃$PH|Ccë =ގF?b0~m7/V N)b[3M*z3$`E\'?9Sٔ Fl(0S6 Ϯk .ދx1?a}i"ٺ"O?jɇʭ>HhJM{cl5rtե0Q%ewa\lK' ed/mv-RcKf}ῆni6~?3lX;9Lya%d[|&)QD+cr`@ܝ@Zq_=ƅCΡNZ8XSl ndSG#Kʕwŀ  ]?\ȑ6Aǣ7]Q4[#e60\eesU L֓E0x=lx i>M^'X4K~zW Q*TRIfT4H"{%}>ñs=}=~^<ܪ}gc~/lPxt)G$_Ʌe,*:ͦ -[8'h0d/H`l?Nkޜ rէ {خ`Wb2׾eq]> 3^Ğ2/sH=~{O({n! $bɥ"$ia+l]>kitBk>\9.͢% !,TaEco{b :a$pjSc[`jdgkx. GLRJ/^5-hÁ6!@9 [wu9kֵ$Vd@8D I+ ;θaך@` Jq~+ ߒ-A$vW*09迍[p% ǏͿJC:}N.o(9w-{ԬL?+Iomm$n@oQ,ڪ$ʻ`O5` t^F˦c8${;tny$,~:wNÊߍ ҈!s@e,~{更W4☲ē?~5rޏMFXnkFe0v,);Jv+" lx@zJi:ksRVSbmth U-~}Cg>Iy.AHS\[1kI嗢]LdiK0C"Ν}@0YW{u;/鹰|N3%_8NU%x~kBZiۋ0wٴD-PZ,*_cU+7 /Z7+n~$6Ίn,`׌73 X}ò7ƻTߏ deǏ@RԵ{Hvuz v| btG`IM0$RBg|>>OA$9?-`ƛ˰&ːUܾ:M 5W7y%0&uW\kRD~tn'ugL8#ރ,ctm ${('q+Z,J1l(k8frU$f Vh׼p\f;Lݩ /oBbAU`=wmy%op@7Q8a+ZT&u4<ѓS: }-ZbvnkI]=[AO < k6Aj%?ZrT2a}wp[Qw`gxX!G&CV6iا8 59MN=.|HAh7]E)ѯnd,/}꾙$ < e,8dhX$׏pBPԹE|I?AkVE%.D[cu:=Nbg)Έ7f0Juu&y $+Vt8w;FbL<ͥ?r!X ,.餁ʝeHM_4#daXeD,M/jnG".T*U~vS!T+Nl5ք9V8"#h&muL)}]P3o</H^93CWNg}^sjbBFVp2v4onBRBSkͿ8N|}nGʆOPӎ? ]ȅFCbWH+0-+t/ Kp=®l}B&ںe2β0KB[# 0bC^ێsQa>8G*X{E/2CwhG@)7=͝rx+OÀx\ؑy'·XD a4oOwV5: 7IXc9 g 䨼;ºA]K2.4! { Am[6g\K9ç.D~G!>`ù7Ckrk@#|4sZ8XRea [U3!%b-ѹ0Z^y!1U]Mρh6u~l6lA|pe$$+=,>AwURgbꅔ^4nWm7{yjidq5d|n[pʛ.RdH؟uGC }~v#5ޜRT*4m Q߰^gq11[M0jl(`7* 5l Ua#H9&/xy6 hP 5'Zqᔅksq, gv@v;s8h!1銘9yћwf^[_ca0fp7Abc 5K+.ժmDDc~LƚOiRّGcw/Q OHqDe0Q㮷=pHIg-qz?82}$ug}pcMɳ0QU>vr1~aTןy J8J12ڥSr/A'H, +:o zo AR|$2xRg| ar5R u)VsKy8,U:n_I?;svY;[h'\O ZFF6 gwJ cߩ=?cŰ +ݻ?Q$Z-O[?E\),Q.llr+k@{y|ue%]wSb(:eI292ЛШ4V {^!卐1f{ n֌Ɖ-EHlzxB0ԗ9qƸm!L@\fSO:&}$2%d_8dC-I 1s)27&W7.߂Y8Jp'߽"Rb^;8s?lӰstvݹ }9 LgXyIH^jrx0̷K| FڏCgDxlVc%EMc#Ƒ k r*QnY)'l3_L3h9[`5 71чV$`@=yf .9|Z"ϛ'b3J569"ט"̖c_v6n =݇p9PNXUko>v?#@7`3.lpՀO1j܀*{+x¤/},pNW}\} jtW`x!Xc{4qy>1nzw?_?lJqi;$q.pdeЬ]u컃ɶ% Ig/z^|^8!-H` y`!mD.M[NV:1hPXק+r0]'\ub=S]8{_u\L $]n}D:mZS,4wëtSWF&x"h0v ,Ĉ(ʿ}29<%,8[sNJwB)kh_S(gAqXTްx tCq @*aӴ8,f$&76L8jݢ=jkS?=i Q+~ (Y%Osχ͕0py79-zbL_3cnbcr({|(0|# Ň`*kΫXs2;9O!.Jz %KbW 98viy%Iׯ!,)ov0z ?aFnwt}u;#2&Bn 5<dE/~,6d@`"E`=ZM`R""G7= +V "Ez|'1jdkxB]<Г].L^4VaΝug]``%Ȟ֒}C5h&T&0zes& Jٞ7m7V}XXs[hnNѩJYŸv׀jvYyD&D_}0ϐ<] ܏&۱qHP(C . <@1b`e]|:~; U7wgIc*ET?PDӂ uHR}&PS[4SAf%PqBw#,w#t/н pkyizm<ӑQըl+$a=3a[Z_J& Yk`t)wVskk wwiFº4,vUP&\(Ym/-{} f?Wg 1u ap3\+, ~&\քCؗw6}or]l %@ޜ[ Hɯ? =i=|g؅Ԭu^8+M&QHq+7°RC8WrX`W#w_rt/w;zaWǮaHFUz 1|3R#@k%_@aY .|abtṛIt\fΕ$Hh=sf:ҝz&Fњ> Ø .boISpG Ŏ+6H/~2"+ W`; 3OKlE7Ʊay~LML5V_BV>Z^')"iܦCдty7t]N"7 `Rά,ڜg)iaG:kO(2gw?=69)#0OB}C~f=U/5µrDZY(l:Z&#g7Ӌ\+@y8$g4s8Ѧ&L<}hfK01sOctޯ + }g m7k /62׀{Ezsh/إgk'A+1Yj~ P3nrYtm'8$ ;Җd".A_ݱi~? sK@`½'dRJ-P`⼏#> F',yMa׫ߔO@F{bKP#Yb>kO1&pQtWqyĴo:R*.~L<M9ΆmY%69PsZt~ڃ[%%/wBgg zbԮm@N>B:)]M4Ѡx.җgҽTaH=Ԙ'H?gW'}kZi,LFLmYDzOZURXK?r>R/ꗩE<x![3+G1YW2hϰ2N}7\}e=5@;Hw ܪʿ:{1Qn0YUR rL;aE{G0!U rIJ'ޔ5aeu׃پ~?'\ ̼oO C4-agᬸkpkUw]wS4&X޿T8@/n}Zoa#\{XXyM]bM!V4 '{[z< I6֣b|A;yk8Y3wYg#wΝ91UǎP1UhsE/:V@^78uUg/`P}n$vo8ryǚc7FTJZ:{6930i)c*;%|5TksPw<%Ș0q [˶TPF ֦Phba.[3 /v}˯Y,'C, Oю)C|.UL| ~%D%EUSI[}s1>ih©ŝdlU]2uaQ4qpDEeTPHBzV0;[հ*ScB73+nM,L.adoLEr=_uP\6,'*L M޻%pt#a%\(k?%;]m#8'ƢL0QWO[O.U=\c6nUaMo\MfNBj07>aXQOs}ULw=OL1I_~"թ`Vm'bM pʘ1[PULRHR B;wG.xۻ> -Wld[گ(c˲=)T8K}BY_d;"7}lvv2{=ӧ|Vy:~O$_yA10s;UXJq E+W^uCc',߾~H4-jg_OaW]uXЭAVh[lߺaT3wq8{"}'O 8_=]@Zrpcb L:\4Zp%dzn^nǺwO_#}JsXZ_ŀ [| *Gڳ~̮dbǷq9ںEwtWz-Zh(':}:? Թ x>O)Mzg>ay6 JBZ=P:uY{L%9=V6S$> ;to;UwbwtӇ~=߿_VR˃*0-q؍%z?, z8v_߯Gn|>zsg-^HUc5Ɖ)tRaDPW8CޚO_c]ŵY'#PAI!C5gc;94R7{}9aUHfnkF9ݕqiGDŽì̗}ЖJb:z8ͅ 3aP,觬8L DsR/aaKnvfP $vm>=]¹uڍ>jQj$"?֎'NKK=܉duK;C9%ʮtR-Ƨ xp~Y%´R)}:9yBo$߅^]l/Ӡn.+cII8|ZHWhaT bMNXGby3"OSHd};;| N[JਅZ`B>tr3e1k{xh94W8q_~ о)yu8e F3D`ρ_ű;.ϠػZp녲RgxԤA; F(ہ&6P M/hVGqttw>ҌU Y\]q{trzG7߻p{k)/4 $r2h6i]Ѐz."o Ka SRY0~u v]5`i'O<oia+fZ _?HZ)qbrO \)QZ..?M4uq&y;EP/|gZ 9ܦa-+k*Zz@0?WǬd'cO2z]NmQC˒qN3.~yBVF'ω+8C،}4m <-K>%I8_|Ϋ0p*zg=._*Sp~L+ _7WFڈE۝0y_d;KE7pǧyXz+FV$m#Θ]v528li;>C??O\4: <{r4}`ݒ0|kB_f?́~S6]k)ݿǝ[sz.A:^_X7e:߮4;fQ 'S)欵T5<`bV ۫Vab~vlM+g6.VAѝv^:j͂#ts'elhL/I/SI>[oˤ-B;53<6l} 3v>I*s=k0kQ/I;!57|_d݄䄯uyB a~_].6~ӽbE{pb^ 3Xj^A+WUIT#4]4wS<,N7 ErBWHCks4|?).9ӎF"q.RH.}Bd@ZW¯ 8ڏz] .zy蝥 t5D:yuZ9e{I0;"D~rFz \6IY9}5 X2%W|aFc= ߭FnC-W@7bRlB:j'Ma"CN wlMZG[`,|yU|"i~\_7kbpLɐ&PF<8ec>@[/VwG=26b fOfFC%5<7v3x$, )l2/ M" X>t1. SwOOHFɃ_pN}q:O{Wot|I TWxl~C/[%c\'0fw:i$jbӏel+#q$l0ޭzw 4+PYJaTúN]Ƒ)w<"YF }G9$o1E0V $qyIXktGb:H>j VTBd{;9B]kN3;ߙE+C5V,ӵ '~/|ޭHEnGXn:( ΁L6M9gk8}/%Rǟx4̨PISrxXm`#ۼ&,TvdL5'" }Ff@M^ԉl!)}R` 0y׷0,TXJ:qח7@~ߛ+V)Ez0Z*E\GRGNf%eִ uRq]I 2N%j}e=3GD㲪b I)V| Z5MBftW'pQvd3!9KcS.tX%]@Ȯ\m~$=:~> #FuGvt;ܯ>+Nˇ 3zvg1<[C0p^l5.-hj >JՏǿBrߢ)־k%2h$ }^ ?.;CgjHw5KWqp"sV4*^|5 >RzCOtH_0tbâ@Xwn2XׅɄv7.*V ?$"G ϿLg^aiZn6wu>CK-[%")^p:0 Gx4ԙC)PВɥ!#M$S ,oq?"0<h1|nv\_"0ٷ"f6/4J-rzOVp0sHQ_ .ѕ:wu@#8A^ Obg#W0i7/t{S2waڰ?eR_on83s.@RNջQe'`g{)^9 ̥ehg4Zxbw[;srkXKЁqЇnc7x~Xi[ 2iT 8Nirޱ_sCړbČE}{ {6i@c`#,?=$ uF{pC+gE9Ï!A6s8Zf'VA {X*dmAG6l~HcgLό~JW'[iL!8J&)y {P]j)%r1`v 0"mz()0w|vA-[/*A O& nO td9:.0)q#f3qnAdŅ `-yiI1hWDjpFm; .{Ű*"v-lQ['J;}k8 g>@M I]ʞAύJ@I͖~W 'RAQGS8eN5 w9 ߮!гk㹊k{ziwk Iŏe;N@]NU?64U|哜7]7{[ڇw컙 v&"%6y=1zϨv!3^suY G`m(zI"*c'GltLqE"[ZaD:P3D?Ď;O#y]醝N *y03v/&~ZL4ľh7] S?&0O{5y'|7ҴmuH޻y*?6z,ŖgPU_MY{8!k-`曹W|\gW3[%a[C!Ox/@+oq%]ߢ͙iZ4b8T? ;nJU,RF+m5|έ6>{!):uoAi_R=7]g&vz~C|W%4}[{//zKsO,YFlcCMێ痶5s=/ɻ B~䠖e-\4PnG/1"maU=k1 יo{oqkYlg-vĩ+:<e2`í叉H**gMdیbnDNHx$7}e˅tm\\8ЂO9v>9'~r>?פpc2F\Onʭ kD_!zʼn>2M`2ۧ'}%U;NjOS8Dmb_[Oq@*{y- PC?x+\r?,xv+O5>Y 6Oiph̟8c*#:?;ϢƠƃ!q^}W_}$ONXUC9]o 4QJY E< `1jUZ&8RP0Ȃ,Gq/XhA8owjz\R%C`isl=/.ՆA\"d~M&šefDXnjY =n`Ϋ̘ h i+ C>v7nѳ}3N[SclI yIXY^ٝF3|)aDp1\M3k:$HO{wP@Tk.ܽ1;}iۡxmOd&M7aY埛Q+~:Չ>H{@.DΕDŝ$۰o㬽W(q(y.D=V4E]fm_l4v;a-%H36r9b'a޽{d,_rgz4~rލ/8eDw N-2 oˏ sf=%T,s8bh3ľ)XgJ*JocIoc夢|8eL T>N̠ك8@[Yے i;%cJpswd\(L[vq$nORϲLig>PpS}d5g^Y)yиsf+geF}DËAHَ`5 0ܕֿ=2|zך$ǺBlu?AXby)XɮTwlJY/ڊl 2O/~Ziԋ_?Y f}Ed>Oab~ոm>R9eVcgRb-[+n8Νu~cmWzax/Qv'yf(ЉpXZ :'╚vdzxAե{r@~('^}܎:-Mky;ÑƗ6w ?xޛN9^z'JCsQTDS"mc@xs+y\e'?ߍ@P3v.u$s`x9'>TW~o3#lm;NػPszT*{ÐuZrbomȴ]ƊyW^|^cuh*fY[{xP8-c^GH!7 FRƽ~o/:tպL7_ų٣Tۊ0$h6i \Df }?( b@Y_c٪$r8 ڗ"1t0F P?~i~[BZe#zؖҵ!l ?`ʥm28|q^.NgM?Wtt9\Ұ6SH*_԰njߛƔ([q#S+ΨcH+N3Qj_rfDH&Vo)v/#4%||>WJ"pU~ \LEk0vK:7.Tއǔ߫&hdHۮ&ejBdY(v2zٻMОD $w=luT?094**Sq^ƻ1vilqoKdeL뻄w`K2Wد)x25_,n<CѼ/_lzXo$_u_?x_H,_Hk:4- :dtpQE L'}֑ +#q<7{9W Xg}5?]5Eh_ޣ).hn|Ui{G3ԟ;0{^+(<R$<V.Pqַ@lҀь)+p%bSӯԷ0#; c>-e`,@\{fv@Ҭ!:+otqnQHV|mgvu&/m`ɋOZaj Fzj:9'DAVU, \j*AE0Ly_ȷDa |CJCK6|ܭ08CVi9,΍< 8Ō\:iDX1TA_v-u~Ee7ľoڼ-5áâ{AՠbqU@oA׫gE؀ֺ{WOh͜cXkbs 髢$_6Rd5 s\W{@!6+~Y#v[>GdH%w8e?u5$A;.*~:hn͊?,9 aFť(gQ_ZO#2?~5 IT<[6:맑5j={Wɲ@YYsT'"Wg:ͅY07$ DB 0U/mm7 NypR ]6\Z( YpSl 4*>b}+&Raޅ蟥bB^`Ɔ=NB!ÜSZW?Aw' g(XAf\ YY׽a|\305YYgYD$6;J&dȨ䁥27 5kn"))xEX3ɷ 8W[|G"5$kpL[pQ/!fnu}\98&;RSW+_Bw-9zĪi*;qޫ3LC G6 7(Gb[ ?syayj\?6&:q͇ XT}R*IEۓs0)wz\:֋7Ufُo<@-X^i;;]b`AaF$V&;LGOX#hٟokMO ,)6 9-Ma} .48 fؽp&5u9og m4aɴPo`VMΓ1?]gi$nN8[x#yO<.#XC^̣CE0fm%$goKǂRP#h6WVRѭDjA\Hq7D?`޽ ?xqsF9Cؐ'7 vgbo#- #nEH9Z`e8 ._Xo&+00&_;ob;)@kL8{F},^w>302'L* k07= = y宿pOʞj6(- }Ois㸪?K'?ާ'Sc#dz]rCk0k0t6֑~6gZqӄ:'anhdY>{᷌5 |J~ ~tNcPQ3wVO\zJVp%nś8[Uv7IjL`R+,$ Qv,%p ig=d{SZ|j$]]‹#460Ū c4-[]+ Aߞ]D ]`9aqd^3`p,6 L3\qAi5VyS /!d̹J5! I!O>lwDK+f}UY=*Qf Z`T~lR7䊢6 ͐R ` ފPtWͦOAmd8;[k@U`Vok.#4@w縫O4.ٝ?a5H K#a-Qil}FoR>VX}dM}ѣ_6O*t Wrtnp cɻOmCk!u{J+Uʵ'joUJꫧߪqR RXDfυQ*sHM~"NWМP.tV ÄwcOZh5: مFFqۺYzd+Sq;wXs2/;3 9V_BeH|%Koϊxsl̖"uyhRykLgۯ"vY#w j/wa'`0DO<Ox| wdAqh[]ήGMZobZaƻβİ^9]:zn mcقsǸ_/-)0('H;p葇aZnHs f:jp@L@,W.S4`Or۟>ҥI!XoM,~u0-vҶpR -=_])10R(oavǎqT4zJら3eLSX/sY_ R=EuHrp]U]UM39G-6ˉ\ y`}#H'-%W`$Q@o=FpƅϛH%tot8 Ufzbgf7\ WuBr;'=>RL&aiآXRYk^h<4z<-4Q[J"ư+z5kG%i-\, 仰HILXj͇>џmcر0RM׎ʀRɸ̱+YL<)`c7jC=␙gvi{)c.}?k7cֽ,_ S~qpg+ݟbӓIѳ]KDXOTKRxo7@[XĻW\]8%;# +!\ۢbv>?=~=8¬‚нkIvwL[)5A۽{Ds> #tl&4}}#p80T\<_UoL丆"%sx>}A Ha5)MnzLsd@ Haq;-N yHd -Oqn]6O {'W6W} SNA;Yۑ=NpXFk> Y៑j}~mhnYT\2jE3ㆅʯ3d(do Fn31ñ7slUo @-Ie(,z^M˭׮?J%LokXxPxMQ]ñҳqԇ )./jۜ\>m^gyIg;!N{˥E#;ؑ,Bs& 3fϷ(+k0&3$9 +C2a6ɞ CWK ;픡vgM9rao7ȩIܱ$ż-N^uƢ/<ٱt큚cL_a\@>ɗ'O_(WkG;2-}>4dUaUT*N g'\8]L8qꪠXѺg_1:3/0*]8u Z?bW;k!OMзgaCUxXScxMžuess\eE NB!h>.I-%4jmvAzjUC%eamt @8Pq 喌.d~-Y4kU]Ґv[TE=wAVb`,˸D&`EɯYbu^ߔD ]Q0iz.% aN|_a\@n&!0 }z)yv޶_p5lфn8EkYybnZU."}T$uΦ:w{ȸsCj5)o]6|7j?ns87S'>,&)M_qOC^TR?& p.z#  D(#G{_XM. fЇ\V,/q{qCbX{)Juh[h懁Μ"Ik@t6K'2D| tk~Ӏ+` /Zy\,Pl>a5‡G?CP( Da]~n-w0$xIddE :* Yۋ `:s8\Cr{3`jc'vhI)q ̬b+ 3iǰ._V,~3Fa=,a]?à߹"]cP\rba@Jf1g}Lsv{׏*C ʵh}2̀/Yq5}: 'azX;n ֏姇k/J/oY#SVQShsM} 'V,jRSĠS* ̹6ފsw]/M}Q%L4k řB_A|`[W,4?v ,9C^ "ű$1 8Ip 1&$U߁<]~R jWNjzh+F+Ps`vÿ:YO6 ˆ `_|b80ei _8xk(GpHJۊS ў,p',aH {!c,w/g衵N.:L|jn18=d>q-ImDu^Ew~ %p+4U΅w^D3j$gε @~s e;dxȄt7v 5^v#z/2̅{֋H[-~2KRu~84"\Z [{Ve]Hcsz壛9_J{P] .vN#:dE vo6,a͍ꀾ#w/sAyZK-Px(6َClڿu9!^W";C|K Doh[:sb"L%]׍}*,ͷ\ۮmWH8N j^TbY!+=o8x)ϵYO[*_Rp +܏գa[%q>SjVD?#R"= f wf6`$Mf?$.7FV%fN􀱞kG9$2^~63E cs,(ABrȈ{v C]o}o;m B Ym%]x\.*y!7c@k~Hl=,YEqY;"4tyI]wL?;a$$+OO(Wd̥0G$;}9[;apdSdewVmҽ_e[2&RPlI1XMh3 $.{#p;ρkSag00K>d!p P~b5gj8kֶ"{plJC8},GSZ(3v(Sz:4-MEE>~Gtd zheO`aa)=5:DZiG|˓8\ɺJ[uVѯpx"UV?*! `J~' JqH?$މC;;kpι&*]}t}i~K$.o+DH߂x=;>mX}!@$w!4q^';KDK$'\(_$7!GpFoo HwÇjVg f0n`>PH?*J6ho?{caҬ5a; ɍηUq׿R@nl){\6k F[pXS/Pm?1.r) †Ӥ-w~ᬛzNFmQFZΧLl|Z~ VZ hYͺ^&[Xq-I1'Nqw d؋)^:{ C8Wc}O.}|{qAU:1Eq{KٳSN,t" :ȈyaV+, m83x.I*qb[a-?b B9aCiΩVo޲UdֶT"5g,!.Lx`caexĦqWkzXV-`xby(V|*4'4=9sqJ fM;h9Wʓ)EP˥GNs`m&8׼ %^_A~J[WNUD>1_ +v(KmyVzy'(*֏0)%'E Teygj:™U{:()>+$Rg -褚2\b@&gTv;baP{ְǻZvv=0q1|kA7P τ'b"=O^1l0vg^' 0w;+ߎyYtwcK78Q n\qNʖHQ38 ʜ^:1ū#j |i0ĺpI GY1"I/1ڭ8#ޯ El\5sPrk\TiOqw4jB2lߒn$3 k%{/A5uknDgM +Br{0X:bcU$/۶s@CW\l [ؠi#;V,}fWwDRO ycNp\Z0 |2եȑ#`@ekbG+F*כ>/ {T!}_@mY_d\7ogM)88-w'١bnn@yEEjFS|qi&cD6/yؾ1wpXPNIsG4Vmw4J"÷˂>۠ 7OU a_V l%vDNU_'{[b+E`5za yR(V[oz+ՅB~BS58qV*P9(vMsM2z5Zv]3Da1ґ{@.ꂽ[ޖ)ĄA LWe3?{CKU +"!X.;=5׹ݟrouP?`린46]`tm#㐊 H⏫M!1m29Ddc&`Kʾ/9V6GM޴gz\m4ZDfW-ì/%\QH}X(Pi7¬gz@]aoR .YH}C*V/a֠NPZWa(~uVWu#Yֱɑf7пmOOĹiegTBm$-yٹOq6L@th?V;9N_7~Yi-qunD!]!g%]=To(fEzKPvd@( `}B۹e˥&_7%_OAni[>rOx!QH rF|V h8+{ڊ`<;La dSgp3#|{LQo!ӖG8.iPbhܻ^BϹiY0q+Jaxb}g~T +By0>KUZo:Gd'3Rdbsn|c\J&v/4 |i5b |4k\M#an/# 0ƥKJBS^ ż@>}3&5b@Xr"cXnH76!,"@$]PZ%0~=fa8RafRCd¼$\"4!0Aoqdž0VoYC-zq.0 ;pWuMn\g'ՋMHk,w#aj0ڷN6?=v2|mOE^\Q ZioŸؔw4Q:__89Οl{@;@z=5́];?w*A˽g%İ>}RdLkߍiDiu(].ph< }ZE[Ȭ|u4HVkNnBiX`s8h5HWe)8B阌4P`ݻq >/=A!Aɳ?P&s {+۩a?+w49Vk%@z+/@T]Z >ָWd9`T_?6M>j.Rxi{&a SV5S)LMf|%X#p,a8֚]ݠ,ℰwp8R6#x*ެ%>{ B.U/Xz&Ɂˎ"8;x^`@Ӄ'&L?~ew Bs+ ֝};"3+7 Æ}w&E<#K'QcOl4:y⮗F&\M;KpQc URI.\4> p|1O$VhceSXJ獣P1rA7*/M(:~ n`|`L OҾ?GtͯN&#BJ1H~w<;*Uv`Rhڙ8~G:t[UTO쥛00nG # !_gߜ<ӗvf_\ !N=b_zC|b_-yb]N)mϱ꣘l-lI.On`>P(Fc-KJ@SIoe4REfǟq׮: ѪxBj7`l⦤Mc(TݳK*C.Yl4{9"q8[G2+`QUk N$We?'$(l{i`u(Jb"XN%`_Tq*_ a\5!|U Vo&j9o/r/۹*JV(8w꾟uiDZM{Ũ@`26_!8q; n5xO`Xgg g۝u ]*5]s90Eηe.ik`y =>Xgj.GF{26֕쾃e'q,͌B\XR Ig-3sTAFjAꇝ-83# _fHqumqoR c9L\;XorѠ YzeDE Ty5Dsj󮝷 +J@q}Z[#(b[u~PV,&a!1q0xG>#Vpq`TiDlݷo}׎>&@\!2(-H@{k] ]\"f%b6uBߘ/UJy*a~߲0]aU^}["=c̮t@L KE^g$hGde+|'fÓ/3qJ0+7%2Z Tؗ]P`xɋ|=\p>rDbP Ϫ6!LhìVҩ U\깩y>4)| g.ھo^r$ǚ6JZǥ]5 N9Zˇ}ZIy4og.AԎ6^@R(6(0댆0!;tK8_הXz i(wDݯj0әW6Q^lŪԱN$1ƧdbB YyJy{ b z}V>nnQGBOԙ =it ޽ ]e^bLiu)XPoyF8sU%.3YzHzD >0/~a}{>MjjnHr9.C]iNaQٰ~z۬E4oD 5rޔ~m{J]k°c*կ6r#\ܶ'm!]|V%Ka:6\w?`/*Il8z@W&Kk6BcʙFPm{~44+l>Zw{9 %7Uq]aqvyb,aXe.u<6 ڧtYpbpx|NRq0߼?~Kؼ3h}U$sAuj}EY?/Lݾ>R?@48+MM`s||\:Yzs ܐmJ]Xص4M<cŁH^HT ~0ё-X*|!qj}I%k&6O yC cDާG@P@V{Λ_3+bemaz_d_qe'X`*abt\I rq>wyPnPNp?X$aiK7pͱZˣ #}EO0A#יz|=8 YeC8ϺP 4R\2RgšEWǡ/l54ea;=MHvy,=/N<'r+"Xghܴ)N6̈Գm2zP 'I`ƍUɳbsř֓<}r*cUqd㼅:6^O 0'0.q]Fo[[f#'X6#EIbv M2-leWtS0ӌM3Ox]4-ؾn{1Ț#ᘱqf _]~<կ!`~g'e b1M]q|̾!N0f¡[%R- L^bOom@[ZrXh37= o>Dm/51O{/<%R۰rA;EX}j"̜>vhg?X(9d5)ٷ?idx>7Zd a'w xmoF}}Sw^kM G`%3^;}?UFj8{USbqZvI({yQt6@֧u+-Bh¾ij@:7l Tv =;P+9KT˖ `SR\6_mt1b7Gtv&gc6b=T+HRV?VV}\~_b3eڟa g O:7}zapLTXE'FqL`{cq9gi9$ucHSr_+%V߲ҁns!F&fMYQ-X"UOw69>DycrLXWqk ę~ $hK`rE-= )8\#2Y8N7$N8aɼSJ+=_ cOǺ}Z*G^1,?tP0=bҭ NKΩCjC[Rxe2'YnpNsJZ }a⯑"ԝaQ>;;L_jKO$B!i₧ ܹ ;T aFcnN턌obUXۯ~1Ϟ̮aWRqvн]V>. NP|6E6DaMhmeԿ _dq\8Y,66O{򎁰q/ MC?\|_浏0֠8Ja7.bՇƱSM ʿq^LD$k#%O,Y$~+4r t|< N쑺'M;Kd?~UBfnEpgn" -M06iIKⴖ[مB\|rj 6Id /%fXca~ F`BϞ`Ic<8|dμ|vC1:93)&}8^χ N1DS*d?Myz5]/S&7-A$Jf^ڭ KtMPĺ f-I^@:L^&֏흪g[߰$M^eP6Qivֽ#yw˧. \I=EJvl8pDM{†<f~KtjqD{Rrއ30,|֝+gXNPM}[ eW˒7c}<6؟t :E԰YSL{s(՘x)RI~L;^wYA5wn5ǻ4.Fl sC]N`3rD&3a)5smokg{Y, 7y~/JK:6XvZ#4={ #w=E@4 CN}k} ?<˫ Jk(~N}@kJo~ƅق'8xlkG/mClyV%55MaW${P~T1ɯlaFnڒ YnilNXlC/^7FO .,툚ͮ n6ې|V1z%ҍz}>"&gfwCZ72GDw)3&2x-C.2ᛂᑾG?`V X]Sli6bv4,A >V݅[Ou^QDv8& L w?4"];K9tuZyz0<3 +E w]3!ǏV:(?=.1iY5cF} Z[OƚA<]嗴mbz/o->Iǣ);#|-6bx\.vkcˣOu&]\q,"mK83_ʱmEz'3S,:tۦ+5k`p肊"W'-o`3{[}" S1vk N HʉNAG2 ^}޷s8LwbIUafbz/0#1%.K~s'ao} !"ß@'ED6{'hr~/&= >ΥOqpǣ4+\[Nb<(0 J{|'Nz2bwqul֠}jli_gnBWʝ>3 &I|4@59%.\s#|ڞAw=楽!N ,_R# ªbP6U  1L~ј5z 2ئ[S&u.")yCD/Rݙz՗9S+a_",JplpVt,Շ7aؒzwqW_Ѕ3c%\Pjv*һC @x/npPa7q&BZ[uA{BgpJԠ,0^7bO`:pHBхב;z*xC6<?S)Wrn *z֎QD i:gjKu~i U`O_ tʶi0~jQ#/=?=U*i"X^(6uX#o^dq ֡mjdq(HVk\i_r"^9wbϫ@j+7` I@VL=[}D5{vZMk!Ntp$';Ĺ=Hd92uKpAV D[\,d ZڥwF$8,w];Ir H![fZC]x Y/?2* cܞ١-gMyG_ 9]~z:D 3 N^^T>3v{`p'߈x-נǺp1,K׍5"mkw]}Pf5,eӴ{+{Fqc`8=,jnǘa/; Y/O_S_o֟`Z2m/?5Pn4,: 5NÙֿqP.>.ۮ9F+18 buk\ok_+nWandu$nl~8o,Qpz&jc5*;zb30B!$ =-b,/$sGn`zQuc\ksfԵ;Bg=PfDjGEAi3IHkJfLXFS-]%k (4 - 3Ϙ|m[yf%t 8x(ҀI3Xj,o[]حD)sT/瓓'"q.PGt@"+28Uͬ/DN@=I-x3Q>S1=,|;Skq@+E@kz.ߡ7uUR8,,AէcͧCb׶z^[ /L1*Hm=Trf?_;Y:C0{ X\iH̵ʼn>`窬0RI`= ,_8G4tlnY&wYoe.{1'S'Zb`\9,6x3ݥbչ[ጀ',fR̽r=#玼܉KߣB`o[f^|5d saABO0=_.zCC}Ly(ZY2| (5sfV0'7Ƀ].z+uq*Hz*\ /:}#>PTܲLqR9~OoI j]*_'SK;Z1tT}{#}*6bm!'yEX96LZp7ɯasnqtf΋0I94ク!5W3/w6$ Է [@/w,q3!G3G$s3̝HC14[vXj}L}]- k/W:uCQ{gtr|ubӵ@VxB{巿ȸvL=<\沓+.C`C6\o@\v3;Ca{oqG彷8z^e7J 5Cvh?7rw~]KTa]ְς}nz'c6Q "~!@;ӼPI uoAeU5L!R3S8_OIF,jز`_ {ڊlbީr-l<^B[+XȬWS'Uan].Pȧ+25L l'ޓvi*deLϩ$=!PdMb!0gizSx6>HJ5ŠSc2&='[؞Q>|nHG]O˧9?րIXos^#zP. YLq߀TFiXG*_Y$J^~*Ԕ16aٞ3Hq)΂q(̵_l0;gyϤU$c- 0+";&'6ݟ\LK߄l!!HJ\ !x[ENʣ1(ffYl }{+=ҹ[4P]x[RYzbT3kP"~*^p?1iWluPħ ~-\?׏ʏh]y:6o[6lTʻmN`˃$f'%xN5b0G0xd)\o9oM`bq{ Hw[*My.2Ȝ21y:˷د-OC_4hhgl,{N;}3asE"rTyy ;o;a e4=wy~'e%v_϶.??g{~h0Y7tf[20& 75a}IX**`T5}Nh≶?D $Gsނ`ݝm0P_#M鄗XKqg]4Rxϥliee`10KdAIXL SժzVΑ捍Q9`2Rʛ:lS{d."$8[9!I..ܚ(_uRn ,pqX6I'J"?i)M@h$m.0ö )l#0\Zٳ( s$:AE7eAr0?DP F ;2HCln]'80b6& zŎhlR{LXrDe):4~:g<̫|sy~+72.ewʝCLq8ͱdhvOR"θ L񕧇l|a]S4T:,4\ƙo{CEr.:kG Pu|:$nedqZF{DVz$ugT} ,p/\8o ^>+5x]E _l00v¯ڸ՛0a;nFnCѸq6{Cu~rU 7:& 4~$R $a;gCS܏@9Pu~LJsS{XKTbMx2K?\S80 j.6fAfD/d\Mf̄ʇ3ҪH4޻r;i_sϿOi5Д6|k/ UK@) ;n;8 > ݑ-4?p|X X2koNO'a0q=X>Г<+G[wLa}& 祙ֲOB?[pnr'8> ׂs*oMW N\S v 0"(zTKbuy1_捇i=,TzE_|Mޞǫ_l5`}Ƚ-%^FË㛬vp޼- ܺ~LYRAپ7r;vZi3NK[Ibm1q3h>14"- ew{w~XaŦ+:Wg`ĵ=2DyK9VBMbku4_|e Q++Q~wT>7]_Q& e]O5{IڦQ>aɯr {la+ݍYݷp3?Ә ~)閇fnHzIHemMmlN`.<=ti)]>o/{l_`qͣ(/ skW̙120")~{Z3GB7Md4,tFS }MX̓WՃ>q#"H~Q>Qg0H#,X [ւu VP6"+0 㗻NI`]^Ʀ;|aҙ3]~ J__a0؄%]}8?8ut#Ȭ wZ\nR.*'e]ۙvL,2?1ľ}$?Dz|l  +{nPPAB$ RVa̬!#X~_$-1`Qrw jnTz*'n*YٕS+L|Cv| 'y?T-{3,$Њ =8HG;Ձ=0wp$W=&|R=KD|-+/a׀xm&r?Cݖ.Vi#(5ŬKq.&Y;̙'ljfWߝnthf.%&Րa΁J&z.|ku>dRP|#ڞќVvѮ;f̰i4(Nx0/w#}  bz\hbXW4Ji!z|x :9XdME:酫%lpieA|f(Q){\&IU +K[~WĽ7Ȉ_84a1&4x=~hYe\:-Fslf։8.w~J8m?| hsci$xs_5 \87QE~X+ȱGE6KHcg4\s1"RQ̍^HKWqH>"Շ,PvVoώtpzZz7UBU8N /atN[Xnhlx(m-;sPL>[x}E:H8o( jv1H_aEX?>Kwfnk c7%"F~ahKV'<:Af#x%\S>όin%NcVPu؝˔<~U̔p@t[LC?FbKn4;bME+6{_w[t#kvش%gM{hn)ĨZ<>SN $C'm#&=\Lcx[phoŠ9NJȨ:l%Ս/ńԓ׏R%[!RpņoBXաb 2 ]u{ӿ3-Uc?kRp5yN$!t3vQ1lPKzJh (@ܰ\ ٖV|p6{DӴKaj#?c( N3m =g< jf)nDg/@MxRIeBUb 2JT0Łm\Z&ljV`t-H8%V(EQv1f77qof4,Lm: -!Oۃt@6$_bV՞9Z&uO}LݜV2 O[ݸii$暩/ c[p_Kuhc _>Gb]]gG99V F`ӌ¦UzƎ]@w?0kOTh6Q/|mb0xՉ >{'ncѐj%[Οu PVd;A߉t`H`> |y +aI_3Fjt ;L=bc,g=J^iq_v4y /_tEw[pj a0뭣`zsqK؟+d2q%|Qf2.Gf°p84 3֣05u2j*0VIfeA)M\|a?G]}rJ;*$ {lUιKz3q`⦆-Ru9ה=8qug\ѡ_Vv{8ceGa*/0\RUr!yl h RftLi+sv^P;.na98 ڇd5sjLvKQ [WH^#_0u,X!ʵlv"u6izڞ+]G8l:s_VPztwn0`&tt&Tގ/qܓp6Gq(B.S!>$K]f|:٨U\6ΚLGaoaIGo:6.B5{_V 5h4f }&+zCCOeu#:D _ę^%K0⃫Ru?y̺.vK 02m7\sӇ,;78?A@dh1~Bq`ԯMĆ#o) y=m s08Dк^{+iEOSԴ+ 7amA믠]Q5~zYzWHX2ӬA渟~p:e;`d1DvM"RyKI2WwVvLlަE])tW ?X] +OC3UtC"`w&Rdžtb在E0QyE>KM#Uwi%Rg.M ?6IyjES〧`lmd7oS}봃pրk8+bVu&yȦkV m"A t^ҳf$Ѯ@(69_=5'+6t\5i'p"okDoni5jp5rqkUZ8(LH|宍ke VMc4qh5*uXw3͍nǶ|slY:~uҝgqzc"cv5ml.vG3nϛS`.37>ô"M7 h.ލˢ|lNoa;LZY&)e Q/pǢUzGwcN07J_;p֧{rJ6k++ԕ|[Y Bx w-`v)Y+\Uj  Ohxᙋ0Sݖ '~Q g-"WNJc)7qc~Xfo<^S3CpW2)v2Պuh$x[aJkXdsw%' i5`wptK{WCSyرNM ˜k {,W>`Bĵк sq?s_/|$z=4{Aq 6Q:b,:@;P(@ѢX7teE /fYEݯL\ ?ŇOdrChY*=Y~0VLiI %-۲JJ0} EOHw-hO?_RFdO@D'+uEubp֩Os<}cҮWϕWU]ʽi=r*@2>$&0TQЇyq5 9^(rpK7]DD XҰpA;@ J*gT`:0o`S%a6/{psӴ&.oZ Þ!g>5@s` ˟F%58FQs<`_ .@1Bk w.OTS]ELHAbEB jJW9p-qMyRߒ08qrݓ6GY xLq[=0&t4-{G $G,`` ̓@VTP߇3K^Pef6뙫J`KǏq/ 3rwǕ;ߐ6°1@" 5Hv۾naaĬPk\6X{#N% /ٺH‚+ gl~Q: ƴ+]OC0OMWF\~ a{EoeX2gkه/0-}L41{y gf71u}DƇ-q/RNgMcУ(3Py(q-~{* /EX5(kc|x>l *"0z s_L6pIH$ٍiIzKO8s{$I|̮X3kۇqZL-"ޟ6uhGhrmq&lqxX:+(Pq| oT6`bR?T5'q0j%XHgŜ\1]86Yd#;?Mk'hT]]zæ׷p)Ozr޵C01,/20CҺML<+^C۫Sܹqʜ!å!M" D_abes3,scc9!,u$Ïܻ,UJdKGwXǡdI  >gscway*6(v3`68_GԜ2O_%C} .p#t 49" [ i x ݢap%n< 63\h]"uJ.7:_͂uv2p&x(~k:qG\7 c;{I059gVynRĹ'ћ P{}-fr ,jeܻŒ}=@h?vL9Wnz0WgãŜR.)QA, vWkVslZԭ6eM0|ÏrlmR՝_qZDn/C!JlX \jh3e- i'wLa\t2Ж{[}ɑש3>m3政}bW=c;w 'x ܂ ^F lt8G// UaČG~민!//e .vCqVө|8.N4$3]Ϟ1J!trha*_;ׁѿ '!CtΣ ;Ϩ1ô[~Bw@?J̿=M; ϧ&K}0O@UVPvH9-6FhA7%a޳ . 6q]#2'TY5OÇ<B%b>/AXs. Њ[gF|\nsǿv~7`t2TA. _my016Vu}@j7 |n!P}UCY": |vo%IiG{p6 XhU8[̓qG co(ڤamr9}rT]GKt V{aKX#0 :y'`|枨,9Wvi<:&qУC[shBp ;.LpxyUzd E=ÿ}~IOqAE^Z/0'X䩞:hOÅ';I'EKse# E{'72Y.bK뵥+zn@aJx6@KfAVe0稖ă׮7aK|l^UѦ(@h\ɭq_l%{ǾVf^žOLU7 UTw7ѭ;boHWN 'LQ^NqPOn~`4%#!F^MHڼnr95X/^;rgN{'09wΡE  ~z'V φoŦlpd׌iw~cSW 7;c31xFHc$#41 7.0n#>2>$4mtoXqAƟgI&4VZt hL鿲?~AkRyS-2qZmM lV8Y}0&?îr{29o:؈zE=}jLGŰ`IRi b?>&!tKʁZ?uNdǷaihT#2+^& vk 6wdZ|nEIZ0Aę: #NAo ̿q( WKqd2T) ];t\p~93f8c7 ƚw=w,(J^l@[p`Hr0M3ld㔧"0JWZ4G8âr/] sq[@iW "$}j~AA@,x"hq5ەcnI+")&ZC6ʨ=16Z[U 2Ø\Ӿ@Y2Uݸ{c]G 'Y=$ VjV7*$O`u"@Hz~Na [D~+idƶ?;msG/,-; yf~#\MM=R1rQ 9g,a5yhWToB/1#AR lXcۇgՋa5DʠƵ,m^S￈Bp;4]o~ ߦmi.=:H"-kc.T3~m7zVyisrL\uaSEEaZZhݵ(-w earl`Ǒ>vx+!WҴPJ#wQ\Ur]X-z]_|XApXP[V3}H9b3^d`!/ylm fq&#50~Z[̘l^晡?ZERO"Uȏ,88o*s 8SӔ60.jt([Zc?\F}*} oNrÅs;iC̻a||-JII~o#_ZO=lJÖb:T>Yy gpۧaa[9,_GaF[Ɓ\"] m 4{<֥PIIZ +D O]^a^ &;dp<Ռ¯5=pc q]Qt@b$.*I VmpLu } M(Ael9/n]+3.6 &iB;r[m۵:pt! j(?NBk^XUMYB6Ԓ`c=ȃ$|l-bUPs|X-sf_"Bp),)T>mMo빏F^n/1Vί4drcQ&MUXroy]T2,t^bfnfC +G#8hu[TTE!);d?g*=cŴV Yiztb~3h\< @SR5ΝEfw?{4=.ZIU UjN*j,(98;b3 U{ۿiN Ex=n V`TQNulf2ذ d~ l{x4 )1-~Uio,QH(т~%j8Pкu1oF(¦R%Y }7_&)sm\֢zH*-|0PMՁEN^NZ_4žlzؙ+֦J ":i16mU{sgH5 aH~3PfM>&I2VWvQZ,ӭt wQ]FFl+OޫjBd&)oP #06_RTl܍+eq⿎s_ BGe8>މAj"5_]e|r:#l62xA.qM3;)4Z3W`%tK+Cp&;nϥ˓$a&ƃiH7VCO嘸 Vu)B_+WpǮKv^<F8mT8fzN ?oYJu7C"W?809 !Ӈy7IO}[uQ)ť6H_q ?dq*985_Ւji\~.lx(wD4ۼoӒvjz6UL\jN2,q䞅5(ϘP`J]7aOW[@g34ЗGuO p䝄ȁ̓' y"j DFPulkIԨǾ(*)0#T53 vDZSa6Ũ&5~lJ$|s~s6LÑ)%WWо ,R(m~ [lAg}w-A>TƷc'KpU1BY+Ts:wqC$0'vBтlDSOe~ 8.>pvߣpU1aW|24H>mr+ _<G,&` nmM0KZ/_1=oZ:߂deغᢹU'ŁE]7rیC㻣w2Ʃmf<8CQq-:T`FVCT%ɅWZ8qkʸIzjwּev.Wl ÆL94{L?B; uY"ɦ$A2{[un'Ӈgz 9lZ7lnAh1.ڲv˖erI=>B"\ֻi˷@4?HW#W<_59xO\,.xQ*;q=j e2aǚfB8˟?qMi㵥å9d}N_+h tK+TxK&ib<9 ,8j#99VM$^ɗ 9%wgz d\tڎHõC}b}G]/g[?JuVV@hU,p)x09:(ԟ}\Ik8kh3 ;ͽyqD5ܯ$ h-O\>8T鐲jy_]_q&yj7bNBp6u{ywW8.tUHdI0Ȃ .t(~ ^(;gmݭ="s8edՋ p{vۖhE83S pi,d>k]䃛޻eun\Wګɏ A[;/+sJ̋{0VC<;\SoC/#DJ/P<3롧^)|| W 5{mW~\o/.kf~N2a{蛐1<8e*{{22&`H |h{"^,U$DG*#ˉTt+O00qAbo)Lʍ ]p)cgMX0k2#e:@Rw=9aaS}m#tz(XSlfxχH&ՃR #^@睙#7&!p+K| sMGaI۞lveYg08x{=p 2eyuC+h2c7 Uy4gC3N(:& !/>5Sz0u WKp$W%c~qoV_%=Z؜ŭ] ֧'W$gX  IaPE3WO odZ\@%1& Fw`Qh+&a7֩K}tƾ{L-,?`b/1:t~}{&#"М,_a#!s`'_;V!s:r5Nd _ssqCl~ =T} 9o q~/6%C 0Q$#pQÂ#"sg٬ 2ӕ>FZj,d5d9&mJ‹Pj!'I"u8uvz8CD}}cH*b'APہi+RM cc@zUac6V 7.cl?1 WoUʼn$F 0-\][8e2>OB;F6>@i~ҥWB9|ag3R2Zc8:X\ʼnok@ߗԹc G؋6BaLKWF%UuSpglHz怇,v1>it[%ķ|S`mH_tVݾiRbX~ӹ:65 ~8&NFGӍ`'Qauv .n 7pe0 @H_.~ם!G:X흕NI# }2彗sa|arC[r2'dk|a {/0]+$_;y{4b2H[ X9GqhhxoUgz|SEھ"LNmj7:'͞Cc$p-h^:)._ #{q+!ioJg' RD2 G6d !jM@E"}W3"tJt6\VA;>&Nv}V$'O>rS%B { Hnw$w7WS(Qdz/~_>. RM{_vs0}Zw6>3ͷ}I k-Sq\Jc.~+2DAݳ.NAh:GS$tnz^m@1sn"Yr%s NA@e>}NdFf o^cсa"a8,\z_9 ˟Dڮ$8$ <[;۹/fv3j[EC4:`G>,hgM*A/왜7Ym2??&b 00?_."ֺL{W]pBg ,>hLqk m2a۬L^ҧS rԓ(Gm\) ا40}Op\2w#RO9wO1/MqG, h[9Ms̊{N0 uha%¸;(( RVDiuEEBjK̐QY$d[^DZ9??u:-__'v&.Q]q[G7-!e5@t / *8Hy_e19[0o+ ҇z'₶uTtCaCxU DSKq>v$q8{<DqE!OQ%Ϳ顯T=[Y ):Hup7"F5AmJdDT)4$U*YpX 7y暾:}zߍ#Yǭܸr'':AI#a!/ܡ4GCڵq{șC-؜(% m>=jCpww8!@+A5بԩ_p }8^ǙO'_OgYsqRk/L0_leLf7zv`R6:t"Ã֧q}nٌ?'&b:u?6`@{7͔` &9SdM>Bbj,POr܊WrˈdNT}%9%3vZ:Xǘ)n>B#$).2-wC[|tīnWNŰ@+1=-^csG]K_"v~>U?)?1EM)FA\oh]+EG [Rr&R%zYaAN 7SnÉAW-|| {#tbs2Μte8**]H#(;{j t%lkJ:-K4&mbc밾KmksoMx7ڥv3^<]y(?{=}u\>'+.TM  f\)/oa|f a CT?$]L:*z;2[Dҗmizeۏu);coF׺izZF/&;mmoӺ}?v^( B|.G,:[>BvJ-|fo~ۃcIܳX$6%IN4aS NpelrC!@>jqS>5+ؒD-"0ȵ)myHirj T$J(<׬*G AUE`yi)GN_ ѥ0eyL$>Jk`teoSfo~G}XLH0qq-%c J4Cx 8?Ͼi;9(.x`SM0Ȑ{4ο1q%c{8+g5KFbin_/l6$ݷ7g>8 7hRvb{ vg'EkkL(FE]̳:Pe3kV%uj5:"(Cc?Vk9G&^$B[Œ9y/N7VoN_JEZd$J3¸q(9@5H1t +| ww"qDҾMq0g8tYٻ]{쵵]3aL\zc^Rr>#!M58yl~ϤWEtpbXpc@{/`nwQNz 8zʱSY-D~BW$[CI6bD%x>z]o2cWpMNn(,aO\9L7JKC7G4쁎&߳#o8_7I0 _DRZlܒ{5aƐ^<-nr°ZDnh@BT]o9g]ۓrX`>H:Od]1vC@;0迕 |:e5w!:kP=h4z͈vE(}1dBYPz#>n.uPx?ɔ6 15*~U*_VٹaK8۱2< ߃@ҝFN1ե:;'w(m?9B`__ J_^@ƴB#$/y ;|u'o4 ׵ 7I$^y砡8L'1ib_̍]b?!-[I1}P.ě5fبulY_Y%st>o;рQB2P$sN:m^uYTW }1'bV~&=q/|z'^x >P (?9yS`8=]W(ǃ4a2;T\ ẃ<ά>qtmAi ۲:rBgxs' >UؓwkZxO?# N<錷 YHCSգxs<^kd,ݙAqj/BdzGVjO>m4Zv`8juߚg,^켁= Ƈ,LɽV!JRH|pI,pݟ7z.Y5r>߄+K+=ňWBp]0o3^ VN|jc}l0"3YbċxX;͔n %]oWA{/? G_<ʮV9 ~j;1 |Y?F*(N>W}τm<[y]piF& =#@WԓgGbig.N1ާs*E硘>M+7Z- _/sC{X-+)An⅛5/)kέx zKMwn1XB/~OCЧ;_|8 X;(ӥ㐉ܳ[ao>~ WAHɟߑ$0ΪLN*0T7,jbe ^ 4'u}oCj%ԿH4T:ǀA n4A̍͠%-)lTGt֝&07"@+θxgD2`@gx=? K*82~QcQʫMUwPnóK=wo}zэXyM\z4hU^Aoq{|~Oxfyk"x K GeoK _ X- e`kN2:viZceV{Tc{oX&d/e3nkRbœ;`\90Li/kţOT?$nJWsZ .| +:hpobyS8^&;PU,a`uё5$I_;4x38A-] |}해gީ!S0=N%3YK FUiЯY.7lU>;ab[Dxf|s-%)0،j}rE=`/ {dm%?P)46Mls"BJp`!^8ZFvjG܆WG++|+R|3z¢ǙO Xɪ>S ÕKe@M~0*e64Ķ7Mf07XvbIU0@}gJbb Tဏ8Xy}'yɣ e[Ih|-Rg޹J .9a ?& 0i|Z>F/|a gȸ_Rz#yɅhrua+gF8:k;yy4嬡p ۰&8 Ci.xhёTzò̼/ Kz 7և^]I0xO-  M\`+qlc mqaVkǭt9X3ɒ%߉.'t>Y?-=cz[_Q{@o$@{C*NX`_W8BxlJyw{p;,ywbG}KAmM 곜O`mwG}6%AZ,\y0 <TeP` ?nхE IHa-WG7>FVcX_uk}1;p[ݚ?7Tb`޿_lhy*>a;q -`{ǚǾͻ2ź}d60f4>}O`1/߁ #B\D08Ӡl\Ém5)*!*wX@ݨF\s@ށ~N;cT?F>jVqPY# ؼCt婿g4ޝF߿Lvh3ܮ\R6)AX#{ay`Q)Zb d;S=Ǘ`a[qCݶ5l@{r 6>ޱi˿a&'5lp{a ($?uU 0wL{5G4q`m֨ɇwhMg8UXP|ƾQb >HgfY'8gzxmHcٺ0U;7qm3-~nԌZչP|MW1u :ᄭߛ8Qw⡕ٓ_ԟ~2g_[UF vf_ex@l)1sK?<$Gݷ" T8dt-RԗO(C䕮cXY\,qx3G.^9X-; />мs}+fy8/6TZyk>X)a ]L{ Ga:Y\% N|ޗ8 _tVDHt# Ūt2U V|9B~Q>̫eÏ@C6ʹ>uW |3Vf+4 3-jQ_pѵ iriAz(I7ȤVk6 cNJJoŔ5BGd*\+R-6ּ𼤼?J`ymQ9@y>],{ߟ3i&]ѿ_ƅ H` 4Zu]8ehqB֝r$ pS־'3۩wC&]3cwO,Yjݥ"ɧaϘ<S}aۄY9NHGEqlSژͿ]GǤ}*~avJu6\\;6B=_TMCCmY#aO{CeOqn=>* bPDJxa]ZY Nb NK*X54yo='ꐢ=˼i<38}! 9|QJziZ,~2,eMS2^BʱX'78yF Xw?;e/8`Qە MGŮV{ 3s*wpI$ b _۾J_KBR;t=4oP*aXWNP 8,X[cXiayIHoPu?Ʊs&R?e]rXq;7o_d>)Q+3&>kYz۠!q[Tgib0$e|lZI-;P>6 (g39VS520-;9s?} r?1)~vř\ya|Jw6ݖ0תwU=f\oBt{W]Qϝ>^7'b`M[E 8V5_0\0!@;+EЫ)%VdzgD@"Ic )Rɦg)cr|' f_A =78Rk>4BFV~ fO(@v*xqJ~XwTa"zw0VB`mH._p0`_ wB`EuYٵOϩRxQS0[T/i:A f {LaJs[Š($ZeWcWq*k2ⅿZ?W$AoЫ!W[S̄Ÿaއf]@ٔsrE;,ge)R(akk<5Fjsˠ[]pQw">L9KlDC0fHK*50Fx`ν#[•.4\yo~&ߓP{;yo>đr_=cQ<3;~{c Tp;n99^C8l[{3H#Z8S$% eR )[]^bCΕzf1*-38p7&?I8I7@_2mg$p{'XBȠ1Q}pPV_ܴG]WgCul2z"p: lfc,=\mR5xFtj:8E 6|w pL>C~Rt0׮saZ3ZP W|MSHSR'煋!˟lpeۈÚNَdzΜrFtAc?bqs>a<,4tG_RRS;x/K.iGTqD}N,I N Ɂ@o.c4yWu`]9ق7R`apr42Yp}tV6˙%sq\e$?4=VW8g$h-. F˅Dy2?^U^:+ػd,8OHxSgZZ;r6V*g)'v"yR$l`eSfb#Pw>o,{:J+Ј~7kÚ[Zl47fÑC+Ԓ'FUVL4e*4:}Z1V('F+jA᩠{2 ,'Y w)sڀ>;L+K?=_d]`)=ŋS?9ZGFu7,j]׌c{eS8t!FFkbpooqY$x&1C@,v >j[U& Zel/1A֞dfjDĆW7Kr"E_ H?zĥSv7C߮VEEl]8vHKUp@w+#xH L9>Pؘ \1QºSCY߁4^fpTH|Qr;Gײ}RQ_^llH3 6Oqihǣ--0KVCK~M92zG.8Di'/N{p[ c'W6q:ޮkTE Go ]86h 7y/H`УXkvEk2[Lޝ|>k?ԥ}q\eͪn h~طlkFqTZEC.y2Gy}i;r螣z3a[Ԃr GdactX4>mzKgNך]㰬"]=[o&y56 Ħ}ԉn0Ұ 4] v2%>X%yiƖ_.b6pԃ+4n/նxRWg |'gۅa20GGGݯØN 'g7Wx~ lkK?@@VҬ1[AY@̏<cz:q6w'꠶ }HCI0N' AZk꽨`Ћ0Z誽ȴu@V>5Zxgm}99&ЌŇuar4@obk)a~> 7y"`œOt FxwucÒШZ3&Bۼe,[z[Pbl"lIߪ;V)-g [s׻o39 ٰec7N|{eR'N8i3\f=oX>C&ټ9 GI@7 gF04qXa8t zOY шDA.2?$bt{=CӮSf?&Y5ר"`cgK24R lAh~(>G&ues#հw[S̩J%x!Q&cfky оGG`>؁ ?TrAWU s.\׹`NhtIn :lKadstXiZߍgBqHSE4PǻbMVF+C򭟲*@}MfX0o6a%S<>F G)fИzdU .49@ύh P{1ꋩ\N~3UorZ+bz NDj`TkwL; R;֏MYzwbGק1r3k/26VӝGS};i0kq۳ >uڹ> (igEUqG})-:+?C18B" sFv as< *nJ,s}G1bPi3.۫0'h ʴs'$'3o^@5jjV~p33?|0c#>pF;qj*eXbހx-3m4 >| xBmEϯ&UPuns{ܟVn 4c2MTX SƗOƥ㏿bG_t,TQ-wv~o]oqE%C@(,MԦC5pX 3~w~˚ȑGaF3_Q/b+ eIaaJ}^$a_ vݓ?6:aĒW:8[lAdKwH<Z1֏CO k||+t1%e67oyo'mǠr$aUeBUa˿sɳ1۱JK'wG5?kر滌_ ~q_,}K:1 [pX#ޡqyVqhs4t̙z %ۛ]q8Uv L~'Q* ST(*QadY"?n'֔FVDB_-ŎIa'>Xs7OϺ`ә_f,Z7ڙ~`6iHdx05:aO* mK Wd`ϠF_]\{b (϶+LʈN:mn*7F[S_7_w{, t&::pp& E |Hu@ʉ]`vq, [·nuY~ylbmZM@q8FzOd"*_Ic7VC5gE6*<3# yD2CP\'4 ƈkߨηy2/+Lso⠐WO$+ ҆ph1݀|.!{do,{dvs@ AtG?Xd.wcnp}0d+|(G*Zxe {T̙JfMo_gXpg$2 NgX˨KSs?Q݅vwR:R*sʝqywt =j_*}w޲뻻vhBKQ~+Sr!IL;81ׯ[rj2?e kWb +\siv6͇ؐ CAom8>]@AARlԄ"q9|jj͂`ٯ#vᛱ)qSr9Ϲ؝eun2 |H/lR~r$>YWf}Z姯Pwö^L[$hӐ= ɁFCkXe;mەpjUx{".d-xLֻ'Rp&5 c+gDqڈ4M8lv'َl|ImM@ݯpc@^Չ ԲE*Ekb{%\iƼKi,u# ?v6`@0yG(őC6Ň t))%^E8Z߹q3RB+iy'y*.kVD(W`ș3ހ󶶝i0,^%6NwW%/~7 b8tpN^( MYa8;n;lމ˺om#}t‰CmZ[jMiyj ̻Q%^ƴ[\7\aRsȥ;Hgpak ۮ.|5BSiWzU=MatZӛte' Ƌ+[h@Ə_8Up˷4ԧsoL߲1F#N<\yyKVEa}6$j2KaYYGS߸қ/Oartn w;tJߖ\e<-?3H؁!(aG(v| d# ^K*NfztHW#VІcTJIW*P|< ĸZģ wJ]ڐZ-T djBQEqx`]`ac(Guq> [4'|Pwy"6|.['$F<@g68dn6GJX)Tko_堯籓*ThXemhX/r5B(1[RjcVxLPBޡ㸮h;@5-IT9UεNϰ?}Fɂ?]^U†EϺ'RYb0ͳ$~6E<Z ߝEp榓2]U$'eJº#' dnj*ٻ.ft({+SN5ˎ]n]7wt53@Fѯ qu{Cc"2Lp`\?o(ygeIMjX.@7sc,WKI)'˭D.8G8*pQ}Ӟ8uN`G05 %+ s,vü{ PrA-XH(9W`6? =~&Ûm@ppSơsKr zrg+7 %=:07e~{no/.?:@Ȁ!ڢ_T뮛-g_0;%8u)&{^"~厗5eE3Zʵm { iԂOˑ\[9>)lDz4b7ϧ`8ew1Ay ˕ޟw=̝V!*ca<ݡخ77K;MIBm34c?&iy-APH㭤ǎC]{'ѩ+o3mM =1#'Ub !Bӏe)@vv;-41d^AL N!}[^YRCYYMVKp.Vkh3nf*cXu37 _Zbֽ,,.9?#qVm|-<ɫ@'Ki77Gm8qiׯAm3q6u$cKO:DY~#ԉqseYq}Ff!X89LɈO0U`NoızϘ8}ȻW,Ƥt8{8P7ROc8_+;yGTD3z̅%LL.ai8f]CvT$ymOO}P8D՛!ZpVdVw]>x'=8 !oqYF9Iu7FܡIq/,T/V׶_N0řɒ{hŌR"Y{m8z$h}0z&,zت,jk'jw̦`(n<<+]N.p@gP*C/ LjRiWnfgiO$T \z+3"3 !k 75?cW#epb@5e^|1mK4('ycwzSm 6F9r!q,]ɎF=0r&j'C^29 ͻС|`:>y24|;qnv(S|o-vl16V9SxSm}I/?m-v_!`7yD lk0Qr FK.Y|HyA[>+{R Hu{}}!ϝO^7~Ȗ\9p3'c瑚˗x(~sGy^j$v2ԏWވ9۶jLL(QJ?R~w?:cîd\aF7vGaߓk9$Lÿ>DX&T C\nbOX)RT>RWݡpuQ*@sbN'5no;$\󩉙ZNJ^:qL])P; Ց=_BӓJk"*V{TA͊-(9KɤRb/:lgZע=,0OyLj+O+fpӴUp?P>!{f)5ViH(5?r$f6vpul7$<.f [N`x|OKu$Cy@"(N ]ㅞvMΟE0U%LhDfs0$ʹzo}84sF #"XQ߮qSE.'p y{Vax4 {Ti܄a9UIGB<<q@9U;-|NŠiAkM0&eQJ MNo`˃^yk;$q{8&^gc`(f<*.t|ٱ"RRn_[$;'8~b s &/bZkZϻ~aF'ԕ+eJkòӬ'q@!햣 KgvVE;y7z!8Lcav %8{Jrò7PiH?{'P=`v;[>_|T7_qja\==ω/s.W]04V'o|^?kmkv߶~- ;mw@>__BuT <5w`u!%-ϩ-`|8ŲHj..[<&ܰ w50A|8)0 ?$nRkQλ!O@,(P^~`碌 ["7T:PUf\44ʐ] ;E\Qʯ=_`v҇kO=X%~~-~ٙae$VcOsĸp_`?}c:E]h̆im:Y͐6tm+SUNAͦ5۵+qΔ7YOQu#RR4=ɠ^zXGSFV}'ۅ;BF{1L5zQJHVaeXG3FFlrQz8jrǤ j|Kp@|^W]lW2k/S#ET-Gpbݹd5$n5~#a ر0@C( V.!7ˉY'?0ZQafl)8)MCD I0@OW3G3Ҍyɲk _q-lp168}=44N{Iz@eVv^ *iou@Rybkq h Dm#]xU;D2t[ aѲ{_K =t(}øL\E5#mH͍}ggf \fC?9uc7پHU}+tyۈ}ځĚq(cIׄioFaS'~q̩ݮ fa@=wm "קpq1X¢_XDX]Kۋ̓ceS%1 ۷DUUXp uWq^!>,8X@E fF;s&ٳm(ɜv81*AToB50@P<|J-dщ!{&0{_f 8GZZ ;eK-a 4乘3et(71YB0-WuѶvZXl`iW.d*Yΐ kfq\GlMGnQBn8a$U{5&?ĵ+wӥ:m_K / q my7X++{kS 7eH9:+go=>dQ8䚗)ڋ3Ce^8)8#*FSՖmaRR{;V;o+^TT]*No,8L+y^jZ4eM13mHڿg>@Kɵ:b2e(LJ}!%;I=Ro3 {]q\Ι0'w$<#my~2,_ OlTޱHՈ#s s[^K}͸'hVA&"Mm' cYM}8^ۼ ]- kyw?G ֮aiQ8|˦q)(gZ4j Ԙދmu4}L kf;+L_{&uZA|.%?L3i_, jy'u .U<1߉j{.n37! 4̅ WKN)īo7}ZYp<ۥ簖%g:^}cDAw}7%оho_xFMon_u+Nvtu_*w{.Xy)ҟ ;/-ߩkAwKUl >:> @ꁵ_g9rL~Z]خ@sjK2>r dm@b~55 !cI&xrg4CRo 09!N d9 U`\ e~BƌJmHIM( ^t_/ӣc|A@O^ >?sc!qLVrJd6.фv+Oqi!=D|g&5blx|I o *&ck˟\?AGҀ+0ޞǓ4ܾ9e\y:~>Z iέb %qyTkdjaL)?[$ 5B=ž]NuxN՝sj BgamƱ/v(I)oTnyy9 B{nsc;ūv`}i1W9˯/З0n}Q}dS ŧMsSA&}+Zw "S:##Kp,lL NZĎs`oz&utn@γ;CaF@88KGWn^ɢdɰIUWq?6 ? BHw9+L>cCgk|*V R~^Ė[/-+a'6fV)g~5cŪV{0L=g5oc$myF Ou95 ss}hlt0&۞4RM1 cvgsbWt1Dʣ<̽P\S4#C}R0MyF '*DYYuU|qDg}У<*^ 'wW UB֡e&ѓŮo.,*L_'VBɢI@_@ rԎTld[y暔[2/+i{ 03\kHRI@JFfHCaR^ypyӾZ `r;q;a&ßV)c:;Ѭ% BlPK0~kO[L:|e K6]^4ح2;JlaƆ>"M]#obYϊi8k{ v%_6^Kc?g$(Ԧ}& (<ڜV@rDOVb""aP+k pZ@L9 dOu04azy#O3v(^zk]݂b39rO)8r+@ mR+{U6W$`{ذ.VzvMjvk'=IFxj?Rz$[1cfo.fWq6`2id1!I76N}G2ێ0zI89Իg֕@S2M t*т|@>&r .5;>+_7JoDY-Ct' Cvw&UPb Y&nXpYYnO JuQa%88<1{'_F$ l7[w68Rh/y]åaUMa^:Ro؏V&@>?5PVFnP1{A4ڶ;w9ݥtɻ7hW 9qPfX!|ݰ0]k\2ba8xG$ZۈBeLaCPR=_pBö!S7.'vXqq~4. evx,E8_K?q99#[~`}6='56L6Fru.C{j/C8f=p4 "`~n˓98ݳ{_wyC: Ի&.(LXHlFbʇaBA 4w4_:l-_LwF~Jsh#yh1Xvt=wS3?B(z`\?Y[K^~Qoc02rdݯxvd=Lٶ\[VR{NۛȇʕDqY{.j03 T1$-e΁rʅ_pt۰g}dOt?Nz_V] {B<\ym>eEX sxsuiT @oW8P:(qa]7qù|?pa۫sOC{A}rO2FfjhhP&\̓.E0eA,0kIyA'wLvMa݃k ů~9z҆naxחA⊱^GV3D _<4#(Xinb_s RIP:G5Vnm $NgilLe\*`]?L L ;1fUŠjQJv>4kO5LjnbqBc &'츦Ӿ$W0rpkiډ?8S ujQ;C5_bI@\:+6\ ӡտ53+U^S8߁ zPK Wڰi[8.ozuO̍ZZ@ :YJXΓ>Ug9ZJۥ_G#g1ϹB&OK7 #Į\n=ݦ)pj<-kWryN˖~#1]ioľ-zWCZz?8?o 7_rơ;P'Z#Rwf;1K `o5ƹ);G[,Ȁ1 0d  ޏN4bS}5-%E"; R\+Àw:a~+Foolhݖr؟_fJ˄×h#*wk0ɩM54Rh>dìȡ^{[F- wCKO^OO?#~F^ ,\%qaIfDn ykAu({xt쐼6S*> ƶgbE ~@}59umAw* ƥ$ꆖ\o/q/Wx4r b-@" v/l=Far8?W~N@rh3$̆ m}d _p Vmu@ci >lka:Ԑ{8~^ g rf9Z韟b cbiA~\f0?ޅ_x݊gьd _Az sMx^x41g<R}[af=˩+@>T9mJ-{IuWg$W 4L 6'BI(7sm`&'R.ruhü %l1 pn L% D9mX_fml;媾຅NW}|sゅKZзFe]bsq c\PkXv߃QNY9i++wr_ArYv$NUq0y)1aTK)(bml4kad}v+=Иv$+`1 {n!x=Phsi1n409ǵ5 t\25'cpԆK!jw~c0ˣqbƷg-f KiV8t?F[~`7D4 ;q1vR5O |[P*H%p%YpqbC=w@Η)o2M}{~CEA\xʇd$jNy;(G]ݕBu6X6K5mUoH>=",$y Swհ+[j_ۖ Z"u[~wl[rY>KWqtl0s[GՊnzQ5Љ5"{ưi.}m$C_[T}nvG\q|/XOS]s+vܻ*R.vJ~?oqj,52U?GN6~AHN O$&2~R@M1j~,:,gpJΪkC) Oi!է{REO"+uWK5%cbre~xk ݧZ$pl `{;=eIa|[^F5NXH$ĥC=pBCsK$3zf\('Yf/8W~^Nk 5Bgd9Nu5~8#&JSVr|\̦›ü+w>BK跱|@&g,Kg][ƶA2pPs~"<%%kC_\Þmz?8U t8N,Ė;j4mʹk soˇ!b۫y$lweGAH+Q/}BRgYdF$vƯ]w~9/!N;N~Г`'p} ,=7B n~ًG>v&êжu1k~)j7=0 ?Oq q]r צwѰp8ޜFWJS8qsݸ4-ֽ.¬j8x]vRΗ֯mtf}ᢾ%OuNm2xiPzQf=f:xۏ8:'  ?gF($c[pw<F"8B&*M}:6&n 81{!p=n3>48Y)]c)t@W THͽ?8lq>볖VXa6?^b6BlL`sg|8xPAДDcg9x`F[8QhG>vfS5f ]Iv,!Bi]=d7<+.=՘-_ 3<8gU礌oz#aLo04L)W)6뙴Ie&%fn?Z ۋ ~~^5VuzqrKf5w.]Γ޷ᧄP\{ra9UDп0j2u8yn7ġ kuI,Ty@k[䔋8N#;+TAL qS6kUqx,\y(6焠>nWѣ0jh IUa:HV$[>[Z!Tp{MM][<@fvHp} vW<0Y,nE72sg ZܟVW39w#7X^i3|hluoѽ#a3&|^n"V؟=l_NS/x䡯U ޝsKz$ a׏5z7.ÆMN$fEތ7Dg(f† W 05#@dvG?0h] Q} :@,& ~E)&[ܰ|c* \. %M7{xWK !)i] ~tN}|vVÄۤ'Pn zt +,UdD!K+ز[R0N/=Ԓ17EG;k}]FQN}yxʟrzvϧ) A:ʒP.=+łK٪\|q懿4)eyґCq9##,H.FAc۵+ML{ H8zK͙qTֽJ -oENq[)ɪPep**eTвJJ)+"}~~:&R} C9ķHtxo߃O[_>fXwW4 \svl͹vjJbW:D 7,勗š+F9_}+M'>ew_z⯵LJﮞ뽵%6dFȜSl] m'>A./-`; XѰe綽@˨,t5Z3T,f^dRP^GBw ~~ Oּ:gkh_>;ܿ2c}]?mt>%ˆ* )a!ݲOu,f[B 3(?A 9}KC~k\(D==U&C֛8Q-*؃T} -bղIvO-$E@EPˎ6 eb/#/xAC(~u'* J%8r1]\S@‰7'6<0ɥW`P*ǟg l>X}Hml"'Bxl ݤ= U9u6z^q@%/\YZd޳K@,JAgƣravȒzA|OE \Ih;/{nYr5ʾ)q~ɜПmH%=kOp|xK3 ?]^ț/Aֆ`+M9AC[=e \( }t  7-LE|$Ps_hñ 0 ϊ/\9`l}A}8H&zT܀0[ôr^/\xCjU)Qs|۰W2g\bȻqWDCa:װe ptmN@.8v>aA΅ n\J' h-5bM'U'27Tt[i$̞k9^ ~!LovÃ{[t2v8 vѽ &—Hاd᭏Xwmt砵*–ͅ#% 3G:O<7ʺc$ldQ7j 1¦Vz{t F9fXg<.kn.[`bi};Aqا}O//EY5 })2iO)Ew?\n>cDI?`JM?9CDJzX5W j@=/#~{f 5 la(_6O~ޒX[ݴrɍhx~<&ob##eͻɀ-9CvT_wҗxı8u֞& :D&9[ {O,L)+*D5Ӱ:2MkZ$&{b {<e~E ߊ"vnѫ.)H:d>m Ow}Cm%uDH/8'20[-a" BWn:f7;ol{Bឌ%ȾQqO-h~;e+O L >9(G8l;|aپdžwq񲖙1_7ؓ!y*tǑ1};ٲgYWu.P>P=ߘU+!הbH8g,i]$[8c;gw0۩PMh~c=] U_x4DLDl+}*GwY EB]C0,E ǒ jb1 ϓp(}Q,? pְ?t{HdnreW-΋Md[/q𴡅V[+^ l离C`ytHR: L5t_ͷ8|T՜跈)Btnqwg0U9n Ѹ*nc/ (nG69_Aqź?r--jsj ,rMy߀XSnKAW|ΰg ~621 eԼiS8ݎXhyDu? viSW wҰd_irqHmp#%ebf8~ΙV${) /ICtG0[jYuq$־M0N %db‘lH ޟʯWW%DVB,|񅦎Oi.*}$j`R;>q7lijO"qboGyF$O˼cgyCι@f s!q/H_̸*[Ov7'qp= Ud{~lq-GzS?[AW 2'#DW|ԵG*4|ցGOBTg ,]jS!Rj9tAF$& ^b`]´f"~ծ3 Kt\$`@cn8!8(+,8h=Ǭ̂bDXܤ]9 U:MS 4AUO5&d g)*׏( Ă6*kn?e"sη([eKRRaJz}x7Ʉ-S_̹L8l*Nr\݄Ys;I&7$M}cq?w'<ԫny ݡa[URUZ-u/ނ{t{AX*SI=jRPS8e[8RXɵ$698qv3 -ӟ8BݫJ. <O&F1[98Ǯ9եuRbb#鶂9U3 w6 8ںݢ!w2ƶ4l/~g6-գ- !rT |wtVe/ZJbbpx/ aBe e5֍Eg.Ed}S0v}-1q.&.}8?fia}/ 9 tGqoB$3r*.i2,EaH>+$neMgB#l=W*yR ^B5smX"G=zW `@o l9͐2D aG 0Nu>\,0p8,y-);& 鸞8j4œn'ð>?ӻx,?AB.Zd…۩T.!05#D "w|ˋ0tu5Ni;ݙ}cp^g gFNx%Jqvүiyj nQ3X/}vB |}:fPMЋқv7#>@MʳH^ ¶'L* 8#SGR糜?DIv( "&vA'eqۯ^YkyXial5GƚOg1{ÊVU ɣbXD hB7ɻ5)8ӡaKIqk`LUaQ+eJVҗ CF(/0f2\`5Pw\seCR˨®tr8*9pJsN)Vjt8`kugxy$޷.NP'[1ƥu0h[m0HłX`s'諬#4ӦG =.QC0vo/l_G- G幼ake(_!hѧ.s( w8d$L$Rv^*ǣJ2a]?;Hiv 򱞲+!'|Z^uǾ%'$1:1f%t`@rZ!%W޽&`?~ 2b,9) orP`X8T?A˟kK?ll\B[G"j~6TV߉2BgeRwup5I*E ="`NZd\|_ VUU~؂;\³ 7r3=kw!䣿譙*ǎ7wIDZaX3ɢ`-gQd⎭6*mnyqk=@?e;- p trP~%G3IOk~G,q-/)ٯ=rkN3ȶVي31XY%&2Hw( uVb0y~մdF3Aey1m_l 5+ӤqAÐ,Iƶ^%^ L5[wfgz*`Eաx 3BZ.P!;}U`Gx ] d>cD-R+ xjGS \Ne%O eP/sL* }4D@pXֽ̩gk8g7.AwRX|v.,|-\{E8Ӈ)`HX'Ik}}E!3Bнs.'r|v!~}R7jIfq?qJ"G^x(j98Wz,s;2}龚5 91\XLKy}1Y 7:_랥4-Xn$E zώLu}OXS`ln^z[K^sM53X qA,0^FԘ:Aז嗛8YG&"XNf,`8κT_qoXgzE Wr\\xKhN-q{7sd3aᥘ 6 0s)r#lH5o>h NR+e C/K ų+~7Vaqʳitn'>tgz*5b']8QWr PJk;:/q܍9w Z9-ЬkĹg:@Xt5\Sb1*W/vyZ;CߕNB ծ?d2z(99L;&xVQGΊ^Ú]amݜ-Xd A *<҈Z6 Bbxhkq-BYn}4 kkd`l~XeT0g|a~Je'~$1n}9 0qP$o\ZowNaS]A0J=Ǒ4Q5py2}}U"V#JL[XGI|h ݮ3 O_qMЗ _6 VeH;ΉBWOqfWX~3Ƣ:.YF){0C'(_itsF,"`˽܇SH= Id'"Dg .Qk*gNջwx@XCCt_=J+FoanEW駶Fx Ճcip? R[? ,lݱk_V)a6W5VJ|`n+ xBRYؚ}qNNt ?J8z.T*"Hטs,Gﲇ4?>e@#evD/kI uc`8}Uz(VnxWa ZK}0(qg/ý[i;T*&U#bɛ#fz˞;|]P!HaknH >pUsyRr`Y}5T(}]ydwRXmO{ܛ :^1^۝?*`ZMJAl hHD#_Hv$KMφ*` NKrU = ȸ2ns3)k;?ݩZ} n緽:9d]H"?hE1{J8U#Z2G:r<ƒa6kaHUۂ=xKRZBM"÷l_!H j S/ͣYx}3JTұ \ŜW uq ]=䡨 $+vzP:bȱDQ0fؼ0"i[Z1Ot.(*>z?ZSa{#kw4XcCSոpSvH~mRrrNݵ#gUJk3ZΧ8vGԘ9T'O@& .$;2 nphţ1<-dp=en>l]7n ec{OAjw;ڷRLݝuN屇Q|BG;cq}j |bÂ/8Gyn{f/LTr*!e}CohWd, bon_59Cjrs#u.O߯#<7pbD||3zR5+?sl%Jޤ3!Hj<H1)TE8F7y軹+'n_ ̅%gqXu5u.a'aMPT%ґq&܊͘0ү o,#R)7{-?*$y'~F~ec3ۏ}w'=>Nū$ Le4tWF }L{LkkB_K0EsE^VqYŋ{!a'pBjy7:!hx+Nl Ƌ}U( uGv<AHpit|(]nʝZ fHtj:k#%. . aw7$TrU2_{)Nn#YImԵ9>KM ;OBZM!kkI|p Z ]+!s1P: 5rU- EIs4*0QR0;MueTx =-m_F>bFܟyU+- pф4Le2/iQMZ;w~?lX҃+3&Z?gg(AmVc۴ƭ#. [p)Dm zKf AUѝ9/1؁}frݘJ"c OTNjʢo/y<{ )ì`=eθCӨ7ypн_<3y櫍K>놦[\iP/qGgi-.'63f4}⑝[T`iղ_QTw'X6*}'V<Ȝ/%>暈0UHOs쭉H~_ *,eLbo^Om)WagS0aW SNAPPv46Q a;.\RFJ`3#!8wSX1 '' A]y0 | B?g(sa yg?pzUyX;wy4(P+^yg=ݣVBnKSԡ3+[sW uXUH^Lfu3EOselU&Rridm>繿^ wvHπJe'L"YS6OIWDŽ3R=y>" uBc-hӗ#nG_!{ⱍ;L +Wpm%yzr@8&\"8zk;`bzy;)(օQABᥢCXWЁRagZ߷:.L=}/Drvn˸n|wsn_gpУuS^yZm\0\*_c:?Ϊ_a8aCo\V&֓L4/`Sbn\ * ?rt{^c88 n\\ڥ(\8_&+WT">Cg-\4L/C^Y_C@ cy,Sü7K}l';=G9ڞ|&=x'k0rK>#Gwz$'[`+T;m#KCR0rN3 >0)iLf)`ڻ1;ڊXy gG/o2sba%IS:~E"Bg UU kwe݅1&DB=8:)W 3_f)l}L8\Y$PV "r(0cۛT30j?jÑ;5#ɮ)ϷHS PYjyp6|S&1,řa:0Sji  7"``2h<|ӌI/S$ݖ[`gd3-zT#f#8yQύk@WqMmxv=N)lfB_8Gr.!rM+=qO2#7}>T89Z7SN!g*L֋W^FR*Ӱ)4jH8C3ΙvS]ʺ'*)pL+Y͏dW SFnbk$hvZY۽L6`M y1.ȕĪϻRs^@[j0"!?x 78_as [kVmF7aSa`dvz6L= $j6]Lp6DH mbq3U]YDwYr!kwis;7x3{.*> ¢0?e G.3b*=jxk*{ O:="q7h)o`p NİM/ނ=o&в;XYA}췝siLZY^}Je}[{- 24>?Dz* ثkSw{Ǟ]|\"!' q; dɎVhŐ;^Nn{^)jrYlu_|P@7l+"_asڗ`s߆:eGMN^m j)-GDmRUN5T%̻fvXaN~qO8t|B ;Bܪ?Mٛp::Ag'W0! zla0tZ>߭t͠gv͇0*,_R."jA^׏jס ~WOT.X=lJVC^}aHpmqx6)1A&< ?g.tOU'!fF ٿtEk/5#Cæ4;qt3-rw4M xyޮ\@)e!^g'Ýܸ(ͪGjP~ LN=Nwg5מzCEM!$S~Jb~Eh n@ 5 ǬDwivrl3{,t2̟Y2_Ddf{O5pkG,}{#'$^ŹF5\mT*5Y1;>v"= +fnFZ3QNCQP7-(wUnJ8fCd"w2- ?%j-W0rL!&l"č,cV)KpⷺXh_u~dݭZ~~ lͣ,{c\}~J zs:|(/\o1x#Y/C!8s,pY(,^Π4sqnXCG Jju".c=^]~Bm>Vt(wEg/v\ŷ\,`~a($ !6\[Oƾ_0sw{|uvvBwä1q-2?:yy݁r-7%ʍXߦi<5&Ώ]u2njӴPI86I]Z1rSO4u΅dKzxc8'N-86M?<&ٗ3eGO{xKe<-?՟ +̧wsNC̮= ̤۟AUUbs6=XMU&ү6+p$KɹBmwsc;P&! fْoRۃ8xGw ~DmtET.ԘOCUe`x4AL +$w߯`g)8s'aw쟈q$"ØKر="%E0Nx"LRpNQYo:/6Z3d?enX*2 ʏ{T`]"Ʒ!K82Jdő; 8`ƐKmkUZ$xt0s5=ᦈGORPj~Y"_*!qo tutd>BK rVBSiXpJX'5S Ǿ]$: )j yNj+8ts[ٓnA}amu-<{wH߀aO9uaoh&IaFR.tSBUVۙK};8\|[fn| ||R]XOy"ɏU 1Z] /7>vӛ8w>Y(V>n_r '\Say?T' eOo؃S2-cM*WXzA=0ڈ%suf7\b5sG@EOzWI>L;"w~ӯY{`#[?)o+ ȝ]9))d(2J{[R"#dl7LaVlo=C}qZ복8~G4 Y֜XNjG28}mq%T :BaҀNAz衻| AN;=vEw#$֪dJ7rs.N1gR)K;s$K88Q Fd2w>2ѕ&6bqTΧV@,7 \d-]C',|чΧbJcUL?ׅQv pGa܌c}TW_4%`8 )]u]M^4 j4@YW'ݵdlaaE{KgoEM/:npcє*a({//XvG ?$xm낪HH v{br 3J06}%P3/MaL->|ÞQIzsC3 Ӟl=uiICO/lazۢ juPPbM~wq然߷d"[P|W'l;#pIB5fo>l Sv9uϏ!Pw"2yӮg# \QwV,,3is/Tv\|EU\'?7CF1mys(Tf^Vྑbm|7Tg$zn|R#?_>S аO4OF@/u^;N4]_sUW?|;N20o\q02 |Y]V%yi%7 ;<|6-ā~gך^3.4=%f&]'%;9Ps."X?檭U}X2 tsZ,`V9zYbɓw2n_0zދ^~?NuyþΦ`rJЮhE}>LxBG#W@]5ßp74 1j)*⟝C>ҨC,96wpX~_qPy ڋb}OZ\ZToO{pTX$CeY&\=<]sp\ݔ{^KMBy;[@M>bBԼZ-`1 E){TŒ65I#8w=u7oO5>Kcz-F|Ey0zh{KLMcع^z .411jFԗ`fҔx !a8%Wum{J`ۙ'sa:gJ@Vex=e'I'&`X-ܝ; L4 =8ɩVaIgܤ^ 0mQst[WF Sx/,ތ{UV,YFi_)KY_]PJJ*cNUo"U0-9ܿM&-;qŭ}ah%]M~-]WN|dtIzsaL>4-5ubX4pZKḰ᳥ԷƯ6Ҽrmfq8X'`j0~X-5x kHeW2#Yt\{J< WȒP\ȟ&#pd8/h<"Cx3]"vEjOXl ̮d@{h1 JhťnE+AZGH;hvͩ8+( &X8R)0gG<[ - ]9L6>*m5{蓽3i_o)3|i!PqAaF2S8DzEҩt@8*Crrs6\8(E0胶#{%"꜇`pR\VV+;,g&VZiuľݖcq4fzj=$}*mkA: .Y!P:MsIIW5iEv'z\L4P)lAy]Pu [CQGRBKgѦK{ex6?7yȬ;cf9:vm;$mm7)4gױu5m?83}Co|˧o܂ٰ{CHlߠDb 3":x/ŖLD _È0䟴9;7ц^aX_#C,Jh0d= !S+؎-!Wz(5۫[?Ĭ|Anv\~9?ffޜ?shsU8x?~*lƺse-WVruopAYAGe~VbbͯBm0: <,3+w>c9CGLB4-49sޟ&31J0(Cr-̟9bzLk*>XeK?yד"l̹!\h0e{XD́_nn@tm>"I0328 -@1X+A*R_S44*!3ytrmJ, ?=-*0 ӬǗE| w{pj??yv&\mdq-= N:Jr_ww%'Sq1 `"M{F)6G}T\:u -<<caWV;yC )jK'Ǡ{k xk@Ɉ_ 󟈐j:|g|J!)My-\4;Pb7v"O04AiF/<]ħ?vP:XI+'zL"^g)&̇(p6O;U8Zy EՌOVolRS~Fvv ^E*8ҋPwlǬˌ Ʒ'f, l;~tVĔG-+N}*n,eř![]* Γ/~qTͩJaY"T?/NY$.czvRt*4F=RuL0m{Z|n܏ؕѻ]l+ SuAX}ՙ7s yy&a]qbsky 8bCp;5uAYaOY&?^F4{T<0 *~$ Gx,>@n=+cйׄmj{|Cf8qxNbqPL]vF ;LC%OHhZ )B]/\izghrigФGY$ӈ:_|W̸>bgc|O:ߪEԒ 9zd\\뻌\ R ^|'jk軋9zH:Ғsf](maBm>͜F7q9mXqLZl},<=¸U'3nS{93Zò If}=utt=WtDqW꾞-tvh(?ww%Z\b}6/? 9gĕ00Kz@:efV>BO4I٣UfGy:a!B^2\[A/]qw"\#ݢL{+a68\`?e{@P[24Wۮ.%ߚU> %O)y.e$V;.ۆXHJo^%Z%;WN/HcqS4lT{ޟ\%i-9(s9 rtܿjqubtp 3S~EtNss;kcz ,+OZ?NN1|ruk=8n"Mv}Wݾbs/qf,T!́VGE0pY~7)끾by`~mk=4I1@ݟ6Ƨ WDNvbE,k/3sXqMU?j*-C B&$˫dKeøΎcCah}v]$7m-ϔDAw']>$ P6zL$ 6-C󎻫rC0`sDrtwF'pXT/4vbת{V&Ǐf.Y+jnKS'"^ezy' -0y)Xb\8Du{$6#bt;@2- &SBMaX%gߔ,%)-5Ku?y8XF{GR.w*x Ҫ 9wHN.xO O\aSLZ K^H5gFfOpC`1 ݔ7DP܍=W+g'\$#7\o:בIW+WQ\|7?Oh:u- EKdl6]Y ƖÃ0{t Y.cXI9uMm@}-?-+V^[]N2)s_9Ž)?qL];U8l-psBrc"YmmOr{ 7;CwLap'WG%O8¤`f -4ݞz2),A ,5RX-i)3f*eC;&@I(b[6 )]éV ګqxq` ˘c߾oľHW5WnG8ٝgWaHk~78}22$E~= W{^ܼʕ{SWk ]c6H$+ܒ6Ѫo/BNxCL5ʜߋm~@ fq,WC3*`_ټ~F~֗ɥawss8,]R 2zOp8NFn^͒ 6*sTL^}}ڮqQEA]0zcɠRT&omdކqoawX,=&>=wK=\ VcycK㺟ʱ ΕspRZ~L3Z R K:Wu?rً)ue3'[.Nӄ7ٲ:f ڰfq?䃲]؁ҧ"G.'UؚP=oa?%&Y+YPXS =h8g#vYB |ŭpz3Π#~4p3p =ФD7sY hk>ݭ./Cu֮oAÙG.Q#AQ0b5~r8BcHϿ"Ejrs tCI'ȓWsq\d$1UTHܥGItbE| d` gI!uCOaB, ʽkxZ_>1W{d'Yf-<=`I )LhaGfpCjL5MY)lzDN\in; yOO7REq~k.h+a9mQq W$q=oA'1Yҏ0a-h!-G̑9=n $;lyz/%lxx"H԰# vȿ݆oNcϲ`q\ i ^;EV~Yb5Y7{ "`$Of^txaQ惚u0iAj+NP~c?˥u]7,L>q߶'qzߏ]MAϬO!ೌ#fx䲫Bs={O~3"c@z)%~Ԣ#:xN^E.Z[ l+i<:[{ =*T;/+ tjˇ,a(v# SPYq-*BcS U:qC#o:{qNHyδxO] )<ɖ ?ǍIk蹔0!‡,]Pbn{6x~7`ٿ#85; @0OAȩb y \)N [0v$ Nt Wc{ J+?3+AT&(Z=$wFq$BaۯF^ aOy\24'ֹ2A}-oX w^ll|,0Z77CD꠹k 7|{\o-n9T=̝۾Xm\!IF^Uuxߊ"C QHѮoa`w˅e5`/ȍdD潿zq`9qdMfֽ݂ GJX+;_KӖωWA] w44Ιd>uZ3)?p[vR,|nl% MG8BȦ]Xhws;qpjڧ%?BBv2-EGjdg,-ݒ8=*]+e[~ٽ1ͧ[`v 5B{ k1xXҦ,ztOߩI,8yi@[ ^n׷Əw]¡eTqҼ;\%aĔN>L\1[;^L]`vhK_6T%=M8`0dCiyN g˹6]1`{_sfW!魫f .+9v͛z-ä6XP9Oc'֋aCNPutc/,k#Pk|ڞ\~lB]p^m to *r ~Uibċ28t~!'4z~M")UOoPVx_]Y5:k\KiA˱sQY yS+ 2jDP ]k1iC:u8'a$N?zfwcGUS&M|H3K_.m⚔L6UMUe4{ 8k%]ӒY!Ц0$5 3ðu0#J d/=5onɂ0h5=@ m.οocK}cy3\~{n/[mpۏJtϿ'\L4+5d+a$Oؒ Pβ^"tB)C*@KXΑ i tB>jpoPhM yxV/H;b 4yуsoa2@U_oP_P!xgYmvцD S?|0i)KjdIhu_[s \ID<t`TCCBEbA[ڸZpl>O{#.n\,4[_<.Xrʸu>~j1xõAS~Aw_ x*w>_ GC.0\Zzx,zz M{YU eY݉ [ 0%$KH_8/|[,T/q9O|[u޽/q~o: ~H}s&qW)>~[Hr.m;~v1~B@{ڱ>ebeq ,UN9Ŀ0kv܁@V8зc]ϛočɴ '9|hOJ۠j :/x&]xnΰ(gaLͿ MO?ys6X%o+f˦/&(L2yrUê!);[VR3U Nrb|/C =:p5v|AʏcC?Ld0kMnxn(meKWKML[L2FG8s XM5CD*AlӜ< S_G*Sg;퓩AіCn_<|Ng&(¶_:cBvtPQ ({.ɬ7Mke$4V{;  &01nty F; AIU0_hZ,nFzߦ NUTSϖOb; )RᢔؼoKv3ѳ9UXE''oYuX[W陥I<@l!AAuN`/ɖ 4'b5LQC"{u[gwzZ *orb~z |&R/͒^*'P݀n,oƪZ6Ua~,/tl$ȑ|$tS'UȲMLG,T lOW\ơ>nHC_HS~~ُㆯp"0L$*{d~kqޝP}xH,@d<.eմhK9gK[L Xz[҇dHcQa?_mVtH߭ qS{bG ˏqUjQa ߿߂&a-=tEmu{*FM)N]YVSM`K``~ ݧ &%P;ZSYWA:`[^3P#'ޠ`%|$ e\%ll!ႁ0vw {'qqdTFE)),>OzvN TMΔǢ[dgyi}0x R^e{.0N}Vܙu>A #rf0 @uivo> Ũiz"^{/dO$jӞ[{cno Dw't/Z mRğ3GR‘ ,hJx yVn< ׌8=d#27^);OYL1z#7;t=~ȟ"ǡ!}j)}rvXX݄ǔ GLW$ #_! o T/hiNZi>Տu҇e`A5,[Ǚo>SǧomqVgA]*h| 83llhڨ"!Lvr|Т['BN:>Aj   ~L/sCCC/p?iUNS S{tmjyGW?%#8&j;n7~bsq[Լ`n-gV]Jl2΅MI1ˡi$\: C!qQ?3=1˙.D++}`BHŶXr4qM|f RhuXqK)+%VvXՀ}aALUM/~xAD5^3k'S] Vx/)CjHrqVm~V? ;=)#+0HbO~; %m/`kz$@kxNZ5L66m[ s)0'\=|ϒG6uGtz۱n;nlVRyZ5yR <,4ʊA,'*=];!oKYX|t]D=r =K99JFwQ?9\^7ưG*#  cϽ0>\wIs/Y® 4XaviN 4?m ~Oj:}nhnV_8Ékٖ8w0eC2l e牖mQmNhk^j Uݰ~qdF[4`\? l6PթA̅l"_='by&?hEܤ·9J0g༯&6FwRy{qHHC,$d1!`QۣWoCnNU4+<\@fGon GrĬձMKVŌ4ro?6fRp@>J:4:XX!n:CDCB97x|$$=3RCk3X"5:=¯#i+ xgq\Gre\'#>ߧ92lG]D#j[m0)@e%NG+ E"? ;x`v ={$ CR(Xz5FUBtXI:lѤ-upFAUKo`m̥K| rW.]ToS񋃻61: %ŪFOBEvxHdFdu< a!չ.EH 3uto$ H\ĕpGj]m;+ ){׺.Ǘ ?w`A\w8QiUC gMI<^dMypz /zI&s(2'qs }t_yq~0:0mڿ N-}[4O  2p/hY ZùJfSYFs"} i p}[JXCO8 ٸj lVU{|a,DÝvE?Vosl͵׌|maj 7"H6tl )-%{' T'XL{][d0N{قLTH#Y-l)']= a!|KN&31߃oߟzea6/!AqФy宗(O}ڞ=Z'4{XQS< v큑!ay1Xz S OA&u0ff9mD!GZ0LWh5 }l_ξ )jO8eOOj '$}~\G ^cARc6;8H1@;;RwX7lS7,YyӪ8ل~2to!qz(mʟ*&Rg`{8#Z`˂~'Y&d.t_~U?Dj^5{5KʏHN a݁3O*cKRȐ 0gA{^0=G}+}MM`]k]n̫iRx#c>ࡉ}sMvX@%.eo%g Cüa0wD3ly~/%p2Tt¶7o^ɵuch%%vF<( TzTRom69LXqI{xr_ ȢPQ5|{yMVa+0 N;IM{ YrY=q,u:}GKzRQk`>4[u1gsqxjUWsj =}nWj%Of5$[9ſ6fqOa݆Mrq$]CB4V9?8oMǛH59d5]qDe:pwH }\Xz(^9ds$l/,~b/}J}7 *O!YHx>8'ʝ~a~H=jڣfH{X=gz7$da%XQcWk2TCG (:߁llZW>v:ɿn~wXOZ*QP 8PP9T(;*5N؅eŠ0N71 vwXA@kf%Tsvi\)t.+axT95{ׄZ}gfXKC Wݞ.R E_9p GGPRS"=oG,\`<0mzflR=[:)Lםq(D(Yܟy":,/o:͋@ 9]6447} r?C [6,˺ P}Bك>ҩ?EqF` *W ѥ%X+ܴl{k1ޜ>}獸6CtLFM~Aⴾ*/v'GwE՘K?t=w2:t-蟇[ NNdeb’q5f͢km8V~+^ ?Wjԟ0t]VlTbEmqFQ?cVuQg${Cp=N1ƑfY[KO {~ÿH|8]zY4I,FE{C|j ׂnya<{ i'fpR)f*:nc;|š+ A&Q#8kvZ=RzfUE} J>eӧ0@1}ЏW+qSPaBB 48c g]g/pTϔaM!mށ3SsܞPX|S6I>qqU)Sac/ 9az(,/kjI,OMK޺]a@`'拊^iվ Zq8|o@ i<8BKVp0R8V)aɯ`/gjlH}=ݞXm ܇atڗWvSM*`S[fr\4jq;N 牺a3kЪwP[8~o<0qDHsom< IȞh]kNjZmiQr*#]n+(`&Nn=?==*|FٳM%RGnHuuI2MWRIVd5j R8챭,YfMܥ S:&9iFefiת77LwbоnrGh&fI({JzI@߾z*G ߹%jrl73{nSpΙ.r<'E&Ji'}p&EuKr- ۿuhqh4$t8`Sߤ 7O&ٝMhHAݎc>]}')HjiPӷ'"`yI Y?)ov}ް˟"G:+9&f/XK`ц˜@ yXW"cǐ旸;Y q]8ԁk$av:rq9 Th;i{.nz^lσ}w$+od9:qBhbVǝ7b} aHm$oc +&{O~Ħw*x6׭0`Sa^$,Fl}f0vݣxf-MBn6r[6*+o.$@Ez֧]8sDVK >h{*NN J6.EH>f=7jf;W$/CIu%ЈmCK7qΔU}_l\Q·/=Ѩc\NւDňMOeʊF5CR72`fW-9z. ']jvMA{,:6͂щ<ǮAvE=:ﺯN7N#OW1ۉ%UԶd40jk.p@lf}):wFP0h_0 ǁ{D Neq{ k\M?.ش|ḁ%ba0Wh쾻l=Huq'`Fİv.?9z/q"-cl2 yjXVmZt|܍׼ԦpKl3{5_9WZLٵ1_cؐ&&'o&`%kUlbJ[DNJ9c耬'mn?փѶϗuN@<07Fejl5(h7qee\>p,sp^:O乃ꥉ Xd"ug^vDBV-h%&=j/#zR:2ׅkO$9LZ,] }ںyߕņ}O76k!2v0$+?5_Ģf`DHfA9%MouE~#|1ߠ9@x4 G]SYeu6?2 b/RkOaEDLV]=x2oW:V]Molȸ|c}RD(Üف+G\|c@i޹Pa{%( 'P4ˡZ]nI8tV^ߛ5 unv:+kdK{rtqs(X ThdKg~;ʰ௘v 9\ E !%lRS'_~ #H}p+'(p%DRlObKxos.mG; Ht"];r G~Q,HpO0V\X3 Ď6,8ndLi=U7HS8GCVq\.OWtt`8.2tZd0`LjIdjvgN],& #GXؼ+˻~5cut?/wyᒿ]&olbžʻ S .Hl1wG*kp[032z J5V^,[RHtl6Xwn憱 XaNb HNM Bp\KYX݅3]5` <@O"7F2Xx_xYvt|p8<3^[vڽ :Wݥn Rеkaz $+=r4tz~ǵ_TjS~8YE:}as%-"vjV^xj2q^AyC׺ -4OsV*YnsL*bj/%ܥ12-USݰ""N4o2tq8˳6d<~:6ʉ6(`j;;ldvs_.PLep\c]Æmm֭taoBw11aBK)i4ZSkBpQSoؼα w*y0) b%:`Dԡ }07y S,B.ftl>SWWЦDo18,G1ؽ~C]9c/,:'Kr"-n#\-\((oFGNL XsgR^#%d;v3.GhlId1*G+y-S,Ĺg|Mq2|y땻-pך(nU턩tr4_86Ш)177,ZK4 m;aF/ ="H*ifYϭئNn͹6ʋ i/-ٮ!CxraF@y?^ƹOM{`q1.h=4XܤoNiӿHa)aC'WyK׮_%+NNQˬtؑP{X2 | ˺30uMoS%βs7;`b||`fq8|&DObE9yaCH\TG ksKr7[^D?}YYk3*uρs[XF͡ũ ۿ;쉱+|k u@ Fw(d+h}4q|q<ξ<^9&X߰k~&rJ]Z #8O>`K ƑW:"zEhpH*@34GEG3W9Vb9wcEf`BB=4J`9yt<=U5ωWqu` u [؜=~ 7he܂cyh4"6lZjq8.z~*`*δh7ŋ٥V0W /lӻ{ BgOZ@IYl;_˼\Sp@iX׸t(3L FQ*| {q)M^Rsx௫l@8:vUhAZÏp F$ 3hTϜkTO۠QJEָ6ҍ{7ԄH~w8SJq0^oH2{o9qc GS)Nٔ]O7cw@ЙX/e[%Qq:~~Z)=Ѭ_;\_eqYEot *(iB[( kAc.Waťg茹(ZTI Rʜvo5I'}R-z?D aK5꾗oz_& f #-v-`G H ^UwQ)rtPYpRs4\"E Af=~#=6jPgmMXPєT!w3P*!jɆYۡ60D36Daij8h{QL mқ=9ΰnX$>ƻ&; %vlf>.$;ͪ47+8vmWELܙ^;M=\9_AY!~b+)G3Xp{8.8ƍ9hGYD?^ ʯY*n~c{^[toP7,k+C 67}4Tŋ]a}8YΙǸ@n =R\v8#M_r`?;oyjUThrLG3M {ƳHrU*Eɀ'=XKaSM2W>)s5G+ )^mm98, 37M;yxU^RKmsӑ̱c[ŵc`lf[^IW}V#b9!)8Cͳn?`@{sG.$]}&X)ik,=[;qB>_UA 7XbOm| J8w,{]x%XI6|+ڦ?5kYmf)'(B?.FW]?~ g~[~:dƴWpEUSwSPX,#} xe/}=,F/r-=ew܇:X<<,1d.l2R:ݓƚY[^^]5{hAhb9~[,/K,;&C [`:/6]w4aɁc퇶Yob e21G;CtaݯZ3q}O0&*lS¼ՙ%G5[COiow2V='t014%?zGx쇮ŋZ]DClztv{(f˼,f)|qQ8X\&/5DہX`ݰBGƶ8LawL8:P٩|(ZbвU;lqZ oRi$~+I~진3Gt1=Pm.$]:r QBd`"״:7 {.Ț?Wd;83]꬘K!bo|zy~;1&gf+NZG|⇵oax'P_f2BpG$2)X&MCaciXTf݉-Ǻ^Y0*->&jy,<%bbe#oir#3R?a'2yR4@+G"%^nw8m)"'x%_ԙZpcV܏C2Bayî:1Ʀ|Vac!Z\eS6NGzFl(98F99bt@CΞ:wp/G_ZdRyi cߢ鑏6p5C&鸞wjCOC^֬-Q_>F1ï1kN&P c2&u{aAȭm8du*y\x-inڎ=֐[J4 KX~)ˎZOtRz.^XWY1&%ő)tbX8سME{ä=gsWC/1sg~ tm&aAǓfW/HF})+s01"xBU8'()DNKxÍ-/P:çvQsR&JW߹E/ ؃]e\УYuLc[po h~+|;{s nk<|{V9FЩ_oԃ> !8ȿ -ԸB~Cj#šiSzm yߙ&x&:YVj_^-3 H*ѯᙄ;j6_)I+}&]3wol* EwC ~ͯ|W7m V\ͮ&k >`ln;vzE@笿zm\QUKe`ۀ~;KN3 WL67ofc3v SYUjj`_X'ԋyMkT#R}ap|| =Zn}ɞ-ٿU;`@b=c M"i f\̘8k;4ޔ`#[Lt[r:myJ+t|yzI)H}w^==m=gf]t=kr,kNKra;A8Q:2Z po-kg07-YfG~5·9b}7:& o]ZtBK0~J 63Mӌb_ԤZ4#q}~g!9ז~F7C]lvS48{l"iZfM0muӍ@$\SOjCuᇐ|:M9݂\,0im}Xb,[qoy{ݿ;tkU{S͎JvOJ`OWaRXj:m+c`HҸ+D&FyzԪwni' 4+Lzo^ eo$(p| l8#]oqiMXZan.w]ovvI'^{x`[[䎗sxf!}1_bvMY ܩ:|X&{h3C>4"'q<~ ;L^"GADkL/z}5 ;>**sH#ؖYB1,}A {粜/5yJ?ܐ٧ytX.{c 1\U%0[OSi3ݲlq[0^|o(喬 v'\QVNI9ڬ挮C0*FT8ͻh`kr8mue6¯mFdz=̏o4s!&We ozժ۸053"FŞ,S6S ?;N8i~m:üa[lPsoǾ v+nϵqnx.\g>Џ3Ld1*:]SZ2A"M)nV8>IM1mi_ CCk 8UO%Hr<ٯZ6F`r! 4N)z\/! "⫱)=mXA [?NS778>~VVx.#*X9 #tFG)v5zCy'z`'m(_#Wq3TX`F' Ϝ\5~1/P#{ gk,`/AڍeBs@v:1ޙ%yC! K/tqd`ɠQ1ֻ/+Jyༀy5l# +~NE:Q } ع+9FY`^nԕ kJj?8tf˔#fѧ׹aQzC4't>"oemCC8U3* 'zwbՃeGOaTwZؑ;1n=:{9ZVu۝-H%͉[8v R\:q>Z~vM{ZU&^j}C{ׂlt/K~D;4A4xteb8pk]< t> -9C{|LLw(LM9)19o1r> c pWsL0_kЀNr؛ĕG:-,8]^5xޔʽǏ5[د0Ԋۆr P(ʸ ( |BV уyɼ&W#O:a mO]x$| =6kzlx.vVZ0w݁:>G}~t5莙z꿢SzWpd3B'`$] -4 qͽlBRh:3/ ăS&|{ >đ-͹C_p&1%6 (?|$MyXyMc`x$";9+1:bwWB{QP9L3ޙ/-0Moz}+a7xk!.f>pH;{-Wl݄U3me|MQ-bٽy \h_w{ab˶`]Gx~~7J"p\4x榰;]|ojl3}wC-{@NwG%!x< U#8ݥ Jأ*} FXZ 7dkz;;lqzKqd]{9Fs/q.35o۵B2u(EE0t-٣,($NYKR:_@%7ẕo(;9k?HnP*K;e=J[b B#5'"2 q${"qipXgޯ6]Յe,0V#YuXOlfǪf>?ɄpIX{nu&kg7O4YG)QKZvHx%D2 /-<:`zO©E둸xnZ'f󸻨B;+,Z "0|Kn_e!LL+)8g.\yNRqBgIaz(G CQ"# ovZ8SiNY,CRmfs6ohhƄd;L~noH?O  -JF(L#?NIB DXgO#Pci2Mgj:1v&Y]bx'_d=f<`dQVm }y;ιuV :Lwl]Go0y!59,*xxYv;)K^_~MG-y) :,ǁwL҅Zn7!<"5F>&:Btpp,KHxt`J5}b̲ƾ(XC-yd'Հ&0.F~˻vnLN=s7"ݛBkr6 ּ8ݝPl( Z釠I[XM'M> Bdz&PWw3L1[vk#vWFwo]S8}ÑKH_k8"Ϛ"FȻ/tg*|+z:1 Xw¢/%Դq=}Gӽʹ3-J%7v貜֌GhS(vAV'a' ٷ9VVHbϿ#_h`a HkD{0SE/%=U6^|Կ$GCl,Fe >Y(AH*R,< Ҡ|%X(V ЭSpcz2ahp uN|yb3\}Ԧ"CH|œҧs}O v~=d^ݍ+\^)=ŗ^sF1`? NV;M}c!+p5!EpeJӥ0DS:RTY>R9mO6/UnCO`͙ oϰ:S:g~6gu<x5+nf,F~7[V_4^ܹ{3@NSV\(xO(?rL"<9ur7CaP3,Pfx- Ĺށf\5;?/JZp9nphj6!mjh324z-b͐(g }eY"<2RGeǝYMmlLW)G#b/BjB`l]l2L Ip64&=wN@JKH(hqߏ*u8*].aq¼.2,s즅{9ϗay-WhB4 ysa7_͋|m?6a:owhׇ@fRasv]Ɗ/>8H@GY̺0\MUIĈCNمP!xhC@2L?׮&#ca0\#??jlDf0sЃl+hz= ,t'V>zU\Urj. 힑 9w&@ї?^`oMRK:(Vؐj_mX4ð*_M Wc5Đ`/ԙfGwM1"P#2}0XatUe0DMjP ṛ^ZȶcXbx]xų48׳n߱ڎB+ŎRuTb?!~ *5*/gOMtOJY8_jLF-_[pDHz?xv8(G\ʼnw"y4x}>TCi뾕sUҼZG Pk(;27q0: ZfyȃGnOpZτBA50]|~H;sc2pvfq)` ,RVv |aqx֣8U#UEsɍP6'À߄"њt9x)(Tl n&,pR]d$pԳ)Wyzq_땿'+Xǭ; ),X#x T8P@WҳP$-b&RrjZAG6Rm2ͧ n.6+^j sgFI0V_$#1<ܠH,zpyzL&ސiJ*1>1sۚ3׳bo܍czXoq3{T 2&݊He/.9rAc{[frN*ш#%_q4~0N<͋HސDs'&}'8O9ڵG `>U㙓N0%' 'qR^S?5l[Ψ܇O{-a8qnV3{,΋ͧ%vؖ4z~&{} RNn;˄ mqlS=$u{='X>+E+i簯v%%p"|U9F[fn~oSq98o)toXx\c[3tNswQ:L)X=0V5e`|_D9Y;Ye. ;WB/@>PS|ʸScw(knV*>hVxpD(V6}ˉ3`@ P5A65kЩWĝa#m8{AS<Dzߧp`@?eoE+ek0ְßrE:ۿ@zug>$NvU bG-X+SvsO"[BCZurkyErCCw[h9ƨ?[qAcgVYwq/ ^&`Й=$/^X"<-ݶPli-p؁xx g}&z0*l od^Ou/h W\c(e_/ЎcZLɟe13}KwaN }a1ƛ]Mx U4bawaAj Rx44Zp# ?0&<)( 7J]55)"H8qX6dVCǚ;>7V4t&߳šλ0G/4lrqBߊG_,xG?2y #><:]yΐyh=ҧ=!}Ϋu-S87a1^\X+ sя0Bv\A~dM] U6)-+2`虉`X\?s9;m1rY| >_'G=TL>0t )S=XV$;/@k ;'qzψW%ί;igڊa;*Zkv>g!QoCJJ v+ec#dtSXņ71;.ÐE,>{c~:جk;M'-J _靂XtdI@iI6AZ:fB]%~ySmImO0XO(qz}t-/EEʁX3.| oַEAwK5͙ 0To)\2^%fS{p8Ye.mf:9_秶HA#c$bHc"1hC7(zdGBtt*?pii~n +pQBf]jul$`Aq¿M Y8]Xh JJ$.=rI\z;۰)40lߞrpr^#B"5zMT Z(;:ƅ snVXs{ \A" ߏH 5u2M}t퇀h-fq)oaTS멇8[x8n,^z %2OC^B#ߴa:ʧc!H JI<'{'\5kGr@ǵ/߱]g?}TY8(oc nmw=އrz>"Xy{o) Y X%"Gӹw=orQ  PCJˍKݖ&_`w0CԏECQTLg{=߁*͑zE. <#LҐp%?]fn"&밣ϳ`5{\tm®%Ql0}rgպ-B6fG+=x̿h f]-P 0,qaؿivm¶oR1')s:h>\xZ3gEpQ" ZD 2V~Xz;c]0լ1Fp{1 :7_*]HjM lfML*>&S C=aX_ײ2dSΡPp*j ,Jyf~lvαpF ϳi=w {Åb{7Vt1'/[#cިYI^ tH,fԆǟBGdڥ lc҄r` ݊wQ&>5քd82X{$e=v3X2%Rjͬ\yI#ni@@ȧ Z]:ڿ7a6_MN<qrJq|\]|k4>'بӜ"<'h:&k_pPJf)_Z3ŀ9Ln|d23wJy+{ףXlv\AXNQ=:k%LwRBC9F$%j sd7$ILl/=2pȱ^ak`V(kn}k'޶3)H'2 >]O?΃iiԏ ߜ8OVX]ɋT1|5Nj~~]E70yҼwXR 2[ KN ɩ R Mǐ*ՏzKW}Y|P y zwuVQ% 5[yu~q|O 2wO#8Ql52bމ} :␤$χTSl XKK#Nhg2g5a n׌˿hq9$R7.y6^!wYTσ !M^K6F(W'tTӟ.A Fu9%=< s U~TU0 &p!2bGue"݌K8uG%=u[RvmYG=qk{j?|ƫ gajBd 6Od{5+ 5f ?fڢ|ظ@}2,wZrwC;/ K7TT>wAW6Uh|_uܻ1سcޫ&>E|, o?I%]wOZٳ|Xo5`心W=9xwE\|@)<y,ΜOZRũ&RR'`C=%V,C`|\4esl)e66 RbBOC64&R8-h-6, ZO=GQB^ *&rg C.9e6];ڨiphsZVyh˿Ъ@Jtƞmn 0iW=>s?.m$?4Qeޏ;5%#%a?w/wNg>'3>Ʌ)K8sKޟɍ{ae7w T!uoS&P~BuͮWI89﷏o}$M%nHzIJ7Qd`mH8ASY\3ݣgκ[yO;MTvL7d}gvr{ar9m;ݲXr l`6Qz{ő'jDs7ª.m\4j9 71D'8D5qXI6b9Ng?ň㺺!=68 ޖ-{42h߸YOgGh/U9aJ_!uOd>E0s8Ƽcb?9'2G4l)Xy ;^v_">tA+@,8~9R ,x҉w60E~svyWH\!{dhpOYNHlǮ߳j1nqyOmFiJѾ0 W;dKt0:Ef#{ᗥ00,%v~caR1LPz cJZ4^cCސR $}  fFR`zS:dJ>́(?W~c_Q\pw#r4bo)s€{(@4}M˅ {H"ӞrX$,VĊֿ䶋ӹWgpyƅ^CwXF=F6蟆(tw!>=qv#:,#f!+^{,@~+ccY0'S=֨_ͣB%onq8QX=܊}%ʨ7I1D2㟞%s;@׾OWqʓl+iH # fgCz[4d께`嚵=V$H&à->f./ >9ύ[ eޮCȥ/C3grtfJacЪ_j?`hݸp-ㆍ4G5Fy;`򩅋0wq4/gfkt|lin'3~\i;y!CldW7xt ? 5m F"LdN|m 'EEp ϟU1k;]uXa}1q2 l T_akr/L-GnUO[%ez'v4`t?nP95sTih4QYuql7N('^Vx%% 鳑Ă[8T2R8wdZ]\9n@A<j| DD~}W<Z.'_";x BMe}-t&pb&l ㆞Kð$蹕ݗj&w]贇դ te\ |hgkOe%LWąXgK!Fit'bw^'ln!XqrbG Uک8*22ab5B/q&Zeذ_dl-Z<4! Ug%=q( +%G=ko~o>L`I=ڨu kp| {??9/N^oE4ppg˱  >=-Gǡr* wm4^uly|d ϶wsH'ps%:68 8;l-~i]Igk#n\V'ta3u6O/ZF:wN#~S4?߲";Ǡ990H~OC. =v>cؐ돊6a;e ʯ0E4x(jt7CЉmN=F %'sћz֊S:6Rp䟼YeLp.UAv?mA}`~Pn_@ r?KQ=_N( +qw}9 J%OkH _}L8I'_ z`Mã]ku˴HPm᚜$7#^xi&D+9${:Ur.=8d-sy ^~p7LwIrXےlfI6_ @zԡOB'kq돓D%exa}Fok]GD){M3b7L9&ui3Q8,RtO9PxKPc+#Biءl3W"Bb"baOxY?AL23{!&1L9hx3L&c#{_gex\k&nПea] ~!{>=m(áv8orMjƶ]_1G=s\4 5\Ж=`\7{}"Yx;JrPϛ0YB=7ȏya 5 ~\sDBӦ(`<ֿo?IANer4`,ArkUdKvOBC8$:ע0rATrxQo*cA{>nQ.8=" dq_;;R8b8I">#[}x N)֛>(Pv44f7<%|q0Mؕ$zep꾛kyO`&[zj ,f]xt-;^! Yс/>"AhD=T\5 :'L ѰYIV: pCmluY VLjK!jOrPO&ΦIxLypT' U=sq櫬Ph˸@ch`׻lP\Z}.7#?Zr`E0rċc  v=YK;Z:pnɸu,OڵDž-rN= @~T(E˞:oTV\]8i-#G`zzK`b ="*$]/xa+ONƆ0K,yG *[{1ڣ13;xN/~`aPd彁7ч$|.SgM.G,BSߏ#޼lo }ob/ Jc>'!-C,Z6>}fm4)Bk1NOg%\W?Fi2 7aOG3Z~UɹC!ݠweo%.]gNS >= n=a5fϏw`QZ/ Gm8 }9cEƮ^0ex6a3hK=ᩍ}Zav-IӛkqY/z0)cЯT޿N?%:O۶||^yY~9^q~,D8y.:V,`1;1Ύ)Zr-r,-sq6N[Y+ۏ@}p t^{}zEJXNhorvh -NrBz i]}uP# kV@[';;aw֌M[yfz7j6gxhjKN q/d$n+)`OzprDvњMf +kqɌ*3BpȬ<'g3ຬY9YK(Dv8K$<~n󧓱>+H!=C,FrYv]^c9vBwʞr^@R5_g}M̏v^cٲVG}hú3Z+OeKh\n(+O WfC4{7nii0"|"H}}ޙ> `W$yX{F4yтDC^MX0( roMז 8TE{rTヺ ͜PB@ɱX'.Q:5@ۮerzo?lLQtopɧ(RQ[DyOOaCPݰZzaP/LLc= _ ly뺖.Uq69ۏ8j(ܘ*D~k!0@ҏB2InXF6]{w>+>߮ׄ"p'SkG.\,kEtQl{tr:mڻkIC]8sn^)ҋמB2l#6qZpg.r4HQږvm˹X*ڮ 36H4IM&]1#0Y=oe5,i 0t)Wsg0] c̼hGA~}_ClV̋7b#֚#"heP= э˗㺥y@ V& e;Nb?c=g!OS|_[|\K' Gk/_d/<{Wa-nU:΋P)?2XzEqx4wK EY^QCR&Frt)/+!Et?Gqhx6VSM=WGf}PSdsB)i]8 aTf3+vcb鬢sn/~8ls_,X@;}hgDŨ@EtGتCErj6)\iGrX-F )DJ骻 x^>v" ؛#;r$-wX+6ysd}b/HO;T*(ڵ!?Zr`(U> @Q\4]>rW1$b7-zqY̸©ʠ|xkNl;>#s#Haݾjcޙ324!<*Lk E<~C8VvL'O;>}-G#ןlJu#L8;ކWO:RBԷ!@G ߳c]նCs&,K-A$}ɛ 0'S* bktwKN_s@`UۂtBL8%q@z|o8o+ YQDq#$/JRx5XtgLu^TXJ qkTŞ}SQS.ÿ5C@71 Qk%q8{^b Wg1J:) ۂb=~Z$z چ<gt/'^rM^0Kf]B5}Bnqs9@Lf7aG>"Ia6腳: i2E=еz) ļ fdՉ}Ǖdhe?/rQLg{_[M2譢rPqE0r5(4Ac ^s {Ҋ a?Dž|9Ŝ(}wD׌ !806`(tƇDJҾK뢛@# %0$& Lֱ}__|q f fBL#'ErEC}ϰ8Hr|Z; fnp_71d; Kе8S=ӬĦK5]wn$e9rL..䗫\*ۨ0aYso_xso.)O &K59eaW`ݺϖ;M\/z,$Ou\{jucNazH1԰)R@ꟗ`MN;qA!cĴ@8~oo1áPG27q]At-ovZT4;-fhW G$liI2pdANHLP̀#v)H- a )K;tMv<߄7@:>BWdl|x5LXh= \ktEl9/ax˳gAmb 8rWKD-3 _TG9y4U.UlwƱW S|_0mf0이[frCfN7C}@?]m v}hÕbwe`[N fAʃS 8U _sPsGW_Z8wz!% :BRX~ꐤPoZh, t`È> ^Ixâ$gH:αv&8Qfy ɹgpSs * q9v_zX.NN߁M~~ ǍG瀬A/߳~d6+jO@4L\W:! zA&~cXJewaBze~tQVǬ?I\@V X~]|+x~bk3|Z Y08 rԷ?%I!Au>xƏ+%؟0QG?֩Wa𭘩d^9csf y)ϋɪaNчu/qtK/I bWӻ`@5W_MhՖ;I}\_Gд->%k6mmsLQG 6qw|*0Sy#q<j@3 -ʹĮ7 @+D#m1O<'d)c#jduzYhjf0+`=+L^8xGT1VH.[&5=~.:4GBTܸgzIjXh ^6 %Q}R6=w=7+ӻCvA]|\i-Otq1Ap*xw_>ox9@/"-r۸M?Zյ#5㎮ 8 /Y}[[VvqzF"'SFcB%Gk}_mb FlN5ן|B5bɐsMl*W@t",%1'0xIpj;)E+]t_rS4K&{r)Xܣc ^ܡځC!w8nsAvO_cOt Y} 6ٺ;u0[r7%.N9cSluh-:?yal+{IE9쏭L v!Ŋ4@U kvϻ'b9!-IV}+T(q]yM_ /Z$.a$XbхŐawS.ۅsHd#s.Dl}â> a뉙#|K+r@c!Re 0]C?Ai׬8粕L$_4\g;^5j;0~v`T\Qloa.;>.VxsSopΏDŽqcԋE{Zr_|gU_pˊg|"i*q~m[\F(%.T{gMC- eY_a4~q!<)L헦=΍C1m] 8 Yl]q妮lQ3ͅIJ g-W`ಡ.ԈWȳ{_M1A;3,fԝaC |({K:s彨[$ 'Q]vt ol+T(=<蓕pXaBT Laty2d,MJKO;,U"!4$eamj&|۽~W{ʏ۷ 1hz ,511 7I0Ð1N d=L%2BiFs<_jC 8,8b$ ʑ⏠5q;jنC6߯66A?~8=ژɗs6GoٺT$z9"F |Gߧb8&H_8 ڛ@+C5\%qɷOj̃~,-%0"6Z܄n3usza=7')1O Ǖ7L͐rW1ĝ9n-4\0#]&VFR&*;x|}*\"\2'\.clנiMY xo,P#(Əa ? t}[J7IvvKOQiɜ8_דS =)x?@nogwz 硪;I\|nqlQ/liĥ թz@ο%Rτ=Vŭ8!al0JdjGEB50,k2VH1Wp<4q&dLN;yjG:SC҂Qh>ŢC -f Lډ1 z{ykf,qы\µw s=0P+Tʰ#WE>7>  JËM97K8|虪{q1C J>^~HՅܔ%aT*VW/G"{a!.աvcLB+lI{z%DgcSM+z BڦG48Ěξ[t.ܮX>%YJ&{pQu=P"t{G]Ѝ7,N',|I` `;`䶟GؐfbM >gÑܑ-R7b+ΟcrҮW-C:}|6wi)}ųg#>b$[қ -9PVkɷTl0j͏(R_y7X5d#B[V`Bͮ巻ütO;W^jL By;O(OUJ{RFO;Nv;?R~ 0o9;ұK@΍Y$O%&DXAU]OG6L$hcq᠃Xd R*qMKئꠔ%BN[ G׵'ٞK?GJ=kHtwep#-蔟ڟ\0,<-Nx#bُ͔|ap`26;PGWZD~Ɓ0U?mlU-IYjm_L `rҪ^tpfLnDz8txߛOp[kH{/E8A$Gfr#ͬKg7nŐ=>N7iwyøJux/T`m>};Fqml&˵`a xg$(v~;Pݯśo>wT htڕ6m4_ztMknAHu\Rurr:ĿxOM8ePNG> IWE!hz|%{ޖk5ǥ]P9snv7;U"j`>Ӛ^. ~ cV9'a3#IL8;=8'~PKΔyv]tNևS w b5y X3ׁ+7ޜ,Lepc..rP Tǃs>FrUP؝&Z{G^_Qy WicwlPJ"7N&Cqv qé0w]"m8kn.]$]r^oR栝e/iW{ K_w]뙃}`IcJ ,v.|Y7 '$S%0@>Ds\֎"7pl8 L숊S |wJ7%Cw5zHl\#؍E߃պlMrձH" 72^DË^/p]nv"t1bf^uq ), ^\-25[sҡ;8i&MB>bǜ7 ?W'ߑ,՟~Hw_֖AͿIzTAjp9R !`$)L9].> D=43ځ}Zy:pjy,vGE`_- ͉YAͱ^FVP̚{\2jc₇fSW.JpuæsO՘B$-J]z4 MoÀ[}0傉=+Sй)љ <Q8U"2 3~a29(j!3*y+ay먮_iQD$UT@)TAJ$A@RP:Ewwwn9;33]c|{Yk9皟?xM6dqpÈV[J\JQ(x"'d4vkWq (e= &.ڑXH( 8̓$`i[(tzuԧa ,T`A.N&?G]5cdhE}BZHWQ' a+`}8,Dž UE '+e|2\0Tvb.3|/C2˱-hLBc F'FᗘiXv9M|Dn kCDC})-hH\;,>!YQX'hBj }4@|A4cLE(*RC ZO^!%3 h"^"zY[rEYw9O.E!S~<.N'@)cʍw7al^#D@.t%3~C+:C0pSpWx1>0N.*Agk.aݱ0 p@Fv۷ S5V=B԰Ԡ!OQ2('͓a1qXa }?VƯ_jsGF;=O` o( EC=$Qm+",4 ЗBgfmupTR 94pIkwz\6Qom}xτ(BN;Z4xua{?9A8w,WUs[N;`a&N"&"Ą[~a8돁hPiP5^.h09w#}c~I_BvN&pfU;|eFs\?&ZZrz p,ZAӗ*oAOd04Y2mp x:I~Rn KvѧM;:={͗<ݥ+hڹf&-zʰ7 kA\k)u }oFkBQդppH:sZYUT&'^͎tҟ̅5N}:]qxJ/ѹ[kMji{5_L_s~+FJzCʨ+:t a"QxAՊw]$Cf"w ![7 xo߫ yc@_nQjFx)aɟ3E5Qװ`0us>[L?H8;a))͹h>_We9YUЀ4 ߣwUr(͞'r'> t; MT,E E :&|O椠މjy 먹̢˝*myzk@3~-ؗM/ k{-\JP;b~Y4`S Pׁ-n,J6|g&W񫪫'YY/8]uZGbſ7cQAE3H}Aݷ ӉCsQ1|?.;%?kmv\QfZy+sщpo9 <-т[i`'f9l:>>|wF? |uȉv={HgMXyCXjlĞi!ӇߢY {h|#P˟fSJB%NM#Z 64Ta)6Oa7g!Z}l%f=ra+5|VM.99R4Qeox}㧄Ek0\Kt!+ mn56Ad(4z,Q+2/9 uq֟JEY(.Π\ìtaḪ0,H]xO#b.VVnCx+&bVZ̭']p79cx =}m( =FPcb"*g`SYED~D$T\`*г;!1#TK=s1,\ϕ @K R,hsX/s05ލ\;Ofڣx>+09'CQAx34QOGCм Kj&ZC3GdG\2v M8:'¦ApxTrz2#k܉=\4E! $ 0DU(-?&MA?Qq.AZufF΢]Y1V'hڽ{K \(䵪) g^0{b ]⤆ՋgBфsta]b:VwaW+gw 'c* 5|]1%W ^BE?/_h_ӣt|whUӕ\+ -ԫDOe/܁W=sC`,Wdp=miFkqS*HE2cGj -HEL峠-4@)Wz;+'6x)q>h p\nF}>W(QQD]GdQ\kD`Q!|l{f✮w0T{N+ڈv*_@]hPf?01 Zd?t'f*2<MQXg#jxn4v_^ PD=\\uپWVq6'`5Er] GB$"ك\g$ < WaD5AʍJ <$,Lio׬e%h>0Q7xx÷eTrB TshjhDu*j:uhH{Wմ6pޡlC}eRE̘` 2 ^7Z7cp`eAkoWPk7fܠVVBw|n1r 'ڦ_3ðX܇Aq=Tyk96ZT:s xݏr aB>QV̲a,h$c`I,@ v^ؐx#6ExO|֪iE! >P:7:BN+G}rǞeolL0+پbda&*U>4r%[o._\8@6 3B #/eaű`O>V>}h^赆L}u4~iV!PG1Z4pv?؄MsLo&#J %N2=vR ѭ*^9P+}te pby犂Oگ:t+,IHo#*˜Ñ EzBYO5,|6qAK>@=Z(4ięV țJ[gahlY>>,+NA8,`]Ur5iWgEdSWA oM`8Xq\A5JWH]ǵALl=҆b ՛ȟ@2Kk1&m\4VdLˍ>1}CNv7!-o&޿seL稄6*.E[ɏV_0?xU@ИH&_a\ؼ"3KP oSjT(;(ʍn[) EBIx` ,2^#G)/lGu /3N34Bc͝1Ј "f \ ӬuףYBFBu^дߛ0N?UDMfWѢt}p0r l`eV?43G/s~\wbLp*;d X bVhư-<߱ {"B0*#tNHg>r4R3iE&R4lhYV3ʲF;znFGQIǣ qcVh ˗/YE^36xFXoFQ@Im0f9ބ&C]OUrmat)*n}k$ѺB e9!GU3m>=0V_^v$sVbl|KWo%C9U@v64 fX0ڒW6ghAF;XL艨g"¶4vE+hz|YZ)5]GkwUO!|X9s!trMa||؈o(p*TQhvUu7jbE8s8eVTibg'$l tqw|Dh{+?tzחZX;yXY.˻C0ȓ_COhNcV_RSYa%;W]~:I}~t%G ~½oxWBp}nԚS#?$98h6fTFÖ;wQ#z;A(a_fe<#3TeUF^)1`QOn k+9OF}Ѱq!/Ep` {u!چZo e0$+ yoe5MBvihvNM$*S57Mנ|ASX<M0 -(_O txGu@5Ekɬ\E:}hӁ4 /4U\?Q:H>[ʬ3KնSVF 6D˞q0|>?Oj>(NCF9V06gڹ]p۷a"|_&:E;Fx_͛_{dКCXFYaF^P[6*Wa GUaxG*Vڴd+'z157Zh?ݐ"yztkaQO70P \?r"cFhM!e j4\ ".bMduw5+\mv.Ш"rRy &knfӔ=~f'c "ʁ? )(a.O maWC8C@[ ~!GtLe1@{e@'d$͝ND3/Bl`خa~O+:3܇zB$ PhIC /v`TOeZ6I"c[V'n['E٩3 Ktw`AHjj)9ɥh40NukxFƾ6 B{lԶ[l V8TUW`̉0  伋p.ڧϠqϩ/w+SJ@MScpۇy[ :?:c\V>oъpώ^){!FMɧ 5Y/' Xh:Bʞ0%^04lαM+g]@tϭW}uc@>^h*ECzTKöuX*dl, 5$hL6E8&.ӛP$n4VaҞ澳3^@uYMƕx"sT"e +?auK-*jGc7F[%jد:5Ƙ(KŢc+X3 1FCQcإ*%{<\lE`b#gī.+ 2}zf"5MLЪ7eղ盅Z9n8CU5DčFEmj~o WpytW-+Veg62lBȖ`ؖQuIf3#)xf@>aW|hJ9?dԯ+ˣyhCG0p" ෻5v]3@ 4;ᵜ{ᚻ͡#u^ZjsxDPGd3ގh7cZr}.ՄwyJ1t焱̪ I,c9rޮ ?S@+GT|`38|X{Ndo`^RfUn}z, ZrsZ5'I PaE>ESֻXѠu"shW{] ܥGnw24eW+)c(|dv'¢m%su!NAvb^41SaNr P`;pbĈۚ:}aㇽBxȉVPxq~n4C>Uֽk`2j9'~Jl6ȢT'Ds@MS2pjYh$ 4 |G$yTs=􅨈 &o|[#BCyA,_L~Ixhaw-Ѽ}?-X.w[39[c ie`mdH7]ۢGӇ*뎫݇KЧ?_FnfD UċaCYhiV+u#%o֢&::ZzpvsNWP7qKR$k7bߗJnx-)rA{sl}`0vz- J A{[u%]|E[{P<Q5?AWgva&:ozz\o}|]*ғA'cTb,Z߅45Rn6w[PT6<!ۇ tcKJOrd}2&`=0e &Ӌ.=tz )$Aꆄ,:20–\:j Ɣ:7G"?N?dq?uMf_UqX`&K*$(~,dgެ,~{K`(A;DPۓn jA ?Z:~< v.zwJAKbhN)\@ɉWQӓyTD}-y:.{  )#&nsUX h Ԅ@4#-|Ի 3 -t:~ur F訛fWQ#zsU<ե&Raj͸Sp1ڥw0x>4-|CժC_;o=FLhZ:s.̏L_H|: qA.kh~X$8VOtԗ[XiwFzgkw=14j\J&sC]Y0L@,̷?>BBT-UQGZT^@>}eyh,GqZ剬Ъs:|;-"8q~0[tAonB2 +`zS Z2yǗ !#g="9)#!ZjzJJmXmDd2bʃjkc@3֯WU@cNA -l{|e@ -D܎D?{Qk 7яF͒ pJ Mjq=3*R4h2|5!e7_ӄWomשH`[i2r4 >[su赊K`Z 'Nd/ڠ;[ ֵqjuWg`䗗( OWs:WaʬdyH{AtmnVWҐݯ_qq3_ȁdr2lP~ռ̑SRjsHznxp9ŧd9w;{Z>9A4[Dk΂~F\}D_:l>f-bgt*"(^3a>e5huؖxrctgv ^4'W ?js,q4;G/W@^ek , },5bE#XA! cI0w$lcVY 9Zb|~s91q8lfرGKCS~XHiX\M[ H,WJc)OO\rgwl90kCۏ,8#Xe/| "%612"(g{vq пm#]%d]D &sX50F誃hT/n, ۋq@uE^!>CܣL7A.><K&bC5B6Ĩv%<^w**1Ij{Baڏ`G,%.dBtB/*E6I2}~ Z-Y/yqb(lSgؑ'ύ)aXy Rjs^}m [xuO+ᔇ\PIHykM=ThvcYk0gȓI &[Xː)zR"BL-O߄>N1:iPK| f ׻%=<+F/L 56aL:G̡KFq;g!ի슆WqǤX hŸB6Yf6L$?=C'|mLd L7A/"D0gz`4c>4Cg4=_.5tD7Uɻ/xdCgC#+:P[f:vZL0,/dG/ay!V :I|}Ej[a6:+F{)momWOhv&ck ``H~Azy Q¬cY7Ҳ¨f#>@H[0|1?ϗ7k~a߻Q&w1"NFawe&(R;@a -컡і#lOWrs&IKa8 h4wtOxjr0{œȳDoB/h. ~Na¡pX\0`F^II;ÛPMB pAfǮ1 DTퟋ'L7+B ͒D$Y>']n}ߊ:Xh t5Mp o+Q1fqNCtﱺ O+:E!Ć&'_pr(O#$ G:`uBn0+ i.Xa,Flٜ:NS$[m ;T7a> e'(=b8bgݔsvfi,]8,r'r^E bjho%ϗBH3%S(,Z;NqZ^3MAEY x^A{l,}@FTЛ<٥Pg@C"/gpm f?"1i%euYXcHl iKݬР{Ksƾnz$Bऑ+^_ 3IyzV0cPJ݋(2~6vȕ|aT8t;mdcSҙ{yg4P=)f`y0J5w| 6n c7%'5<#t#5ᇁEАw2,)sO7Fh|Ȫfk$־K3jAȞi~)së)+糒Z8W(>)LKpCw/o} ]bNCTRp+2E:^o5 gF| 'H9CR_b.ĂB,a.}< IVϦާ6t>zK}כF"…PF.hQLSA:R0f-^&z  u>vz^.MIgTXoo)IrJZ;&]0bhO5qӿ&mWAqḩÚI# PLJ:=gVĎNHz, q!Ed<("XهqlG2+[|Ymy^92^Nѡ/W\0Dci ,Е?lGYcZaVqP| ;(^ #d܎P2F/./FznrC'v@cMnn4쎞b=k+?,@-͚,; i^0 M)]543ζey>Ժ~A#NӹykEd';qI NDG+T6{Q6*_I_RKl32oa!AcBu&vؔzd&BcD+S;i KRz9@^!4P3|Y1֫#p~T&4\lYi揀Mf吰Phpwb Қކg:, w\O8$|jN)g t_zҦUMqS~Xt$\># lC ĿrPɗxJ/{{Rɘ<(7r v~0#l#۳iW4gcX2t*H4jk>(# [~j*sAzh張CFSf2Tk_#4<\&+5 g}Fݵ9؊ ա1G~G ;SG;ƮX&<͂f%?`\]]o^}q!l[ _02gCY'4>I h{nb)*R3lw}*~;+Dl>^PH4%&9l 0wd}hk /͇Zϡ<0 o3öӏtq/$43IOn 4Pz aK-"1gCjaI,9^C0gy@F)20zX޴i_wG>]NC!yf6 GKKԐUDz~Λj}hw O3=(R80ˏ0 =7A ٧iZhbJS6ɣ}RPCə]3uT4r`$Eŋ/axfy4vvuRPQ_Ջ0@OCSw FV) Nc(} #<!V=L4vE`ctY]c:M{fvO3tģi3: Zٚj~jK%&lu5;La@dLTZ9 ]"PǝmMM#n5"Frr뵏FhRjXLۤo_ -g>VK c̙5%l /z*D/aD3Y,f#ءds\ )&Uee{ y|4ÎuXc10t;{u_r0rcdם]{tahΩ66Jʧ/SaaXΠFZ~T~E150fG9*Y|!D* tiΌPNI]J+6زɞ쇖5"P;躧3ۧQqCg}:S9H=Je#w`*,*FUi BbTa}т>Tm-BV&7)J/{_F?l0Q.Bw1a'0w?q|EFF ߨ|^u̮2Ga8uRPnuBQhLK^Ihj h.~SeԄ¡rn(3]M$eN}w7<+< %h a%1g`,YL^JO';)L9@Ҡ ?=ISi҃:dBiAhhy\]xbxlˊRO;/zZȞ?kߟ_㏮U_/?hYm|g~ow_'Kt[v=4??Wo]oU9gUUS;V޿e?k7-?[X'{DXbGx=bI,>T TUvglmnet/data/BinomialExample.RData0000644000176200001440000005526212400076533016446 0ustar liggesusersw8}zq.KmzJuKGubq)+l[RtubK)>6-!eߥN8AR0-jL]oEz0܋tRhMk W,>sw6ƱfN;dt C "&IK=p#i+E 822en.4%{;XN$P1"΂ 8X0$TcSz|}[S wUX^|dS7Zicіla;rBS҆ߒ 2+iV.z Pu<g|-'|6k{G$ @o򷸗Xr˹>%d9Us lvBPw ~~A%~d$-Unw]%|Go Wq:5/*\H:(S/@C[bƏŰ| ۳;lp\y '[;nc[V {X]-Q()}a/ނk"lMoο-72/P^oWDX!EP]'pup9:sk lyG pZlX7>%p*6g<p;(X9;X:T8}9hfeJ7|\)}^F1u(LZeGs+;'X]0V1o8DMQ7o3BJYo!%d9-y..wMFtf _7/UG7$ćH1hC@d?tmiDeqTO{C`(4H)_ɵub"ش' rk&Pfi¢ +A<?Onw߳0zE/aL)?*;D)kC8}xu 9E6o+u$=ZMq凸d!/LyYkpJpN݌ǂSf.{z8qu\3x`Y83S_DŽ#8ΜC73< 71j ]-kr񺧰P~S 4/l'cWgnek!ɏpU2ޗB׽S󏭒Ǿ~J Hz'w/zmnXz9 _ݖdCl_?['o>,Rc|TU@}YjJ;BewKMV.qV|?^0m fj@mkئGJЂ!)'ݜ1z>jⲞQOa}'v~o$ޣ(@|>lGrA)xzm 9  =kBr ?B)yGtLGPIm W[mtZ|t: nHCP' lJZI$AtO0]'S (ێJ]o@ݟNm4HWrNJUw*%(sBͪi#kXN:3-J/PnEdp _뻿ly8 ^m.ցevOkkUo~_+P9LRQrtI>D[h׸Lنm37_Y>]Y_QNlh;t2#>>N?&垡ai{ʞkuJase\yDeN'H>5$&%Ql%Mn? )PoaGBܿ\L*(ztJÉSBA'F۲A?.St\3V tRiWsX9WFlƥ>kj<,1$p.69!5Ҁ9? }.'wopUp$*;_83:~2 ߘ}ݸ}W'I+(1Cz^,Z]Gr22K =)c4bM|_gF+JmflgpWOuЙ@_b2E :~>%yuxŒPU0Y*YuR 1Gݴض@c7 BViD-òf@XqgvW{>k&֊ηdzl~37v͵08x2}]i>+D 1: eoc'MѵS4Dy*0gXlw;#ZDڹ{# 1lqv,\LD˻ iQu X0.v$9/}AyR`[7'ZؿTZM,_{]-\\M՚.9nʡ*za?G=BӔi8osϡ.<DFyZ`S"6wv@ʍ6G*#nD*k[wmA̮4Ԁ"8V.GvgPGX/BCZj>8cV *8zəZx3!{޽s ?s\z=֥ ۮǷy*849]HJV7g43\А`})ȥM.#VPޫ &\4P64Q=0AN i>?B=[cH䢺'4E~ i}k 豠NA( d^& Ci'e`3 F[t5Auoqhg";i!G*Aw&Y% 0f/.*~tPý2ܜ hC;~uxnve'a8A/dK.y=] WBf\LƵB\Dc}~X/z:$~}.QL f&^&ySG]U =U'?^m騠^옲Z&S᧋*Y-!7tfSu0 q-GII rK@)bo:AwcG5݄e0GA&IF܂,nq_ I%rq{]8 :O=Js(kbẇv ޘ?H 6l>@)#R{ NN淫:O⿠a<K`@SK:*vw䮶|H©MOoqw2\Y\r eSnH$7kxRw290p6ڷt.@wXБc%!,٬}:ruAi#vJ=PLB?TAS5 )YXĂ#ϵ#aڸgK8Ee6n`e07]B5l -'g\ϊ|mU]ou\V+z},Hilʃu 6I>hJoqՇe/<2tk4\5yRGCʅ}>#!¾'@ʬ ݩ8|dfCCӴs}kعyv4Ҏ_eF]]رTVt_ktliXITvhKe;=2i*z)rן?ه/~('brOhY/ÉO=)S4r_389&lh,/ivgá`򏷺})*vǻ/KҔ, =.x cNɧjgr3,IT09srqiLtìOpMӵ!Dzd$OP)3O.|QdIU2gu; +$v¾>p>s'[g;u LN|߯ғ/qFV4jÕQn0C~9L&>TFCܐP`JSYQU[N/`,*1VipJ ;(`Nx?sUO$Rؙ!t%WnUG`e 8N) ޹;9 ơT}眫$EqWqQ&8v6%*J讅œo:HRt5OOƍ;7kr+I\ps)i\F*9qpSo-N}s~g0N!=ZFQȹ8O\|j:0di$|pA u|aM'?d@]+D]"Q%h5s?BpHڸkV4TAjڕطq W+Ҹv}.oXgq)nNOj,da~a"\zЎ+vjaUš@q95OECZ_$x)go"w˜Mj}h[h$qg/H/AK C8?8p&t>3-VM=v{?r|H Mi )j_hrl-qg-qi =&uKRjp޽ eqI2[gAbS sS;{e.h4= U%ymې0WS8CCA/K{S,zƑx# I /׼ Uj^ GM7 p$@˽3X4@AAs›޽5u֢o-Y}#I֓:Њ#t|J”+O+~`#(/fQvZZŻ[i?K^36N[T@f|AhephbN)iN\`|9:&97z t2אq7 # `+9 m\m2T;-H-},И]*k$k/ȳ'' xQWAsAIW\Yٵbrzu5sӄ%SN׏źJ8c{!Q8Eҩ k^hqj8!=\I{g*1s9 T܏{`zti>GÁ~!ja Tգ"S`Z[w3,}f^7bcndɁ B[Kkzs熂 ^Z&Ԗ]sSųç9A3Ɲyrd| <b Utb2߮`bcףSX~.3H9k!Bٵvuϐ:%%u]Ϭ!i5dGN4>v@& x)06y屋&:!Th*Qhd㑨8 T/ZS #˶’̱S)s/*}wJрg6'_I\⩝l˔K'L<歚S߱EHȎHpSqw LɑeE[o097l6\#Q ~gP`Ʒ^cJĀ0d9RwMM?ok8*MY (=oa`QDŽvf9CgVyoc,bOsa^(>ZeڼpR).xT>d3a@bώxV͍J48&g0hjtqn=޾I_; 3A.Ꮅ:gses9 w?۲#^⠈6֝@f)RVL>./ Ko^x) N2ʼny$pR=%uz`}sӔ.\'@?哬dt78NzVXl+[1Eіl3푂9i~; y3|9ٻU1 |.C%ߣG,s+uyxeRSH E jp>(fKQJ|7M}o8un>_)@~uY 8ͣc} i2ab<&?f9:'bɵ8bI% .JrnJocn7я[:chhw8QϮ l%V_0ɽT\O+s Ty:a*F.[PÊVQ_#x }Qno[R?cУXSs?/ng]mdo~;ϼ6]dI#_$x CO;bGٿLh81|[ y[c}}IzX]p=k-x8nctL΃u%$R];.}*@`زc8#|p'b*6c?=5)^A.7vNFB̆Pd5N;cz`M;4.9DI6@58DI{a;K\II!7C NޟZppmEr<,5]VA3Df>K8G f,bCQR] T\uB[_K<.lƅԧy!6Tu|ϫ{)v/#4t!O?X~>'cw(#`h? G\?pӝK؟n^ ^ݪf2LaSU^TtZ0lЙYJ ̊՛U+gjo"K{0Ѧoce "֩%x5Fz}>C&xYO~NZ_0kAX{fP +X^B av.i*+AV<͚v7]#%mkݙdpum # T8At^rίj`%H/'j7i P#0Q.*~EAAVwkqI6uK_4H3wpd|$;` .2{E L19w|-MfN@u쿨9P0 %#re8{f_XH@n:Ooڰ323lءR i'?ك~̟ɑUM9W5Szn]J1~ Rj!fnzS\>c# 5Q nWarMRkGK17a}7GԿE l ȆqUWMғj75N8!%5z?8o [D;VӬ9 4[3VV wugByׂ*ѽ0{4aى Ôo"˫kx3vݲVꇱ_=p g:F-Jء9ͼG MEWn^eG5vBG߷WbGq:9;@#KӦgUpR[wl1uf\iDꉰi!S*FMl՟ūjG0b詢#'a@߂&4KN"C.V?aǜw7lKK\6, HU-[~獠<^*^]93 45>BEJe$}_5.x3BI^Eh^r oٟזUsā_]F1qXc]t-IprG- Y I?fo7I8V .Oh? tƙ@I{є&74Rn>čσe]9pTL>R\:UƽJIw*5R-/PH7&=q%LMq"&c pߍQPeԒY2Ox/bUnky0ش 057ElR+,iǀ]yۉnXCҾ_t[2ol>2"qnKZV⌬8l|wB5Cav]T'\X7~'.dT*ͣ!ssG?a%s1{\Sc3'O;]%πuO&b J\$̨aMkܠ:/ͭ}Ӛ:'XɒD )/t{ޟ1p4 ݻɾu0˞drk%v^P˽QyK洿DCаrX$ar`҇30$WN݄z30+v~w dM!dऔGwkݐ-P6F-U,5Qc":8{/ 65iOP B?B#TnK׵q0?yQ4fZ{9+] _^1epY԰21G_g45\U_E;u2f m +`gO[\avØ@E\~:o{͜ێ ~ɕGV6i-yް, db᭝ނI! QkXj;#3e _w@NBg;P/t=d(S(޴BItٲ  _ƿy*"vR^6PWHf?/# /i9&@pN?|eNg)cndX7D2 #?J8*[.\z+W#'nZc˧O`?Te8X迂 ~2-;0} <6Z QJWQȮ ¹|i eTնS߫,MjFUBiCR&&N;ac3[h0s"W]X["HsĹ`~%JYH xrzH6:ugdzR $ `BTLG'ۋd'NC@,~zWމeݚǃXKCqߤ+0t}b#xJ\iGIL w8Y1ge}ך> egƬ8pbcY ?7O>ST^;@KOܳR}QX4*vo7.H:=B`˿SM @_$Gf0NF{V8KG܊;T'>T \xg /3EҠa]~&|{zy'4#Bm^X?[9xP$0E{ۓ><#-C UaAǟy)'{ 5Y fE8ZJ_oNm!*͇i7QaCөk{0Ud"D_PouhOOCgm8?KVyЋe6.Cqbn>sg:PzoIVţ{^W{/@ق$&{\x,t-Hx:nl2bWpjG=X5& -? s.6=PihM S8!t2P!d5W'wu'FtV`6+{:7?{`=6M%r/s[qSzF|e2::W9L/[\W 4h'? kkYyj.j+yپlGRAE7`ؒ&4 ϶[z!C6aUsy (&W=i$o bVb 6y-ڲw?=|t̹ןˆ&XeZ>C!\B8)w]!R?";f^;c/]H)_{iy蹒]ʟ6ɕKd z+F2?˯3eh`Qv._(]Vde>6.DZTՎlxĮ:4G8aT8]{LeP=zӗʴ݃s_c?kJ]8*hn~1Fz=%cvĕ.)s%r0T]ed")Q<ˈD̸6^5ةĮhECmEwwaBcw(~zCßU}0VwoS#>ۼ<%GIڝ %\7[Mc5 lnWͽ=%ʳmuлe ̛fO|85r9\d-\ Kac8y0<<)7(/^ + Rt/A/ ΰ 59#Xrrenv筚 pHCqP|@df-R'`Dj%=9w9ōzGʽ}maې܁sB_ښ@};?Epjx5w -4I9BL2,pP~ﱅm >vEîq}q{AWia,T&cY}Op|z &~r,ʏ_&b[ys=67o cʳwA++QD/edrٿcx3Lg[ ?һL02k>8(hLu-nT- TTcJ6X߸i!{]pPgWZf^.y Mݡ/lYH,(w| n)ЩC?,dN>gҵpi{}{'HQKhXXK\kzN/\Nj ;@ŅE n藼2.I$ql{`W=u hu5mEIsnI;@ o6]({6{y:, c?{Yfe L5vW0u`} o2Pc]Wɶ9 &%[;qn8|/6)ټŕ؈YO0{>g59tFvʅ`YR1aÍze;Y x`M.(nl˼=놤/Za机x7 \¡pC &绤y8'u.TR>.5 LEiCY'1|rX| k0vja覊 l;WiV"*E*IS@"V^>謁REwc/ϯ. 7=w*JΔ}+Nrl ӍZK~*P*ڶ g=^cl:,v[QE%Hv?+ˉW8yq[4ߐ y"?SJlwa\A9K4$udkkkEذ}{L=-E8R{"4[Z 2cG.r^zC>rN4al{@(lCȏ}УZd7n}EvvC%f+n5yܬ #\ ga"g!z_7^jƳb@ޯkq25_v؂Mb .7HN$:\4<jJ0єfy6~+#I,Fs 'w8 Uj+V.8kӔV'<|J H&c3MF,@k?j}\0L}4sLx]Q,YZ:!@`}^b5Cua'=X#!*i+Y [ajSr;ν=xЦ*:j~|+BRl &3oG A9;<vliU3x y\j+K)ygat]]I mS:MqfغpUlOqA?Y(x}Õ6g60@SҡoD>Z:F\EM–xѽ֦gl1* KF“/0s#?jC+qPc0NWlW^}oʙٛ58}~wQӞZ) C)_ਨkNOv ιW OX_pyT8̏i=@>ޒo ˮ'bmJe\tdG.cO6Jyë[,`!~õP+$ ;F_BR2bW ErӃ:ñ~8!2z# CHgn+πE˵R0wbbIULzy ఢoXp>; lqUdWi=Lwj JR;󝒒9M:4W.,# *39p>6I{,ފ}t81+pNj_ƹrO:Frbr- 8aij0[2~~KZ,1}^<\ǁE+ڜ:[8ږ,_Y]bYN]%W)jl]Ѧ^<Rx!LDD'[es^RqX?1ͰUOIJ{x79;hRص $qP-.ޣōjy粱pݺC^mےNx{O k-z.)Җ }{?]lK$݋> _d_ate5xRnz0մl()nOkVXw_yw (5 {delAإK;p+lh>:y+>pjWZcFvX]"Boވl{H}[.ߥ$㬩_ ~ҳ( FN?/h;6{ҽoUDꮮdo$, .<Ү@ub:dÃ;de}; N^w$aJkӾCW P 4#$ꭋfy VML^OjF$=\O }~@qI:/Ľ!Gy?DR5o[Rtĉt@a^x1Ƥ7 GF?yu;8anePzsR.h . `]82sbKۅ-p[H'OeDf?oj0`{u P4%K幎OmTų`i8V^Z}Ja'bb Lp^yDtM3nwaOj'޳nǪc:5 z>%0^UY̡V,L𾃁~Q~iÌ~K*싻N{6ΛYņfJj4b;EܘWTggcX}dA~덂ӷMWWFqX_|oOEK}y#̿#0.l.p*9<8<̴ԕaFe%#)Fq Ǔ84!bWԑ0oᧆXj߾Cv߉0ӄ73DQ;$fė įb2`˰{an| eZ09,nv@Td)U+ -n p 5:Ɍ.YpuǼͫG0ÏkwSy?,7h\׼=}v֥;mBQe%䄥Br2N^*v/ =rFߪD!'Ya8 uM.mP"3} $.}URK{o&3w#ѣ3HGٶU.? tC-XsP#GJ%WbceuC}JX&=˄ԝ1:ZuM/O:oXMq2wdW7S^`ٴJ0de )Gyok]ai{3nSąIUuv$lTK|UzDyC̮puJ]-z5؍}I8~;JnR|lV{#({ x m[ " Կsqs:o7+X8 0.Ai:?'"MO8]A4{#nΩt#7lMo.q0j?P#ъ#{WsL\e8.o-?3b5rfzh%}x =1bs{>*~4AkNl@gӰE[ޕ{ye hBpVݟV]bƟHX21j:#aZ;*S| ѳZbEWSR/P@<۠FW*]t.ߡXZ"+>})mzq–~#P;.3}N^ae"ec'})7h.yW!qbSB?~ypZo]VN>I%}!ic1Py2=56|8I>2ՋN#chwe:L2$ 8.6";xĠ%8_X,>byD''_ӫ4?${hȄkLjLOwxK+݃orJ%[ffv}_t_~^O͌25gaKu7TQdő#v8)^O^T i%CÏR8ڥ*܏s¨܌[XёFX1ҕI'z\/7mx;v3X!BZ-׽1{xn=N Z~ҧJ@{DY8=_vx]]?3DZgD9ŵ"8s` .K ?om׍Gbjn?>@ޘF=PG23/zC%bd_qȢ3Ydq} +Mʼ@ڥħQwbEk3虓#о: FҮdWY8n}P5O0bE LY+ɖbirr|%(`e@pW,+>9^dc"f4~w׹΋>:KW~$@12l2o t$F.OH$jxQ1ˍDՕQj_ N2nvl*՜_m 4KA |MpN>M Aȟ_rG~a!z!hu4\z[8K$&V.4Y8ȇ9 Or"b/p ydUZ{$ WM zɠ[O?G1%5[ G은&N|@XNJ9cpd yl̿wh\ۄu4$nre 8t.} /ص]ia0s8t%%\=.M|<EsQq_V@3 c;=2m^(O{@p;KJ/z)VkZ݀3HY{pZ>J:ǝ%JU oyLfHkl؉}a v8Lw0=Po^6EʮC;W6IUn{-ވ9B`s7Ο2mcr Ia9ELwzonد9Np,o?L%˥Dž𫃛ҥn0} TIOz2c'r˫E)_۹4J5;\JԽe)F??,wsdô W2?[P|\NNET-HL<U݌"9M>A| UhnΗ^Yst>$+$\ub!2zWŐ({ #V'zG ^2%) ۆP\N:M;3]Ѝ?=zGt&O#ySi=.oCrʡP$мV#-ߖ6 ѽYaFo6kؕ] =ݍe /Ku/ɱػ;)W{t.$iNm8)I&Mpf@E1 9n0úCzaA/2/:i:m1уEPw(Fo"+:Ț7C؛z=t/Lxݎ`18qG,(l/8?$m`^3=+^ຆqQm{E1-IB4Nzjpg_* 1.~@kN#'U}b?쎓Nng[G賑d֏oI?ڱy xeEFEe*nywU&&b5@s{omnx W.8VD6F{ZZ)S2Y{0+c4Kk]vKôOA5 nYm Mi.H=3RV8㪠%`wrnXN'1d{z{! bVxîe^K!`)IF15h {~rv1lbm"0"wj9@KhyfT\J*r:)X{vwCgzb}ph'X>S\cx@]`i s` 1`[~Y] ^K%׺-06p>,䐕U[bŧ0J3^<%70#ް`ƟS,0=n ]JF{ p,[(9X/9^_ |K ߯ |Q}}{E0uM}wh4tke5:c؀V%˩ ΗMqx} .RGqCUXtkToEP:L |q+k#R¥EY0%0BSSǾ.-[/ i7}lz K^dj$~h_CZ @8|?^s±ΗJ}@{껷/ >`u v:M[p"Rҏ|~ۛhP7Ι䗡@Q^O"^Y%H Z!C%E ȫ%PQPi(vSΐvg}|ZkCkK_{WKci>y3PR~Z:/@ӦS# nYZ YL2? ޟM.aAŸpb>iK; :+KodU_0]()isE;qW2A{ƫojj5~+;bw¼\ĝ{귶| Ռ),籟2 >*0lPIlU[7|/ c 랶60?1.˲]tYZoxvB#% |3,|l7^~Ms8ẁۘW^2K 砫cJf8ֿ.l(6\V[+q:3HgE;T/R(RxzRj'<}ұ\ՙP[f3xS27ǧW F#sS~{8?YYU>B5,ݕ>mrzΠ}2TA~ĹArM#c W_~ z1=:Y;—Gu:ptw8 ~MAzg7|86c2n0W@sʢVq|-R7t+1 H٣(8PL4Slqft=nd !1/U3X@%_sEXK/ ;~\>ݺWF9E3t$nn2>{S5pzr[ /,]Ypu2-8^ '' nAC{5gpmNj|H1!ϊ~U\.}>ËCy'pcglӿi3[[7ې o;A)1y{}v[T9翅qC=qſyu\@yod "nxS./`]ܧo]s^)"OLS٩253+g'׊^G6{PWL/I/l>}ʛ=qWދNF;R[ Qby>ކwgpȤ[1 /4fGc$ySڡ|g2Mm 4[5#ϐt&e.Z018ԟ ~+ x'a?I2آNwnaL8b5_ɳ!8XT5Kl \/wv0AXg} ˌAY lp]%J>R_6wC }Rz!PX|5.AgpM? jT5,trcoBW,ĊDY\z)+A}m]7lLyw* h﹩J5e\jHüLݪPMFZ\$a0ϥ]XA::EC0Pea8dbv\xn6Qﻨކ#O&:gsWjt\Ƨ.j;B0:gN=˩t '@N̫kxIXxޖߝ\cɪ[n;>*۰IlKiccy_< b7 7 qPŷ3t?I3pnF:uNލym''eBbPE&촪mbzw)zQ P+REta^ r$jQ-``N-c2IŞyU7bI ^5=DЅͅŎ[~tp*8VWפ3p?0([,R[{XoGW3 ׎a !@&})=Ҍ6E*W8w{ݮC9CnL.iDnQ/}4<}za d|#޻>+[w\te/_];CӒ$qc:_Y]ϠKł8_vu/\Ӈ>J{VXQ,(cI71G)t.xe&/g`LZ0mP=7*i-tζ,j=! +V=,!rI}܄a[<1`%(٧=`4P!Ai9K.o l/Ϲ{ =~b Ӎv\7 {;qY0N^W(y?ͷAiP~6t^Na__۪c!a6 %mg%.-L8;Rx287ZyF|~4icV&G0鯶Y~$gw Ӯ|?0z8MgxV}gs%0ZZ3nUYzمSrvᐨE[~SЉH~РMJo]}$ш@n=kG(^6O0hMKzڜC}]ۢS|XxT1$OW_nfN837֝"!oet2}Ϫ-F#BMfc"#` Ȭ}qZ #椌r91# 4>͊C0 _$ӱ, ٱZʖxAf0VPi1i|Ҟi)zB0>&pl2Bp hW.41|lwӲUB)XӽM'zvJ(V%ŗǙz4WYP6;8O"a[~z53}>|e%N')ׯ Wru!է̝x@?T`}%:.ᖧ#&˾ ͩ+K*T0b4c]i Z&-(Meςz0(o % |:|EEgf\'m}<17gaLf='TJ-"%7RGLo7)jn:e"=lA`IRZtٹorly͉>WlZKS;7g<`qJLgj/>+M__B%O FXW}|ap"4ɮ92Mݢ/*(-v _fzW׻) 0#1 m3ې֪>AߞO(ЖMpkC'u Sص ul)T'mDZVΡ? ?6.WrkR%Y}:H3T'X~줣FDм76K¥jac_L,2/Fg=om\#C|sT $~H/=*˚ҏ=a{`-(K52߳ QQMHDzag$\WZ Լ)+pXcU)2C >yk6Uʪ5\it6sjBcϧ f/{%HJW_4x-aJ琎e)tΛۣGRo/\¬= Jz,)?ZV!avaUT7++a| /Öbb")z]\+^*[` ]59Cܾrr86{R<3D@=}82-V [뭕fȓ9䮃GGwbCoGxUyd=Ogvu'&yeҥO(8Vqu/R)xmF-`b诈NKt).osƛ=.h.Vq0CE"4/޺I9HړˀRO0芸anMFW)2cƎݲ`-iQ}`ULf=z\\Go7M8ݰ=Yx7)Ad8SX[bnhсƖ/FttJ6LSSCZOr'6D|EOS. 7l.$V2)]~/--HE_ma[75Np0/`!Y&ag0N6Js?|3z~ng*VXoeB[׿+m(q[c1뢋Tky^Q"J`(O~|R#[Y;クmY7-h- Sԉl#tpz6b=l.Yѹq /BwDD2I1(`+Pxt2Uxm&08PhCDE S\?|)bՄ9NfŒ_-=CL'+#ѽcP%tJ<ͪS7qǎ)g"qnVm˹a$ "O/}V™F{L?ǒ [PwDN&zk4FvSY`{Mχ20ض.no`8]ycB؍RBF#qڻ8-9ڪ%FR8-w9'#w;=ؖZ5m/hmc\] UGv ]"pdgM1t=<`(F4xuxtL$OM>вrb+/zI.\h0{}%)~AA`WyXY;4 qR B`Vy#~7 oFIǙLv7=YuNmi#V"[A/7@h[e_)qtLЙ=̐ZpMjJ?0w5եn]RdQ%hzTO*c{vebڦ5be5唼bwX~NdƟ113 GD"j6l]r6!t+uлj4>^ Ą[/Kqlj]Ȃ.|j}%11E&.c9p_e4L;y.}Bj O_p/vcȆw+5dx{\w|/c{^A%տ)a7U'@٢z43pā\ fNz ): -@S{_iWNs`mE7IF}H{,O0I;CL8V]7.i1PVlǒ%`í4[Nv(&c&Cg8BZ^Xw~?t]gl?4Ga15c<,qs<gƷ %Ro_S (O8)+iڃ]RH~ PիN2=.;;w7Bm=BCps?s ͹)z$)&#X-ptVۄ4ݻ_. pP$.gt<(B=$z t2jP%z#f=Dۿ⯕[J^4c\+2R KaNY3,:K^Z_ t`ay Za%.?LbNl{mI?)rlbV8R~288lٟL: nfV{y> K^ʂ]IEf  _"3v7GZ^le)$K7A_kq" GD \!年mOG|+(|SiX܀Z۶-^Xs-.74l>(C৉Q0AwW ?8'5HnX\ߚc\k|E u)F~LUou|(hsvzr`({}@to-鿜 U(wTWqL){wW٬/9oުAeOn;[oKoKZa(X`lzԟI8"¯`ٻ4 |pC6nKqh5ًK-$W)I9W5s-,&ؙ3ywìE[ 68];Gy ׋C`;\m)N?x5] (=]' qS y0."b_jҏ$؉o]aPZu '$F7C%5}9+Ҝhժg%/Ȟ҈|&0_0v>;&]~TU2[q4U&nl;L0Oht]Yw/|͟?n=CoģOd0eR;%+s=4ϊovڄIF *8ѬޑJ4#c[r]P8'{#,V!R]Qk֦0^ eU7tDjϿUxgTjBceTLص9Cޞ洰o^.2E Ƶn_:N)H:H8cأ{AH CEUq`ëOV78a*hset;Vt_Êu:u*I$<ުC'ө  Rxu}2o)6H4n]B,6]=N=KJVi0;;2/f&:}BF%I[BszFVk!f|Я)itӽ֚k/~'߳fL/AxZ9M4XsH=ZJu8N~גƅM7q<ԵMMn׀9vK٠斓5{. O*PyxXyN([f@NkKz07S<0j}gS 05enGVwp9`o]PzB+ba+k+]^ŭ1"lW-ɼZ Bl >ßMY #Ĺl[i,ڌhK^>a4 ]z0[By AZsz#f-ʢ!~|SzB0Rbph֣biشi<+s!2'mcY4وCbqF$ݷ\FCCB86SV2 J$LX>F5Dw+8ErYIFW <0y͸rk|nIx),]#eY^DKľUG}՜0 ε)vG3f'G35=0n5a:CBH;NAA]Y6u6hu; 1 eƹk|3j~E,~9 t 90Yt?dS6 7=~iMzM*+ɓ>:ma \mc9Eڎ?cNAtDuIWbp . s''WaJN\{@jrRqF W4/ ٣ 4l̰{Z8Gc~ݑ[ Y^/wߡ[{kbnT~ʪ&β7Lb0Nݗ~g;V{^4 ͻŸw'*@zA +v~?l05r?MFH 3|.}\qvY}q۶ܬ,j/Lz,JRmnbw6_}͕;סw2A{=[).ۏCm 0%a zxpzcI4\xoz, ]b2`$ڲ?xy;DH哻fV[5,Z,HƂ5m˛+njdT5T$ޖ|N b[\`fQH.Mcgg_A-2)PX3{ 9s17LᢏI-~ U+Spz?qw7 k5:6 Ral'G>=wLdN6@Pe~dˊ@kb10D|U o(e׊Eg2,R 0 i5CNܕ=30jܔX8䎓#x mDq+dּ_ Khޖ(!ٱMbõה_WǞCA{W"~W6 0J@GE:',A3lV;wlA!T(ÎC,3q囟`,Ӱ9+EewoLd+H?l`g\9qAdGX:O׏Lxki'DԯZ+c`G,z;ƞx4^ˢkz?,qzqb sڔ<$k-,ȇ(:6SgJv#L<>]Q- c i, I"dgE+3)Y:5 Owg#r 0V&K*j}9*piy:랏3M}`Y1ql{BJ A_z,3h]dž3(٘?@ù'7<ƛ;aToMF2]dd A[!+A6lHZ{Zci š"(nH]9sGeE6IT )${+F-3Ets+ۍHƵ]ȇ6F\+'իA΄3vb1X&ps~^ qY}!N)o|dQT.D꾷0y+s2[ e62yf~žE=2P_'kSJ|?FY 6Usͧ|f&}LkO"׷^@o|(ɧ,_0k-A>]#|l=;]$8g-uY O'N#ih%<2QBW4Zמb#hhAfu7}clt{( 0<__zkYe8+isA2/'h+Hhqw3K\g$Ebv3N7Ez;NAf9ν^Of6`\}- e1*X<,x#4K;|V*aM=UoWl CA">tó@m o x$#Zl IWl>ziw9ijۼ ' lț}:'b[Nafq1Nni]I˖y'TMfNQ2%??hsS\VZdSRBҽ; _Ē9w7!Q$޴?ц^7,tZ b}2['Β 0{ f.}>+*#VJ`{Vqϗɕ[MU,2~']%ɕW|4H$Vd)/.SUdR6ʾMWa^|V (Af112\P@Ma}O(9tXhVL} so/zAJVaiw)o.#d%Zwk앏p Ab} m&Xf9!jg4AfN5u~^I&ݛ N6!\><Ď%ɏN2Nr2Klc:*+Y_zzP:|ZBO.j 5ofӯgS 33-yآ{VoڅTª^Z2AY!%F$3qCKхcNU巎Ef:ٟNfy21~yԘ*O0Fno9~ l뮼j:2{ueH!l9$d{ sτxKf>=$HBIu\i _/b aJIٹ;A?A0B|& Гؕ'䓅1J䙟.P?e1mǗeyqf@m\LR>Eы&M=ș0B>'W ϣR`L_eܳwf^炨i2WD"%6-d wk̷*HM>{2T9~CEB)_%c2sR}/ w3آidOO]~Õ`o535N0P#Xg|A搼Y͚ *x] Vq4kgLϱ(#D۞R8B!~PP"C`1.;>#n+YL;?BPp=Sk$D]E<%+ d8)g!iJ_F-uyտdV!N_(Jү] ]S=Yx}2Vh%o28,S q]#!X#?WalbD(% 4O!8^h&짙8 rm)~dXK’TOeB`˶Q ?6^FopuLYTVxnd Vw.KBH.G]]!sq7wlXqr L/ط%M~#E1da&=~7n+6=P#V"Z3*EvV,].suqf}>Y3݄~r/yuw8SL$Gl'>X|~j7]e?/?-i?Ep^d3Į&y8(ѣ51LyN񬇠%W@$Ms)emHNٌ\;9}FQ$CӇ W@;\#o훓)&dҦ;hNaЁ_@)=ß՜Y03K!UliB_#ݾ[׉=ڮٍU+*[t! gNAjʓM;5~L_Xm="anR*U/QM{g;[wCg2DQVטЯ2Kglmnet/data/MultinomialExample.RData0000644000176200001440000034174212400076607017211 0ustar liggesusersw8Y2!Qft $d(J"E! EPH^{yc?yιs]yz\Sgg9RP()h( ٯ0Ϡ"fJH*_{M˧FZ),8ݚTl?.un/s޻Љlfb`k[:)q8q#19p;v8v¥8l^~@tîd&:>iT$Y9wvJʾ=0[[%cL'ǭ;pT**||uaC`z qd3ߛZHZ 籆z!jWf Nq6c0jMi~2+ÊoԂUyIWݸ~:zC=&Xn K>We`a+O[  ?Xe7|MT'p[q,TMo5ajl)^z".gtpssW[%GM5=0n>2au Ƽ2a(U{wLoOs;=(IL[3ׇHy~i\ }9Sqjs>6sK8G W ubZw^X[WMLXUjCw/7_*?%殽nEv`]{mG Q+Yy7f@ѥ"1wc1J8)6f)r1w}B0ȧR=mFՅ{~ԿvN@Q+*X,ܝ{Et)s~q{K< 38LV_,qa/ } iRt~Eg+oO4lp0 v Kko5,^U[fLE+{kU/v jkY2b2o=Ϋ-k 8Z@wIm `?X-p^1pKCˌp3]o :ǿÎIҬº0,e.8zI\7e7 ѣXwU:FT~t+cjޠ@aQzvUT{iRAȝ۲0$teqRThz"wދFys\/4NNI-Zg?C?tz WbtYp 532|Qf7X㯝,d孶%M/:rwB=KE5A aa8vO>YhI5s[OJupBӐU0 -ŲQD^`g H~ًPeᲳ8'ʅosT݇Ӯ/p=%u!}1pU%fc3[\()m_Z{cb zk.r,;.3V@vꅪ')%P~f\+^ia>Qcc C~Ͼ֬D }ZFȎ{SoS#O}&:ݮ: }q2Ov1 q^dt|Ķe7 yKiC댥q6eI<.qmE/۾-#a*ZG * MA0x&>%_]bl`fR*_.7EaCenPBG,0za)f>asVT=(K,pv\+Lўw~Ir 3L?7#]0nݰ&i+fwg_# )>r ^<'_CƽPX4V(O=֒q- 4rcڷ?5'k#L?oiCփ5\fծ1 w7O[u þRaWh?Hq9eʽl&Tdր0x +:#'ԣ<ƅZ*m_.HWGր%ӗDm_G.V?rE}D-wg=4wU˦$p{8f%1&& 7E(h WpncRp)標4O=+å{ӂ`R73pyPwKp~o¤= gbG.ibӁ0Ļ 0~njD^~wk8#h;>zElE"G9n ɰ_IFo"} 4?Nb 6%X煟rJh+uy }ԃXHzΒy2IV9تҞ5EAM!͘- (@quZ5 TB `^ɶXRz_8@WcKF9UT|tȹGWvGf-z;jٲ隲@uL󔽉J؋8qs`a( L>>sɜNHj04$b^f]Dϙh Bd{ T/ MJߪA5gwU`\ t[R儍vr%h&/ƮZ3gs&Xˣ1?2vsc 9]{d_Z!emVnbms^W0ʢ/@ɮwI>~WƟGoE!9aH9N0+hsg~y?,ryO Cn3_!L˯w~i 4ګr;VzHG$^O^{c80OEDb5o$[obBfG,z9X'fp,Ys~_IwXK+>nJ9eϠ^U<ƅ93(o/ vP{6?'vqd@7b9V^MIIV,Vbsד NʲIƦ & h8N^R1ꜟTקzcaB@Wz/iBq_ݣFf+kwukϰ`׌ M{Re*opԓq5:lW"yIȬؑb~Gf)?m#v'-?@Y[<^N8ؽfvyj]ʂIUXF}* aF#.3+`KZL< sI?ztb4x+ ;T YQ^HZn<(SVI&g+qԿ~e dW4q7VG9e} B遒/씗D-nyF}ւFhXhUEy#µc2*OaC\h_cI,_9JqPI,_YAнVL6<Md'qJᳺHU M$,D Ul1ԡTﱚj:L8ns||掷F>eJqHn>~g^ל*nRy=k ŵz:la349`3_A_ۘ(Ν J}:Q<[:\h#zveA=VnLlW.vW=@o eQ\5o Iq5,5")竝w;(zCSK_upsP%ԨxS%Zå0lUک|A+,\a9icM<$;#Vɢy~7mݫj%ơѩ7Rn%Dᚁl,7ׅ˓3N4آtY[0.<מ#aTx'>Ճaل!tY+=wpuSZc|4Q=oMv1uoZ8j/T ̏n.8뷈?PF>)1A]">Mbﶩ_ :('jppTqeU)Z~ߕim[ja170ƾfʰ l<̽ݗRXia*oôtPc+X3B' TߵdMd;s5Lt[,QgEK XaE$KHm 3wHCmrcbn" w f2/ڰ#[wN2 )a7v'R @s^*U)v.5< kԖmX"zW6.KƑZ>4F qBɗ `᱁0NtswylQ38`KZ:φ.ēw40UjB)כ!x>i䯿wE3BH&SC]1/-ApL9sm 'X[|=n,_Hg?1?Ng*J-FzZP)G,@·HhPC q>$.f2Mw5.EUUp|3Eslpy7Ux[TיIJ1;IdhwkhyzT2Q)[KA-V1!{zG` K_`Ë. 补]~n&u[ p@)%$nW^E[kL nb%&-eZeNf+S5unh7>ȃ"9%; aq0H'4a㦌=87ޚ_C 4ggp¡/qRN#&]_̨c6b}gDWKRT)- ˵J}U8v̏1;F絡]x4;`{?SP=Li&RGq {;F[47,z Ku{#, ~u܆N6HH2U1=koh~g}D'2pҬ؂zh# ;=sc,KBl 8dt[eGm, [Q,V`)!>hF&%/¸]cԣX,(-U|::6e,SYެ}?"C $-xGpЦ<b^L{ ](\w^2bDZ3N:ߴ;,gt@_ey |q̫BCmNG0 h^1Gno2OqfLVe8.L;Wb[j1RXą51XefPcI^6/pNms ٜ5͆27O&4.|"P)^-I|q=ڄM/ #H}1qn[#\i7i!cNK|RY~NtWX,t+ kɆ#W /yD`6M圬73WM0G ]ҴIC[sؖ?\1']8'n=YYax;Y] հ[y~OalA4r_YH5`ӇU_oح?kvTKmLC\><rALhd<~veO,ReҁٲnxC8{;wP72C'1&&h*50Oy!&N0];C|G=bS4HH.C4_źtb;u #3e~~N*TL$pLhyGUf^ ͽZ獩QR ]LMjcWBfn̾ 8,Ӂ G4mJo {򟾦Ǝ.5ۊ8'}Rɗ l ?8r2[{L#P t/O7vIDh$b9bU{U{UlZ׀byܯ0$}#'<7 ;\34_=NE2CMl.!IH,G'>H6v]|CuuGgBȹstbښWš9y}>Y+i݄"< i橐%/E2WBb`1qɦ= VzE 035&<ϵ54͘!l?H_~޿8eh"25#kü1핅`G`㑎_c,;9Nəc kJ,{7CCmMYq)?<u50}uoaaz 'ڜ$csoSvWX=[orL7RpcH&X5rsE>L>5Ak7q1~,}|^s6 ;bhz>zS619";k=w_? 5ASULYjg8pS0'Ԏ',v[˵sYB4 j/tN'| qZ5q&G\Rl,'b ʼnhB:\=h鲓Fs"|T5ܳrJj{ۍ߰Q5"kZq q_LjoٷC"O~]Ѝ&{N˫bxpS~?>}ms]0m8R9i^Is?8nNڮ̀%o~WЇx3vu j=|X' 8\g'i=`dv)\=ո m''cBO%5~a7WpXD͹(?އlj`"j=Ed%1uD_ ~z^8##jL9=̤j}E_د`o'X}j#:;G#Rg'ۘ|̉]:{aTV΍p2u,t1&aK\i0Ni P1*1iS{N0xhx³0}d0iҫ y6hhGqXc3dj"]=LŤöpČ:.<ׄc]. MnڝKg/0zD. Œ3ŁkeFPl;, v!)ݯGpzL4L8EOyUiܻ~5a\Hfؐq^(~P%esyY Å{|bzSX灎(p!_ ωdŐ tFLmݎЛ,zL:JͰip#n0IdЎH2!uw >Fn՗7aĨd.Vбt`mVZ4y!5jՕg ,jN_ǞܕGc'/iAq0‰tş = \4xE t/&77Ewp(˥IS>&(l%%i✾'Gs=!=@a"e\Va{1gt:EWP%;`"5MUUy!8N\q=1!-jqwpR8"+c I_@ֽ[#aീ8w_C߬|Ҷ<-{<^W(tCWC]ws̔67/CsQ7ߒǩf0~hPQ,;& vTj' 5fnw! 3墏1 0Uuf=?7b#%EXxn}gXp=RH FaT60:I<Cw6$OtsKDoL*_|5@}nj6H %|fBئakk| \ֿꇪ@E[8E%#޼ Ir.^gѼ!wC6MqR`E{yS {DZ )}0Ni-m6%L)NvÜ +C=cՁ=^gH, \` v@0χd,.WƋK}#HvIzҹ/@-N$6 ~xf+pY_R~/8Jy>)ih^ nAp)A{'/:0s|ab-EL=3)[ykUs?f^$ڣ1{h1Zuf]>ߊgÎfâI#0@3}n%5Kp^W}p# -H w7j{&x~ LE1(=';w^\ĹGTalPzKtOxBk?1?Hni+X^q`eQCRv^WzAxϽ0슅GJqer3y\ВWk Ï4im!'2a+Oan顒̐<8D#*GI-DfrɇʠWGh8Ͱw\…r~ҏwf΢vHLyՅu%qA.UP#{)Cuʉn0?'sKϮSigqJK8^&ÙMfYw$%XDP4̭;')d6.ʃ|EMxBvy#aS4Q&^ꄥua\8^kۯ:.OOY{+n ob7sܓ銸nkJw \Ƃ- >P>fտE{:^?ɼ7 }^q|7wͬ[xlY7X b cq=ҽ=Y֪X,k59" }./֓&PcaL dUiU^i2mnHvMpa>8)O6=\Ւ{aF'*ʨ@W]2&KSCpuB6.s(.WX'ueǞ+Aܙ0+ ߯Zx܁o^A#]u!r3j8LJPcXcjR8_S O٫ŃwKRwdIgi$aB/I0wG_9sWIh^Y[߂ڇP[Su8dgjk} nF'>@7o:0B~EY{SYV- XẏK4I#ob~/;d|pV3`~~ߎOW;h}ЁsI?faD=YU/f|zPL3Rx w8cZ\zKznw_&-#_"K>1G_у9J >ѓ?tƶlu؝ahZzϴU0?3;q]=59 a+n+Ͱys;,|Xd PO{zׇ úܒ&L$i}Bh _YYpOKF%;Gh<B ǠnثY@(&kby:łb8f's-JMxž'YK7`CRs-f0N3  5u_FL,攲!mS/l`fz_|A>+ֳ'R&_ %2> Ŏn cz$_@A8.T0 PN Zf;x`9Xw\3Щ=ĉUsGP9~k1WN}umFΗXh; 4Ƶ3O'v8:SرpĪZa@oǓ\M;_TEszc7#o4GO⇒s%pB,'Pj*ž˹\0IؙøY؛-;'i%'hI8wcp6LHdۉIto TEz*Dze<\8+q@Awʧ' *P{҃%njEt%8{Xp^Uʖ|ov& IDwKL`fZa>*AN|F3cs3>,Pų 8p༦`Ϲ/8Y/J]c(ZscE{`fȉYn?J7=!cd R¼rі3KV^^wCQXIZl#qqL?D^>g3U`䦢O3uͿrx^)v{[% <%atU^K_L9s GM^ =jlBOj OH:]G޽|wv|}B81WqXdn{h =+Ҽ~# S/î0*߰$JZwj;^r{>$ų=ɘA B^mZCp'$.bKh:}&yLL~/F.Vɾ0h<լiCd=+[KYI-`)e糖hfTt&&+bc nsSlvw]4qÊ~@njœu֬@̰OGy\R ]W\ y$(f!9V02CϲfU8wk0JΙ|Oz0Fk⸒Ei:4KÍSGە ~- ɻ>\PstG4L`H@ġq_<:)o$񷐪iJ0DT 93WqeLfg{Bni}6w72T= uJ ֊g'\xW pprIz َLC' ;|&S.UASŒ'@⮚ j7X1QIr[&9DsT NE 'y]IT,c1ؾѳ XOɌc쿼mO{VWt^[7)Xx?$@A L豾:uiq>I Ͻ`mWߙ̆| 8v>O()|3X }@puڴ5 ƽLnzi%wJ Å;k`kݥ {Aar!=7!]J3HŊrru~RV 4Kч_YW' %J|q;5} ̽g ?2Yv^$^0@kvht N^p ɫ!ةc|n!{e읧a~d'/4:chHt_|hk9A#mTNˉ]g0R[|W&B*Rd?@+Z}\P<35* c}dW囦&aBA$[KV;B]^G\oi_~ /۱_n:)>ݚd; /שp%tN^$Y~;igJ"xj\xVE+-4ˡ?mW+Ҕƫ$[/27l?@ɇƠEQ.ʆʜ{ ]q)BU/HwW?=-}V]߮}"sՁUy%?V&:Qkaյ*ߛu_78T>tHgOI:k9"KE8c?H$0 ")ϙ93nL} `#Ӵy@ t,v~M}Ls>r@~%e8yg/3i>/:X?`L y@oZm{r?~W-, ] op5RY%6:͊KH/^u.WOiMmgY0.ѧ~N~[søH4k=I~m3@n w4o$qA^v_p'g|6yvV;_՟G:zJWHV/iQ?@|e!X '5o&h<c m#tN~+:lXbphl-ˏi^ť?Ze\ѓ/y_Ww<ٱ#^i\7[ÆFwI.Lg]fja! N CQF:1O/^@ն8,vZʄfXXM{Z7,f}޲%ŨRnpzu$Qj|=7 -Y롗q<8~yLW"v,i+AH2e=. y]xqX^v\3ݧudyoYWM*Ȗ;h7xDviԇ=w-Ma=~VcK[WvC"h{TٙW-ppc,Ll[fa2!#, 3Ԍ1'V&qͭG@/1GI Bb@.0NR^IH^D:wFOZagנK-^֫3?ǣ/úqSq$~>ny _B;A(X7y^\' 6wi@M4/>8Rok֒@FsEFS kWS'tg(>Exfٞ~ɋԎavkGrIծy3aFg]Wp}vvlL4da\[G6 s#`MgStƉ@J+{kGk1satkc mULZreO |.aHFWG)7 ^ȿxfJb/;RQz-n E[w$XEW‘Rn3}; -v7ASnCX__oUPř {a.Sˑ}zDb2tKł<zJʑ`;hI3ꁋNwT0ݰڪbʬ]rqɥPxG ]rS /~5.hf摂4#8EaAϙ _Us,_9Q==19{-tƆ.y(grCO&% @r"YvQ\BsULVCMrv)PSvm|*CMp£SUk`S[;3Qn'lIcabp 7fSN=h+sdHL^w҄}4cR+_&"OZK=$ޱ8}'\P\COF<`R"[E{,-oy材 \x|iun 7 xZu 6~e!H#-,MRzyp {Lt8zNS%nR跊@c]?V @9&TA sܾ#[ILũmaLبa {tZ5h㈨'^l~0U7ze?`~Á950O2~l?P@~yC,'>z .1;><&Lf0l^RvJ;Œ) ZN{NehʵL /rdj#^x~-B2˅W kos36wF'a&4aĊKHYnߞ֖ds-{nx|[+mA JܟSԭT҉Ee|0>J&x&`r}z$p2OlEi7~|R\όG%Vުȕa>\,ZGP~^)~4"9.9Y~ zC?\Q kcӶ7 ? Iz`e#  RAyd& ZZ@|#|)=ㅗZ]{c+j\ h`ߠ?UKB:G;6HZ~/3^`;RͯXɀcT>Z'e/B`wɬ{Ⅶ#lT{g\٨Pajh1Iѩೄ!(?O޵gE[Z \]|U\6;Ën S8p&0/ E%L8#2I 58,> ӛ@8ݠhY+aAI"uĮ$(9T@]ѩd /Ǖ$@ ?ۓp˙xs,dnIĖs 0ĝiMi#H}p1P>?ʼn}#%D,?#]z\z+*% 7e, 61f`=d~8νW8-},Vǰv*C]` Aq\d^޴*Cc9L5 \kTDnˏ(ևOLaƾ3|p΅ر/䔕6ƅ0,,8{+I`L&=o:C=--`'ĝys2|9 }Kcq?!N/hCO/E: fO9V> :Et  طg[tmobeqªGi*IHD͕Gt;y`. =ƍSt9q[;;J%\m`8O㽘vgbCPmDEwWֻ=`%4y: .S ocۭ8ۻSĘ*VhP;뢟%U` ,:{uŕ|fEMF|2}T>${PCe]91K{Q;\'S'u%]/U}dpm͟ ;Zg셅 p3q'q6J|gVg^(I(Mqcg@ꆥb 64ɭfX HcFŠ/7dWsر>,y;C_Xl" Nݴ Ou*0wEg VzM=9Պ okqx@m>.[8~ R΄ÂԟVfc[%O{wkv8Cep}qzi& ԟhm':tͅs`4f|)/Xj9ZL0i]̌XDzSTkv)OJ;q$zC!ȭ_V_}X]iCͿdX,oY'b-|mBe-١+m] һ=ZX8Oixr' ]bWQgT뮮)h8 e<Lq?+JG?`8F@ ]1ԚZmXirU" t )L"V0Ov&*{iJ;vr8OpM&Pӵ~+h؝%!WTW+vم?ZpP|r+ OlΘ`o^v~@5o-R,:u]>  4܇\`|WniȪ| aߥXMJ<$gsa?++MmU .X-0B+~.jCɚxzLQ9c]e\ `M#?$ت2g2/gC+{cťf'f?`N<`en̸q31_ lk`{}XtsH K ͫZ tuceXZ)9T|IR0Ch!=ܫ ^X-GR\!-茦{B¿J6 {5ē'0C)>8g2R58QxSZuD6)JKPc'`ᦷ^蹳]Gg)]Ҟ5뿊40#E; }큌n6-u,81d?jއPcR=Ոfy桲h߿Çe0+JQhf:9c7^8] Ӳ^wo´+0+U$WCA@m]>&\NO`^e2&DqZe@1z% o}Jecl}[-lriyTp}xJ hmaOB_Dy]"{Bs<@{Ne7^W?YZl3<_?ZT}] Ocޒ-I, Hʴi{Ϋˎw"9BGKU?ewa^NZB _5X"BhJ-l|*`x8= ~݆lABS8wse߁'T,w{K2 dm:T=4a_t[#6/w٫CNtH/n |<>CDZl\xP) |,T_'CT`YJ`yBN16[,DЉ@r79Jq0ج#ԫJnו"+K}/г CBQZa_uH Z;N+OkKBY|T&">=44Wq{>e9Ow` B;p;W|$ՎswEDhyrK@z5TIhT}\,ˉ+Ġ>8b9ä X?}Mb桬ػ}!wԧ#ks0]7ssb A\%CH 8yUQ{(^$W?8SO#/c9wl28L3f8h[)a r8l$ҋo.lRHK.IUJ8]؇%^2ޤas4:>=EG7Gد'5PHBY^`ͰtuB5ySzKu&A&߃h<]~j eBpEQNl[)< D[I%3JJ/8 #syS?_S[spIpYVtro qн|}4 AqQ{Yy9nD+jcK1^ ^W굾? ZhQh O `y*>h=ag;c} {zK(⻸~+^ƅ])vs}W %> F]SZOb[5}ԎRyFWO m}^ HnyPU-Mkq҇;@̌a=8[=6]]28wPjKg-W)VRԕo>VB6 O_8o;7.?_2-k~.z6S8SC c'`tcgy_VaJZhÕOCv BKOaY\. 8z{KW!&;ؽ* KLR r@ dO I$_g2] VH{œ>)Ďo^q!%={H9z nX 5\|[ 8>Bh|P;ѽ>5rHk ÊOޔ}0v`W;X>WWB᠅k,Dw@|RT /NG2q Y*{!PuȎrmhK炑DglaN˨Z0|4;g ozG^GL{G_9KrZ֪sb%Ψ@u獕_6H{.H䃵w!Zq'v UH8PJ;NLgb Ǫx Ưrr@bț9@Blv2?CP;CϠxGﻰ,5ݞJ~S\z&͡Jf}?^N`Tl_↱>i␢-'& 3xKP>P I8~&=UM9QӮ )K8"v٥}t7+l]VkՌiR, fAg9ޕvM.3爑`죬f^ . YLCI?ph&,8Yg.HäL|1G`no%'1j?A{M0fasпۦ}Ĕv<%gDb}БΥUh~|& .V/2`Lj؟Ih +>?ᡘSafs:Z"yaqb1Ѩ+T};1ڊlv8h@}^U%g@DW mX.O I~\D`ʡ}MI,Wjij%ez1n#*nTz޷.[^ -3UbqVl}9/݇-ƭ_aHƾb^ב>D~z47y{Vf\@7[ڠ ^e;hϯgճ<8A,K&PnMʓ!G!Æ}4lڟ017 V[M&mo;~̈́6vM,:a9qBni[w%}'rs 9%t/ܹzeIgY܂Jqב- TNaf[9|58K1o{íU Px)wWh,xϸ3W`V`  6jĆoW(gT5/<:zfF ބX&c` Q5gpPn还\)L#1_9OՆ38Kf Uu{MEa^bڕJhٰV遇tYp֕.{lHzb`{ sk07 E񁩝zT G}<k mCp z{: Y]jups.,#~?["?2!9]ǣ|aPQM$zegԆBF;ĥ`Cͫkt RTho' ́a0VgVzWzKTHIr>\4, \Izl{&]>cv̌ԓta] E1,} 9L^c c_L2w/@֖cf_QN1 ~|MIM3ubU4>K6 EޟKPn|?&̦ɲ;q_a孲wK0&ux |bB4.Y~oa]eX:26ƕv}= 8oT].oTVمȗ*AUhfSf])ō]u#i;(A} Pgܼ@7:8 ms鯇`a~1Zx"z 6Us_h#Vyi\D3qFC@Gop|غW8?. &S&${5%LS25[3Oau= w ~pJ fʑ.l#' a㌆?缥)ƂK!122̉D[ۋq8,__4%GpZNY}慞 9ےHl^}ka7sFqUCltܠ=,aNJj=_1ufhC/okbZ9֬ P/}qMp6_i5\^O=qTM!lv@OM W<О P$[ +\4FYt1h p.%4v;/8[X`E߂$ ;cAmbKƨi!c׵䰩/_# >~:ɌM+? eQ$sߣٓbA:`E/4G5#ak5[2q-7T}?esqo rHcH[ޑ8RI(UD]W`uV W  oM*?e%C RR fw~ -ϾxȂ[F? Oh˃@k}OGM3vW՗+q_N,FS˹™h2X?Sʭۙ)@eq|-Sprc]Y~QL\ڇ5)W7v o<+;||g(Oh&̟K}t'dQ^ >m~}<(,V)C{ J?NjpVW8bYpSa rV˝ S|$~\ JGSzв}"6Ŀ1bMD5f>OpL^g:48T&*ʏOz{v<Q_Td[ў#yіptL cn&~><+fN+daZFrTis3 r 0~c?&FG+D^Gma\4,ƒ+iGqj@xwUfCzRWS1v'lBإ$4*f.obBNAQ5<⎋+=a\g9 ؒS/X%xdcƬ ̐-%Byc=Hzs{b;9W}(zLJ\?qpW$4TqM3Hy O `q3p[Y$ݓyp fK;+жĦ+o>øz'@*5Y ,o"mVxF=zw&rDzQdn hĦo_T.C`/܁/#8o -=aAҀ%?}wf<{vi=IO T=j`Q˚NNJO{aUoߧr9GnIF_cNc~JjE8yvMgpcV_C|\`0*‚!c a8f嶮uvwT6x#d)pe:~u7 n}A>zAeu72).ȳ@no&OX=g#Ӵ$G0(I ]Y}HzyU/#gS3IBVP3T4o:v(v; Q<%7`={al[.3@j åYa;_Gq(R$vߗ9Xm-$BRͮ{NI "rmF=dQ)ɐ(5?` l>ceB0{`][ռ$)!R2c0+U_}Vb_٬*6zy2U2:k?7SȡXJpbKD J']ޏ N~lso"P4/-ul( :9B]`6/}t/}\A_ 6pHgxsʕFn\=7ES=VFX42>O,^ú5*M 4cxlB uAnfS2 TF K0E&(\zY/!1k-/tsșsn& %4LDXj:I܁P}:lZe]+nURP1kwp h`6M 0{Vp1F~Sua2;x#sInH,շ'6i5;`*K5 f0U3lzW.C#wq)@]i"H㪔KEu /3P;IiJˡ- w]{7n7a=Wz6/0Fw V 7]"_9; V3<h"1cV߸#Ӷ?C˱6Ε#zI uyMFǝpjȞ.5a/v0Irf}mGc%a8ަnV}҅>Q7)bZ|bW°Ʌe_nzkf =",<:JvwMmȣ-= f:h ^%hNWu n;r~o~^CJ-.7] MA Kq\nw3˱BC`hօ/=pdkӨK B0}X^  +! >c=yH 9aK&44i7msA[ 4yJY mB>3 D&,=gD&+&qn0¦:ۺW 1]jp.}3LWol0ƙ٭F{_csDO1_/㚑_)%%zl^[N-@&+> y)3Lk<6L}5cX֋oH"J=f99n ԰-ʂGsPgz(p滾zɤbđI+=^gy`OF7y 37rRPhey&f!c-/^K5[ʎZث,8uZ@-ZŋX2:UNEBן]!fۍEjD̒[=ىN0y.,56d\|<#,iYcɷjcUvemBŋ83B*neVxh*Q=u /}AbD_d/(:/ʯjӄ{)""a¿IqZ2iHk [|+d{ay:Y3s:}[͋fdz@q9vG5|N% F8 MEN*@ep\ )UQAҩgX64Jsz@ˋiDF.9)Ə9ێJu} y)B, Qx@E2{?䠛1P2%o._Z6&H*~Kwa)/5{* -dp.h5P{9xk#:ďctNó%A:Pb'?ٱ >IeoNlyC8~"Af+(i ?w0DqөRԋ,BJ+z^~Rż:tE12_f>JEdzЂ?\{ ⿖#xJ;^6t)j ʧ=X/] m9)!&o<=(㷔Lcww=-K}gZ6Fo^yoϜ~@Ս!:Ly>BF3Kؓ`WY>ò [%yʣeG~$a ^WpI)ŃSjafrXv,i؄ v"A\b31kh:!& Í<];u#W]QNqRHȷ"E(Jn+QQDJ$ eaeeRB}vϰ99}߯uZ3_9 h`_?5"@r {LƯ^ƅ28Vo >S>҃лE޹HѥS<\1²7c7!I]/ rܑá{JYUq:D&yQwB> |XDU* wvÆKq7MmS\~MYqv BC-l1;dn<HO>1ÂMp{Y{+>">5Mk׊}<\|#Z.m $fBL5} t?vZw{{h{eqlv^gsN8mɩ/ 1)~]p|'k ;C90Lp8 ; ıijtnR^m#!c=mFν}'J?C{)})~wze.:"?yj9SGcPuLfdUr? wya[N2GC]no✭ Km9*k$M,_J ;w@oΥ>l:r&1TCpGp0_"PNکj Jd A'CcA}M юkZB7 5}j56z ~vg~$w7CsO!8-#N$W979yBc 56p5>0H hL`ba KKGK7Z O5)ިMo 8uk'+w(Ʌ´נI_ƅ~`ξlXq?ɗ2N?snz썈fX0>Ӹ|we i+] x\~R}c״SYHZշv ۵fD))M8T:VtպĐfc)[ Oف Wo02p%P)8)w1AC bD aWA 2R#ztQi'LZ|8a:`Dn,v2uǛG7tü0PF9X gɅi;b$DWG%zàk]ξl\ef=4uuknJ@[Kp ;d_`.˚ -'9egUzw*˖,ܻ7vh3`Gz oqL㌿ipkq ywUhܒCl}cVSrjl$#,TN*}MoeU6 ׳H~cWL⾾8*q$ 'cJm tXW09GB>϶PlwWr[ p3O_(_[M=y7Inm5gs;(At:s89!wOֺH6(8ksVLdtEca"'5 +I5}Sa)$N3yti1=GL8$K}!](^Ǭ>Cc$o_SCgf;fvssm/ే?Dz'3`ަiퟆ#\:0(yU |_RAwx@^mFBv>nĥ$:eY772>&Ra.-PqH3/&@ISB5trD9V~8&ldBO4}<}8VJ[q+GկX:+x1^Thl|-t3mת+q;at|!&\< -9 |\SA?0y"cOVBO1H}x6HaXnzDn4$Iof{C*eG ;E#- 7θD?bH.IɁZ uc'vcUcÌt+WVmxMMahxxWgD 癁?8#X׸@ 5eho _K~hΡO'vmb~s]kGpc,+G?}G`C1JL^qo o;M=J`я]ya9v@_d&>-uđ/_t-8ǰ*jRRp5R FLZ_.k GyM)bB#@3?P1rV#W$,ԿҴZ I6,h4gTCE/Sr+5$i$Cc8HvlQ9 p&/Kt;'#JqUyDq!^6wgM{])&|ߐ Q3HEkCĝe(Qt/K\T%Q]S1]2w!Y/@Yܘqzwp/ J K+E <\7OZ\=?\x#3Dvyh{0('sޑᙓ'layF*JnPwo@ {:;ۉA܍8zh@(")J44+޽=Cu"qaXtm4w}ꏹ_oa֜őɣgCžaGtxplN/^F뷞sL e50RwmwqŎ1G+_q~_ qleUV^5`lj f;]p7)@f[]M [vӇS{w5Xr~$6\uo^ a5>RzKn |UNyϭXV=1Ҹ#_K\`W>- c㟵q}s/d &]>wR;Oa :4֋7CCHK&gÜQ X=Wؼ>ש|NPOb ¢e4W 2EG|X='ާpbMٗ0[Fi _Xd$<]TMݍ} ϣuiI/3̔?\ccϩ0]9\|S_v@ێivH.o*kK|X2Dl|`5,tgJ "[`an,&u-}pu;8P&3tQ oYFޮi*R:ga5{⚽a/]I;r˞Z]Hvwv̓uV0Tiu,RV~}z.y*X:%űX?E%_蚾n#E?alGxy=3U?~KĜL^mH-.Srv94 W[g #?m"ߑ{i3aCпhq_6֏6 KNh0dٽ" ]m70" ޺Q~."^ռ} ߎ4JwvUq3i3)87<Ž.҇6!d~k P}k˸Zw8^ٺϦGL94 B8&OpS4<@ϩ-o]ڏ~BJt Ш!O7#Rēr~=(+QY-Νrwfv!֏DxR?t&dieBC}`q&[?(26yWtK%@wC0$b쿤E)1p\啿8_} 0 SH6q>G9f/Wq=QYot_<>GDdվ-f=qB|R{O/roߗU@npm0~uB`>~ugP 0aRPVS (S.W} fPR`E`( ńffژLmki'akR4j[a{({ |(CpPER:`"BC{ | }çX7c8y#*Hͧ`iZWovanՇ_Z8Y14Ar?eM ֡a&[a`A6>w8OYYJYyxϪ3(M`4޿DY \{ pTиaaz6j жj,C\wWwl=G1* @8Auj"j:^ ;i%svrm`nfr5}+89$ Zawԙvp_+=,!w8>ɂqgF%@-˸:(^h #"6y`чɾF,[n[!.;8م^/)06gʊ#7wJIa!/8L oέN\Q݃ LZW\fdҐ?2=DžE:FdL#Zً4r+X^1|#p34% @s)Yh'O}qՉ`5a V{zاk KgSv]QzC&@Alū^ѱ4]l>v %!IJ>_}%K["3Y88y"@cVx^ a ҘPbqC\.,/h?IvJG^Z\~s ×s?l޷Q%-c$!Wr7=!{"ZѮWaiQ;ios }o?<梚p^ 8ʸ_+qX9o}LYU fZ%L1q9@.*/mmp]%M[I`t{ èԯ{y {R]G,dJ;l{~NόcU! a/Cv>~$˄(!5LKq賾@C u>ߗqWa07Fvx4ϳIh4s'm1CPMA96fמc B Mg 7yKMC}ֆ$) x V@mPg'Cxu!^ N OA*@ufXɀWɗ:ltVX6~^ox^}ǏVn@dμpRzwNyXZoI$O0[Eem@r#6GMw5qߜY8CIfrZ&&r]tt~B2iŸ 'O=y}@wˡiӻ׳} xv&F2 Cb guz浸zXD-?eeoK;hn|ǎ}7.|>~gz$yv ͐H&L7{ya\;rU:X%/jҟf1&̃XY7%M"^8<gU>ntV?Թ҃W[/M!45IlZ)[rx 4<{yfB>٢"uUߖ: O([ $Y-",xנg Z ;p&rpG!h Q=VfIuD!tu /n=AS"%% CF S$Yw?k-/<_U./r%CUŭ' #෱L@e+>vRa ǒ"y\c} Kg<#r:0=T|8^#+< ;{pY&xy`s,F 81N3,%V\c0,ޜ{)<0ofnU]AaB DנLoQUEB(SMHp>?:'>ܟLQ)X]:B1Ipc3u3?k?kzB6P8lUf$J ICM[v!ho%1в=wb=҆u$mh zf-*GD΃>!Gb,_+pPt{L]&v7i~zG/dqQƒ8(lelP% ?]ϳg9L(?ۅg0aK]TZNFp4-G2_T5R=m' mdCQhe}Qq lOMu'hMCCqr?s\NPDd G=8yG6nV)l](1XFAqFuK8_$ |e:x6'٦E-]q#컱z'yWpGWXW֓Ù]kKTƃ#]dN֥;XU#YV>^#DʾݎNz]bUՇ4b/sǙ09qI s^:֎|ZET~Jq0~3'vľ>!w.-&V›@W<`QBM`Z{^ _ÁQ[wEcԀxX⚳>Kqi϶m `NEzo|)wG '^S¶@,']tȌvXSa!zֳ̧-à&J/Qሐ݋8c!ٻqraf#=8X zU9\Q9+^tİ2/IjhXzE' Ђ'f+jԼ6y3E|\ 1K#"Eh(%΁ʮ&0uqLF<Ŗڅ'ocKV2&Nߋw'`|ϲ1`NY!5ڙiϤ{[^rЧgdqz{4/lrQcz8϶o|q;;VSC:Gq Lq~ Io=H 32.nrjC7ɵ}p~2& ?ΤÊ8'ҏͥ⼎Fܭx$7d1-^4@(yD²~OO15VLE+m^B0\+k&' gC q@M>-߀*֡>P/HYNlq[PB;l71ƦߥcN.DZc,cwE y0,۽s4SRx7$Szgzeb ˇkj^ڽޣHvmт |>[q!An;cA޻otp9*:$qpIǧ8@w7=n*Wb?+9C}2UUs{؞ɑȬI/2۞{@E3}<=p:퀽86G_\;pگO,NVی+)YW)ę7-Fma/h0(ާڢ#;48< Áwm]X(j¿\)ǩnr~$G3 K?tY%*馿RĥU'PՀ. ew剷/X4RZvFUjpO5I[fsq@@a$^ax Z8"vor9^\H}H6ND ☳!SSЛ2Qs|a-J~?A_-$yƟA̜ "SZjKbCd"S~ޛZ79"M1Han9~nI:}.'ļ y]]UikWؑ"8~sU%3 }Ge'$ E#xl_V~:erP~WLHa 7)`m3dT q(bE;%ֽ`@dAU)غ>Ey?$ ڼ5Zv\'zXuUm=aZλt\K900;|R_KkK}06anZ_e06;f,nn?qj_,^ئϯZ6ӎC]n־)0̡Gv )ߦB$McCjFD,ewo,*~jqȈ[?*>6t M0.),U۹B2Bn;D@o.pq*LhCWi^ø$`7x `{Pe,U%OztǮ5 XTUv1xN=Y昊N*Xp&+E-E{|VLoI@_CPoC~gq3$`*?Ǿxw%g06 5e;akV2lJ"&|WL1"kO$ 2!WZ*1l[ H %zC˯0@˱1R^r`3lzg2Xc.Kڭ8 6I]" tXtT ^Q~֚@stB0p1xAv5)9g-kHR1Ɖۖ=kCJV-heuEWC)4WcCN O t} gモH%>; jĥ-Jiۙ5h62zERͼn"(Y'Gn?l?qϷB;`\Wd\>~M)>Us֗lG%H]yd^&dxZ仧?ץ#jДw ,.oe4Ǡ!q̕syl ? 2UaSHVPx׻mO CÀ6f>Jbhl\p]9 MkhP@l3Rohy'({M`_0xpGa?WJaMEJ߼5\yQ/F]).,mQK:uX``zqO4LlATVHfvء+̴1^)XOi2cCe)r͂T0c9=q'';+Qo›!e#tPnTÕҺ{.|&Vr3r>ZՒ0K;ׇ#wqœ_M3x[9JibJ!cwELǰ"^G?>Jԯ)L[?P} U5AnkAΙTB?4+%ѕ琨P_{ 8wI/`.Iz9 TQV׃c5kͲ[OB3Er|r'~@L|zo+aVmu )zO6Lj`_b{Py2aKڴ݉7ثy +̓pxG5 `UWq@txI7e5 tH\opc]8SV $ұSoF sK;.HT9ͱ"! xϸo"wUG 5bHߑSߠ0u«Lھ=@?] T?jty G>NmqE?0, _M s۪:;wzAKP͎'m0~G.kWXf-wl/FB04r1{Jq4 cK LyC e jvoMl*;rhi% ,D*aǓ53 &é@b?eՏY}g,mI㧴i#Z^3 >>uzhJ3]YFl[2E]5Q3Oy %;* Y"$O3,z m-0z4 i+Q.6v!ZQ&f> ;^ |~= ɮ[I+R~R|`h>!y݂fa;sc9?R5#ϝĆKw=]tiLmr4.,bo挎w~W_?_a[mĜ,L8+Uq6T/عX)8U*eJnrf3PX²:Nm!m Iɟ龜Ť9/,QMAia,08~)O ,(vj>*g7 ~@;#8TV:ώY}\%٢X$?Ӳc؊sE(ˍn)| -\{jU@}g\-zeapǯ;vJ)¶w iFc J8x.&pl h똇O~c-RR4΅=Syz [ Q_¸1~D<]t\V'ұYtD.ح]5wC_kI7t#>jDcӯaq|i[SCj0LQtĿ͑vxD&rV`{t 6X;s0L8mIwEb W8HwջP˽߯OXM{/&TaO` )nEIX[lo|@EXwQ3#cYz:_cf$Ef>"q"F^c5I28scXTlqb" llq/zU~hPj E5UrNYUnxXn"o j8N" Yx!`ݶ|h;2ԏwio`In]xfr ˦;`jv@BƏ'fmk۠KtARcr>0n=̵#e=¬o\a笮sе˻s0)>ssj\7obt_9b6.c$eM50Q+H=>OZ7 :kث3ca?s/kL3|Qnc2з~7/bo[bzsS8_rũV="t+FW˳:jlBT^of= cJ@+w*Jga`ѯ\i{:^ZA=lF ] 5Æ~/]t: _hH+_-B%0$?!ȋ/VP`| Yl=XVl)k(>,?R-P0.t2['ɽ i*W;muanOV'2ǖ4X'61\U+fe F}Q>pgvy>Q. I.uV=2sq/8炃~uX+w\;?*@_ĉ5n˜FMv!G X]TQ&-\ t>ͻ<޶03IeL.6l{s;8%;lxkvKl97Cg^I&tq[&iڭ!:ϗ8"R8jcuΪҝ'KF+P7 :W ¼5W=}Ǘ3~X^6=bDmV$4'K:am!ױۢ,NسB7;~0׼JWzL4H7OUpE?0o'U[v7mm{T'Xs c"{?t)06wGÛ=O&ذTϱ9  j[>7O5*Yju՟aR悉40mD , sqiojMs|nPwQ\:ĂQ:%!xPa,"W,DZb'<ΓN;Wn =܏6L)RLҭ4+*H]I: #kwdᄓf2gN*^X yR.l?cLnysfEt\AޏZ+P#D?Sؿ-q搟q t'휙!x=@V$oQ{d{upXbY^|畂RfHQ|x _U/!I %D.+܉0ʳ ]Ay`c\ ۟^=]vc@Oҟ7\?s曭_qXY# wnhUy7("@rxR|.^9s5^F4Ҭ~@BlݯYqLD ٪O*0mD|Ok [g |1$$2]> c' tIM͜qt<"*s+]Q؈I[ ¶b% KX!bWOA9MF}rk&=v*)熰f7 eV$hðy:l<ИT.:Kye ޼1"ٕf9Ck9--0?%N V(Yy,ș:=GN찂Σm5祰YOۃvY^}l$n35!78q3XT\3şΎD!"KZKmkixE1K|AGGaJ ]\I )<Efw~Dr5ݵM3#0Ju-u~Iũ.!343Y]?r/Lݒ8]iF]޹0b6*oV f.O!$Pglubf=:Ui"P%Z^ ?g'm_x9"*Wh:N4+6?;[GÏLl=FCr0n}sƂ̮c0p^T *w!WcD_0T {ʽUh!3zrukyf]q3œa( AZfd4GıM4%n=uMz"{.%e=qq0NcI]^}]l{I؇C1 rǑpg;XvnzG"ܽG`ɛ|3.w1Om0{ q>zxN=⎇3N=T_=dH$Yp/µ2[%e‡')/`m?R_2Ä 1i;m xS=k3YՊ5@R@ε}v(GSzk~$KLɻSF.#*ҘrW{eȓǹR);Q0gku?\fw{X?mм;r)Wx}Z=0r2/;wadgGS 7"iU2Ř}vn0}T8fZ6TXKر)E 3nyw( ^ >P MOZHZ=ہvSݱ&_7y-Ak,<:e/a7f>D5ZR`ѐ}L ͒naO,W+,=5T"bt?KHzvasB~G۴4b]lAoX;q 5^MgAgGXBT]9Wփ0#Նj!m˩[LxEЧ[C`BqD^U~bڪ r_o;_:|9N]}nql~2)HT2zn^,[&G\5 0d*ʷ|;fAn? L x&֯-q@w)g pvBt3^׍E .{a5/ə\|Ip(x$HY'*8=>N=E(aTsl-H 锚oj8b?f~峐*ΘJR#ǟ^ 8=7>uE~,+VK n8c1WmΎJ0+MXj}{8Ar|u,2`feer; fDX_ lMwFeJDbN؟=yBCȕWdnYC=^20$7^r5&2` x'-;-c@"qUDQc6U۔`klX/Oʁ}@b=Ll;3+1C8-%6n^fa[[> meø4qh StbwrmS#0ssum^s " F$:ی^5pK(* BZ!5n'fP?$ y;-v.LRcӟ:Q*?;~؜'z՚n}XPY; U]LPxѓsW.g+:kf~$*٫@+O cn0{1Oǎ/8g+}Ǖĩ TП`;u_&Z' +Z o?e] VH>3#ЪWf}T@׺s-ԕmD`±ŮN7i)5lw k|-p@lgYn:}vߕJ"aTAl~2{oKljAE6AB6fc/~!Û+lu@Nv<=t u&.@/ayhj[-c4Cw06K< ψ2 j>v7~|[ȳ}g3\uB?a`&?o0Yk-KLWv4YZ29s,Gj=5 :˞\?( ">QI9ߚ9,^.N<;t4Z ޽-`|Ձ(57 r8vF^\e/sWZOGRvMεL'XcUڬvhIвV|/I|ul(s̰j{Ÿ1"yQg[w8nl5txD{bp~햌m?o)ipsCD4hXj ?SX>,y *xv y:` $7״X\&g`9f p" CTsn Xsa# IZÚ6Y} tL%]a@ =e}Ɔ9jpY&yI#_?`-^\ z#]Ƨk$p)jƌ ڳj-׻03ZvAl$w|ZJyk>7J\ ˲i&߽+8x+mƍt|кflLcKTMg)saj1*Нxyǹ_zV_ȰC-7 TUԒ:#M lL@0VB'<*G`S7ܚK,ȑ+(on_s;n(./ށ\b?zsʼ^&}MG79Wi6qn%Hz`Sy mVbͯzW=.qGH QOdsB6{¢ΛhI};z~"gS/>$zDU t[4o:!L~,Zp8~=J~ƊBfP״N?J Ta{W`,-s. .M̆#~Y[eh VS6&LNqC3HU9,~) ӏ}&i6{teƌ.㘄+FQ+~l4N?ϛZѿG>Ah~`\^3 .xӵP3G\>5YykYɝ0 }O`Vmd#nXɽ“ciYÿx@#=qH#!G$Z^pǦ?F`vk?Dxh%m/^2 ,ߨ3X七e|'Vck{Qf?+)f^Ȗ|,q|j,+9:x Mm6$/A͋gY6ur?ufvg,k»RXNz2^[=ז@Y%Y,`up,zsF[Sz X:YC僾V>wI]U=\>jAoq_> hl(pM).j0uo&& f ^cG~W`uHN14+SI̓*Kձ: fޕ;T[x-i^x!TX-R| fZ/Gr8}yoF3$јɡf0\I;bT}E0hp= S%flZc訜q5ȇ!Cysnv:ù_9zҰQxޱsX=n*g0:&Sai_*N|kቄF B딵sls~Vb 3˟gUa؎خcC0]+m`E4s-s `&ݸ4"S5мɳXntp$(|ط]&w/z]%!obg|p&..Qp xfc\;x#VN<$7fۜj @pi<̳Czp(Qec9nվd H,NEKH Jx8ϭp;0wQC*olk4I`$9>)N~$+WGKh;|WaK讜1yG()a;Bʠw0Z#E^pWpEOUgi$[eC&s\&h~7$`5~ȱ\g|׹R g;vyi<fO˯u O~>Vv!:ųI^n{̽e&bGXY׺pA ˅)_o69T.N R-ZV܃ ^DLM% [o@5aNG\v, .S&]Ǵ{ Yu{Wfs0ѽ f?z=~2uI3>ƒ2=Ig>h詊O> h(0޼߮*xrxǦ?3*"U1;n,Ei88}Xl]Τ vd|1 ydk!^d(Kp']ateyVanor= i޻Wcwtelu 1~-0@x(LA2%9-"NBLқ 0a$K셩 4{0Ba{fؗryIw:.b)хG0}yNί4ݝl~6 Pd 5j{ ]\\aOaP;8 OAc_ g`ƨCLΡxXMsLK?Rm=M"H'8@[Ѯ!|(RAUgI%\@4b H,WsGAr7~;ύ-_ w"}aX^* uJZT>˔!Qj`msy4ɰg}'|]-q#g#@8q5+ gTr3W:I0TOOc`=h[q~d$N{A*>7)H=&wZq@J^`EIћ@=2woѭa0X0B=ees5`,J pd_ K6CfSw::9|s%Vf@)x)o`KJruw6[ȭ/ ^چJ @yPx (We{ݠⷑpؘ(2zw{Ѝ$xε  ?ɅFq>8y@L%%~8Y%9ˇM-l?١_C{bxg-=VYkꇂ6|ܥN~ѯAq!<ͲYO5C9\pa}XG:4ϥ.<ܜ sd$>} }#gAz$9ȱC.jVDUezܷyTf03I geYa<-p0@!R=#uJ*v'ǿ37!w+GNc=C84jC\*;?# В˸lɆޙ_qJY*,eZyRWAz-7w*:AU!\DI@)86`QRI.eg}Z9+iISOוM/`X,#]԰G;OٝHUZ% ,L-͠'݇# اtXdP˾퇉b_gBv-NaU^bW. ʷBkXb_b}5}d‘Ni (aP }E>mM1!:iPGc\hsyɷ8ŏH>"ڊ9;_%t.=YY #Q,t|3Wdme:kCj-n7lR5,Xjڸ63aM{e#<1X*e?&_=*~+t~o;u!9PzjgbGj+ ft1e Ҝo9[pi#HTwi}1o0qf_ҳ%؇լ0b"9 ;@Eyq\[U%/O"8[+="u%Vd<}ɔ޽#KLp_o' .}tx^\86dr,͞['cxV{ݭ0tv +mz8ܸpI5Wr} jNBBޝ3lXw}Ǯ7@~ S ˑڕr, ,&z|z^=󰃞w]3H,쨏gZaMCs]h ˯Ni3c}.>X{ Mξz"Bnhl~ۋe)U׬kq$D8JFmq2;j l{.8mrOwh{^9īz<8siq(?K&\;,H}6EHS_}֞0< ^'%N y滻&o$ukk}m'F#Ʈǒą_RG2LE3=%OA7n6*4biq'C5NPԟݍd. LW]o&M8Ѱ<# YVSK![ep%`/$֠߸),cyp"2VYb 2:qAcԌT/no36Mgm :)|8*Z WpL6^+<5}51%\VQGz 2l~V Tɋ"%ˆ#mlp9=_p#IC=yaj` .I֌!Eԣ[~3 ӈmb݀!/Aͷ t#J^"3J!.lup&KwUFc ȼͩwh#M^2,hE}1 ^Gwߑ\gBm\y:`lޭ~Xb.o,\wdT {{ogUjbrҭ8.*c4I \%ZK'@lIV dΧ=Kϗ(įFD/_/:aR/$^n%ER>ޥ@IoΑ27 `ߖ֤-;.Ngna(M*_`Ly{&Nm{;Maj&7=4:07Lfrb.菺ҧj7p". F aW_(XyQu"jʛ?UN/ H( Eʉa3a.yv&pQ`H2=k/ϸT3꼭9@qt'XTuJ(6,kn;"3ωbXzA̛/bhqV 1:h qIu غp348'յ~#< o?4Bq4誹Ø[AVͼ+pF2\VA6IknU`ܕ=!V[vm!7ü6s #̏ DRxLy\Nq;߇xgk0waiRg[t.H^Ue-\%aH}>tN,^Q;q:-y{ٗqPD.a#pF'r"2-^{ A{%]}.JS`dپ4ROz3jh~f{=b3`x^w06Cy:V7cF+-`ߨR5RJqA]]"~겤 ,={YNe.PAA`%yp?~<3$Qo16NGݐ%Jn8a!t2)bf8@_>!']f޵w)9 UHlX9 o4< D갎84tk2ؠv]P(j\B7Abso\TSjot'S,V|TreS/RWOD(w|X,KmIJS77:]D'Aދ#s!轒-Gg`߭|s i"-Rqn꽺2^ũ)AHq(#%y_iYB'TE-o;NAڂ۹0<:rۂxotC⾣۰gl| K3Kìol^=0)2{1'gqTMP߀^i@y)f(>ɍôU`傘Mf0י?V_4̯8js_TWH= UAMCyeJSkxaZPmF~N&9<9#uk=7`ĉ,ZĆE*bV}nXdB ~خ:%;fzzl\QW>ҒwCe8cAUt/py M+vY퇅. 8t.؛(ޕ ëۿruI$%xFٯtYaf`8p-*.&ت .CՃ`푽@:jq7o*a0?tR"/)hI<<z4XXC@泭U~'#\Ё!Hrpv~>r1|^ϐ).[^a/f0Dx%) }IXG!RWMx+'L?Unϵ). soIJj.O/Lxtw1Љc-$D }5wūZ80s@-6UӀ#|H|[2= S+|`EJ$Q嬃'"3BۛZpAa[z?.OZOā2u{E3=mBwi?;q07MЩk"sMl!6cZa?=@k8/c۞ڜp0T~ΤLdm˯ĹtQVu.ٚ {E6yN&z/ac;N2%?E k㐕tf?fnt<_Ouڅ96&oihidi{ +5CJ @1:g2Ev'E>hZɸ7 Fj}n+UO#aTx٘a3X\q{  6HׇW{t@ m._ڱ!, nıO?R&5F͇y>sۀ*pg&=av{~Gma^ݸF/x#$exOAgz0zSiJa~YIWPlT"Gz\a-۸a̋kF lQbG/_ۓxfa@#{_Sʩ߀]u{SџΕ>/O}S] /YA8@3a _}njOzNHRЗ4@ te|a+ Zplq7y-$ ˯a܇qHD9’FcTdAրM.,0K5ș 'uvx o"mfO7mHДRt9,yBܩw9rql^Tʣ݁b%"@;Ĭ?̃W ـ^>z&+lc_Y׫j!Y2a Gl/c*タ/pO]칺53ۍq[=FˎE%;$[x"?s:`(@V׽d&OQXed7ޯɊ#!ugpTazC ~ȍرw+ ɱWa'ݐ#KノѵDa&cOf2p5}V`lx0<%tWZf\ڕ=" ɹvfOM@|qtU|-W3`33d8 <`R)0&_ϛs@#I>qqGx|Elrhϯ~{91ؗZ8;0~]"|WrL;Ks2`6"V4$mNtw pc3ڊř$ANzh:D|8tc.Tg,2ag̲h)6=RNǖ׏@qkw0zWa;=M`~Tbt̀rCr&34yg89gJ=X:@C"v0+n> K⧞U9@޽%?Հ|3po}?`q}q\tZ`SMA]4v)0~? o]žGF ǓpH9WjpTbPn. w۞6ƇN*3 Hwb׋7"GKqx)ڻ}N]=r`CKDoZjrG?deafIXB{DzE/;BO- V2wj5ǿ~g%ptP@Ihάp0ukw)잽Qԥ S_gNܹ^b_\&c ӑf,[0O­4Wn~)_[5`+o] EU-CH̦0Y$L1Q&%eiy+q|ɱ"N{b`ŐR(:x*73hhY*!ױJР/J*#eER %gױ؛{^uhGݝ홦|{g=L`%`, }|\&л쨶_. 裫j0:-`⡄m~$I2qǮ=N{ `Ŭb6p@~79)LO‘n`2%-*Ό'zhmݮ0\}F2,*N4n^߅ќ2d'i< Eo`)Y~;dfoɫQH' aHvOBy?|659iQ  [>=zF+kaE-i阜}o_]lZJl]ũ4;0'-2s&$1+JW'8_ ^xvAEUa.?|#y <'`84V:+fSaFj-D?ЄEq(;T1QRRcǽ;sTA/Hsg]b1C0c\J{3NzaNA?zۃB{@tJsY>-/,ĥ`1EFЈno0z8zP2TvHxAyqF5q\_@W.)|q9ՇH]'GUGaw L\|m n嵘N\:`Zo$܉J.,-Gwlő4WzeD>cu- /q@*mHJlSR0nryF3D{SCcK"F(`Y[KkuZCKpw%oy^Wt~Q)yfLY{ 5%(0-Ε«9K\*98ve9|Xi[L_!2䷘þUk+d(^wN wQ@8t-V9RϷb1fGt)\}V7fV97 Z9G?$8\26lUVG9܄OJFѮ,x57zu tzJo¾| _"eV5=M3)(:ʕTn3Q-O)E~^hSzq^w-qV_&5DۧcgGF1\SlGH;T/X-i['$;"o@=`xIq5NC B \[>r#\͞|p*Zװ2 ('|3/=JqؿVHUq^U2v_|@4ʣ|g9nLu9KOv-:@ &F߄W2pBw7u8u\"{5,jRFNV9 $Ge2cH:%'p:YiE'JU_dF!z7od<I;:_=HG+㗳fU*8KI\{N_awg~T%0ƅ^εC_{7Ɛŕ=x?9.6mwӉ^WqDO'CXHC ܛk\VHq yGǐ{Y1=& xp_H 'm0=wZa۷Z9,n ]p 2RTQ }n$;T)|֭ rdwou6]YπDKs8/pG.4W &]ryKt^@҄mР0c&OT @;bqp#/cPsՆL"!✷5^K;K~} ׈ߋebB< L!i|}Qa$nkZ18dRțbߐ(Gy0uBrT7)+I\뱏QF 퀾?&uq+}o>/~3v34[&rC68m$s,c40C~nǿ-0ՠ&&>sW&8QXq_ m+v`45ϱ_و*p%MY#=ҘR:~Ev+wM܄gm3X"\s7MO bcdƯ8k%%yM:ҋiIkKh!ذq r?Q3т8B#0P_?~i~v)l3r|VjP/7}ܡ9{i'ڀBR 2INBmhp̡m +k ?T~E@tuov~3|'F͵!}~)y~; vw?'эf/O`'j"eWLۡr]!qMFsO:64'*B"s@oP|g9:ÖUZaAb-K>7>'rg9nWqx<톒x9O)mZg[zw>: ;lkXx{_e2EASmx^hjW?6alI}CX U!caBtʯ~U~OtxikW⦚;GT6{`܍rm"mJT03f1~î*xsX A6*揾5WkĬ]1.g0z[FyLiGhpLlcp]pRb+GvETS`sirT*_ lO?%ӹӍӫ4wIJ{o1 `̹cňt.YSuuƢwֱ"5и`၉6D*akɈ^jEYSp*0{)!ҝ9}?)|a;]kک԰yNHd}ZŁ,Wa5@}y2lZ]$oߨCXdGncXX^j΀YS[9?X& C/>R>^CveӌH0$QW+iU&ݘ|39>Փ &8ٵ&u.r>>ٮByQ^"Τi׋9A_Uā,Ovk((_ȝ(~RP1şۏ3ndX9f>x4\}{nÊWqd؟83cҢ M rtV~j¥?o yt*M)CDh<'qT)Wdt0?n +r1t iڣgBk ]9Ał*Z1c.-؉Xlb\ty{\R_3g߈QM_R/޹X/Nn>.?7q"f)bƎzփno5C_̠QC!+H-*9g:u#)Fv%"EFl:d{0".V EQXs5=)U#LrMt} ,Q]Rƣ|wl ?+C3yVF >J;eD,%욇 ƄRqfƼ |Dmݳ\/7$AFg0P2W{N-lӺR؇꾸J-c0hG=XGӇa@Å6S>Xڰ"2_qLCK[,pG &&^4^>Sp0* #Z˅U~m(.]JSk0bփzBß>P SG\&j1ڃ?AS*#cW~m+Bu OpȮbhV ,1#uH&n;: \*a6/@mCie.RЂ+&&RNоI5h֕,k7>I[p%FI*e$}"Mw)˒Usa |O>s-gM6oZ]1o? HYYobz?Xx8Gj%n؉E`H֔OJE #$:x^9Ry[9*MM?1k$o3а zTaVKfąO߉O9)#ZiȋiDJEZR$"}ΏI7Rb{˴82%C5d3q7ӗ9vN̮Ҭ%׽wN/%p\7^CӾ[JY.Eݨ52ufh٫ʱڗ]|zØG챣"Ԓ:kqs?^AAmdi sXpGC:Ʈav_v;]TUw/|̟{GL`P-b] ?:pL*:}ZG(0_6E}mKtko~+Wg?ؗB9Zۙ:TmNRѮ _D&0epRɰ7lp&'۫`˳c>0t)/`ԇ{Pښ/aOPNuyXZz,`ڈYb7mHJ놪\9WhU%>7M.ᇥTg% hV{KpZdx!whqW•T(=ilnLRR{1?'`hѷ!r~{)ۥ6㘜C)S0~)kY_I:`;Z?`Pטn' 3f鰣]Q"z=?wXt<&$wL?_tc백 IXˎQ;yna]aa;mj(NE{BCo5T:*ly75#e!_<_Qw<ͬ9K/@%Wn 8q$O=c'Y{W`"e3>7q[Qʫ~wRi=d1O^C[t؛_Sf: 3ڶ/~6 q~iw^|Ǿ'%Dɺ]l 8E-y"6YIUdg_]'?SǾW?uC>XSsAk0T`}UeC~h;M?5-l]]Ӌ8ßa#m{F6%T_Mhro*EaƩId,ѡ>丕{76jίWvI=+1Wd˯UrqҐ9!Y3z&qgJ1wp<D1 vZٹ!HtyfYmՓBcm.Xz&ƥWx:&<&ؾ/\\vRrU,s1_Ϟ5%x'Rsv D:0,yw,ffQwBJȣuI-<#kqZY; /"rjFA <f"ںܸS'Y8|k_HVB=fRB䄁Z͌@3p &u{e;}VljIw@Z}9V}k+:y@D_W:ȤZ 8%_y/B*!xWk,H}_;j!%6QG&wAGB~`h{Kj`2;P'_$*f,`D,FU U-C=\Ƹ|֫ss7Vb2,O\jľB*X3w"T݇n«IxlvVߚ"Q,}\f|;{}݈ݚwtcQώ Xgl+Ɛp}nfQZwVԺ$/N[]u}'BgI39.Sh#_<΅`Y}sS= Ɍ|r. Jïn/Z$=pfcU/^A}wmfll*crceϟ!y%Y6WdPZ0)\7s Z,s ]#I-֝Y'K\"mV+iX.@ہԝYbL[r 7Pӹ=#ߔL6o-9x\4S>P`rJ*,_+)_HλKb(ҟO8z j<ĉjbt<璿Et[cIXz z'qaIwF.̲̂Y!0%Wa V6qþΣ0t7ؤ7GUX;gDƋͦ﷡g%0!wO\<#`|),v\}, } E?4짳Lc٧xqVRe#qQ'yJW;K {h`[G UeDZ$&3R@ހ~n 9Ra}"susRt@y/>O'PŖs??8ܽ{S9nh_%hUc]֨50=:]gĶ7T7Cfđd=*|yontQyO A[W&UYp6GuЪ}w'XEr 0l2Rq&otl<{I--ťcӗ{q!w~Ϋ{{,Mw`i^9.l+.PΞfϔh|IQT#a-]D Z8>;Ѻ#4wult!w ft܄~];haVD<*/tY2T>ROK.S rWmIomy;ie _ѴJEX-Kͼb] vݚ5WVʦ&U9nh_/]LTq[~}tVx==Ckt-0%ҷ;Atc8Qp?;2n%7g'c=OF?=R~7.i%An wr:+n:C{'ip½,47imhn6cdS8OW [5r qm3ݷ gV2G}gtjnt&&]RŢ#{Cӏ'ڣ|İ}׷$1Hv1 7mhBm<73!U~k$[ zOlc˷*w;o.|Rsw_}QXwG0t a w'& [*M8v.9zw .̈N{D9ኟf0hoC}^~;W!@*_ ?)nH]s.>{]^Pp\)-7\~TgF6;Mm 1Be*Jk!o$6|н$H~V8iIoKt[ү+L!.c[Ov;@fR=kt55 {p(!7l> 5sJdLn0 fRhuYBdp1 X';OXF/\>7;SC&@>;WF之&ᒁ׾/QZ#ޝ +5!zn lRn[O8\)شsGjg6`h)Ͷ*z#{q6ZphXL_n:@uf~Y ݟ: e1Yty\iJ9LLþ c7O50m CcAqyًgӪ7zL`2uO0߃v.tz~+!a+F$.0nx~%,E_~c*n%b.P9_GV(Q#V߇u!b7Wl(N<%"pN~1u&y v(~H[Y@Hr2P{*?P13i,N,jr3JرnW .hV‡aƝSeS.=f'9}"]>(WۖfhZ,/Ʉ>P3a Tz࿙4/()0U/vu+7ުŵ,B18Tos H)$}g,;  Ah^{XiSI8aVP >kt0 g^6HKށmWQY,Yy9e3>9^^0E! 3{3MluĆ͆N4] <{|W~~O o1j:[F0޸?sP>MՅEjWBdz>I ?}Eb8K+t( x(mw?~$;+[SGʯyƺ_wɖaMH?X.2%5?pX5xƯl\e+om9%s/wTRX)nх +țw3f'۱Z~%mzcI@b֮w8ʻTBtȳJ <:W0:X:=)?w0Mlן˫ ZR}Ҍ C'K7} &kP4UsLUu G W2ღ5.!alZ\'9ViMO M|e)Ȃ:AmjgrH}{äd?B5HjŇ+1"r[sbX(N\ck_ЗrКe)0w&,_PZ`M},0B6NǸΏ*`FF&|8p Nkcƅ]Rϡ}F\ȉVϯc˗c{]PR_+$[@q#h[`==r&;[FR5hH "56ס6^98{}Phğn&G0Gաrє+]EfO̗nCͮ5.Fq4pJ CJ2pEQZ&Z9C0{weV+ApzrN i++i) =tSТV:zG0N o{Łn2S0, <=HݱPqp੟^ԧpwel6#qʅ\>A_%B+^afև3Xlt{> ʌZi_9wqR}Hif@oq@ cű22hقAXiT"Ҍq= ƱYq"q^̣G:]RC8Dz.cI \li)c8쿐:uBiooy3`U M=*$zg|?RAӝD+&|t#8„`"u0 |(9_7?tԮf+X-t=-&_0͵m,\iu? IZi] ƒ\7ug+P] еN$=j$ @WU$]ϼtEi:<3.ոJ^,z:ՖqF n3¢×H8lt:>9{@ *՚`h)ё'B5x;_ja~enVC(kvRܰi^$Vd{.,U)Cur=[nyp%/X-ѴUnάCt`M"7GH6ҽF?UH`{OZ}g`T0u?·8_q*?rK@Ť3 HLm=}& wI?]da_N9q2uw|qȠSd_m`?Lʾ9mVvb:+MX'2FYg^AmF}-T|T>qnt f5:p#w\m!f-.`*N8#UY]slPF y3M`Ր!dzs*_K$ @`f rW#y='Dz.w{qI])8ba,0ȷ?U=u׌?8A^>3e9#Ε,C*nPjRkO2>,I_e-E&q7 BCi|%ǕSv?uJQ@-q\~)'ebW3Z3y5w#Fkpӂ}' 5Dp35JSr$?Wv-NȲE}: nJRL 5,BdrqT l;%]&wT&-\..h ?߶x15QAyѝHSt4 i*>%cWwJO̺AtOVKTO&m vy_mә)XpIbYriǾΞe襖cvEC^Uȴи~˟w dӃYvt=0n&tV2{{]SK3Ƽ`0^'I<nVƒ qW7p0ʒ龌 @ &.\t`V؞PjtUsl|O^ĩr&_q+B,QEe`j=D4>H'%ԁr0 '~MmRD-g34Pn$|v M=ghW6;&7jf]ۡI}I/w{5UD./)/ZSE~ ߠgH`,t)kD>B.e0FV6:0°yN,>mAoľ#qAKyk>O>l= /4MZ {G 6moT>y?7Vd:Ni# FnTA?? 9ҲB7ѩBl읻jvW*h)9ɻ:^BvAWVxyYMs4"a!Ǎz@yuTEHnԼ1\t['iX}/9 A2@G( P 4/9p@;,-a>jϊMKښw-lgQA8ee e`NEUҠ gS5DJhZ$.wKhV?_ =H(wE;=il½X̆&7ys{K7:M[cIuGCԷTGxeXXwXǥQ?q!<ͯPb IY[^RIp~~/v: Q`ml F^OT8cOV&]Ɛw"xc"V'%&n/%is4XoSI׮j{r8l6RrLbsCtZOPDHa{i۪X:y2ȷpnt`?.24KYpNgb;Z|(sW-:Ε ._{X{M0L,{1{z9`y|ݑ>HٵT~NX5߻.Pbg˛j >_o! S9_*GHfv0Gm˄e_vS0D9q(;0yجH቎8_xb-]'w`wS/QtLRF9{W3xqO1 ~ 殅3LvʔΓS fh7@O1u켿}cI5x51oLXS?PK~g៦w ۉy>YPl%X2 kל~Ĺ] APYSiF~Zo\NէijmNw{s Or;9sVɤPN:i fFi#@k[Hq/Y܄g6,I$; >Zo{]xI,#͏F"0~ m%bCG0LW-sۦ՜^ UQ=Z&se>h N|rA7@J|6s5DJ/vc,/Kz=%sس4 򝲊aW6+t_~fs.OV>ȞB'wbq!/;LFM_pc-ηs%a,OlX `gP[b'gq؛mS_<H ayWtݐۏ CpXEI 瑲ja!}")| ^ ­C|1qpki%FXP̽*GSoނUNgqMgʫHr?,?V Dּ. K*s +#kk >Z"#K%Zobӟ[(SwljJl>NF,8vQY_N̍watxc TE(&~;UW A+e>;f?6wn9DݿkOAHꋧ"K]Em6 B7$?wzeanS x.6WoI3c7a`T+:o3Ovv7;iNː<bb_5;+HJ_Llm^T5%̄V ͦRczwN"Ln鵻-˜vNܖ΀s1e*Qqnh7ǜX̔n=gdk m.:p\jtt+"Gzr֡Y'>X)/rh2S+Q&[i%0y WeéK^8~O ީF•^gp]fzNUsUS0Ʊ{⪰@ů}@ڙMa~N֋ؕoue#,@ӥqqXOcW˗nV;=Ú_O>_wGS\efK_ˠ $uvO:YjS ;p9㠍 Rk8V%BμW z^O 4*Z~ `~%g`3?%`g_x$P|| wB$}Ur¢6LqE厂1/AmGl@+5'c^)ep'a~o P#kzm`h*HbҴqt =TR A!>@Uo-٩ '^~VH{Bd ??oؐf##VL]$)IzGކÂ.fP eS&-zbkn.[FrC/l^a9Z4|:}7{ymZm7(OkqDsᆅ+O ~6ECXݯ?Jd\ptV")Hf/:#k_].4bU_aE/)=s;?ҝƍYkL(v]J/U2 {۟|a+QB$}ʭʝ6Ɇ[kUA(S' )sM@ؔD5TomRNg`lA:__W.jS4jmW:R#@R5XE7L2@Ӄ8xܰ+eM]2qa @۶o9p3p3~ߋ3Dh wo}VhIl SV]4kmKNZX!oR\- "a%-[{; Dn{fiyÆYl $bL~]"yZpZ)E7^񜌉/0RY+ʎtr\ZQG?&}zϟ@ǧTO8m,tSݛ6i>2 Y7 [{nbmRg_\R&N-'1B[=200?;걷!q3)o}H7'N<eL*=9Aa(Ͷo+)Ls'K(t@zگ>AQyfCǿ4;oS0os t^K ҊQuZ(>^>Eu)IPifSa<ױW>sop(R[P\by<px]]m~3,ZdqDhh \-@idXyxLS\,C oqL.;D .b;W!-;ɳ;WJ0y+?}f{ ʁx,sW_@yoXuײٶtf ρRp<ڟ$@zZ:.[MW4m4PQvMH'zz@vZ׽\j4 ;wJS}&t)l59qz8$vMQh{mo2LD_^R WfrG`&9F$SϴD=(:JB+yG[m2n<7;pqA!B663gHj i[ _V;fv->:6/{ /8`tPo$c RXߵu^P:*ۖI Q! n~/ M8=5kYA-[k9,97Zi&O8pRo%r^W.a]m/ ˈ?&ꊷg)<Į&d$t}պ2Bb{<$);OYyYRҿdTmNY K܂=!9D#ksc2kL~C*iv ة#Ik RۡsE]xPfdͤh[𶎦k !Z2؈qrzÊEX̅OнS%W.Ɩj90[up ; $ U@An@S,=5HlŮ#v 0ʴc ,zE"mc8pWesq .!O19a[X2<\]W+G{X>dbzRpikv?{K{i\zebc׃{DwཱིA2f.Y@s $,NW\pq8*m'  ;&`-=8T7Qk@NI\> =gyM<݂x,T8ߩi4eZtyoyhbbw:1)<| Lf*aD".GkY"<\ZKmy>U(=AI_,_(aidBhH;kXO!6VWyѭta(8h]ξBidYsseqUl]x]r$|'Q- X2  ߶HQ7b~Ζ%?bjM 0²]U\ p^Y\+-:Dw;6]9 2ze(B/ F%To$nQ$'gv yݷ+P Yw [}^DXRU0ޭ,b@nLɃHJ_aSrn"i`ڍVE$[6fa)Tzp'NPe)8W#vjC> ̈Mb`dA?pk]0 Hp%n wXrlk0c|G r0IKQy܆,,e8R'70K&,o KewXTpnx[0FUދ89ʴxk4'5F&tWa'?X't=|3`mR(krkxd؆$k}_W1Xa5x5gNӔQogEu,2O`ˈCh|#F[ ,6,?z l~Suu ` 6!MMA/:ؿ/u1+g8]GFʭ9?dEtKUp2CWGƒgBav>MeGm{K8mb4 Y$dT@Q3/6vp?hy΋ؖ/ f'e$ 7w{?{0[yԭ-e?z=.QCAѲ.u\(߅ B8YFhdWY~І۲ $-hh̓n#)U\&!}zpV.m=uk`p2ZT^g\g=TC0a}k0H'uv)wE tjSZs:|\۷b@"~ނ'uP] U+c;0̑lrucK(1i;`vX1FUɋ4C@N0=H8 "-o{vBeCڃ8ϹKt ڇ|vfBtXpYZ4D7ޞ gecIw67Y>Ҕ$[.L 8~Ma7D UxA{Rc.tXq^7L]z$ љ@hQKONU)s, }[̸-b|hfRK2b.{bś.l\uu9a?r\C44в/YiM" PvTR \(5&-t//z L߇V'K3Hvy nLy@~Gٕ8Ԧ) ?Yzm$szo"o^͠ Y⢎EPSF܄l_1sL9aFQele~ d.Xu/%  i)CEn-qnvM"uL p.DsŽ]!}n˦0|측aaQ6p1*@3Ү;}7S߁LY#%fw?ËںpѶmJ9)Ô a6';ɮ,8l9W? NvpD'I;^AQmػM1|7R?6egh@Jշ! Н.J&;b_9`PmkY|No\Szi,6;tf B`0魱G55p5oN[8k^NإOgq^Jzr(Mmyv|[ih>azʽYI0_yʩ9cmfE}c_kfzS9pؒ VԀ$|w5B>Zh{!;, 4! g.W>.Yz.lS'6S! JWiѭ(RG)ʉ3M.UnJU 鏐]spjثtMrݜams6jk23"Kf# 37 jK~G*CW:t 9nc׃ QuԞ&h|_`ZKJx N:Jcpy-t ό:o[%8! ,PG:rNO>`+ƻ0Ν9oح+i;ݒtdϬv7t^Ʌ.\ws@ƨ<Ues%݃uW&z<Ȩ UGk`灹WO\ٸ#,8 ji S78y;1n"M,iX$:ĸiwMWO}r q ,pP'd`<E:4.b/$e'oaxUH/?6 ,<ԥJJaRyo8F_+\gg&1zi|ۆ]_oݖ ǒL~'};9$u~+g<6 Zt`yl(qˎKQg{¾P`O& Epu &l,\ۏ0yD0!XI$Ǿ7R{u(.FCn|(oMrh阚cs[}9l{{> o|+:vss^ݎp䶱p}=/c{ "<&~.⼀UTwgP3n3cAϽ S'qrl$P^q=H5iٻ|=p͸,#72(|ͮ ʡ8dqJ[i=ZA_zK*@ryDC0sZ s߹8ѼUY0A9;K`:B0r^snHc\~|XZ58=˶㸺H[) o $YI:F 7hqBz=/p: 9g`'ܦR! zť5w9|q~w qggYvf|FL.UI.̀<n[g=. K\Keєicc*r_0o9=츯`_"4f^s˹ -u}]dR힎3t}F]wÏǿ@+4R/~aB#3ÈD'_ NOFhy-E1y+P~:\pL2}W^ h1`{,>:8)>IwgA: fzi>! fEE1 qmNK|' #ˍYE33?bab*S bn}uaslv ʹeyө !&[=5fv>*]cn ^ 4mYIϟ'Bwk 7l`;~C\} yãCǣ+}.;;+?v!&I\1s(gGrzg/AhLKQ{6=9YQTI'ل Qm?67fLC_-ǓzݟAJH#l7;SۏKRZKj!;@[{WA7q7܈Gt03jI)8΄;iϋTpٕ0,KQ]SOg}w߱nH)v3vQHc%]Ek,]?`o) D.6Ci&j8&s\-u.>)H}ŀ3"q_~mnWRUXQ3]60ٵr8[E߄&/z}5EX@=-ip T-a]]"Axt+=9={BU_bSҨ4;9ۿ9IR[FIܗR_z'7$%X{!E<{Ty27_X$Bâ68+k|[3%tFw۟A"8ĺa#L#!D=WGq=zQOf#-SayizqC߀L8.'9{ _p@٬>DaZee֕2s~εټWqlGwhVo [oZ]66݉?Wy7p+\w_ȹSa-/V)UkA_{"E*tg5'Ow۬;h/^﷤ɂvD KZ2L>t3Kv?qV*@{f ?}ۛ!u p~FjPVk`Vxw>:[*\i F!4Iw?fjŭ=0[P]Zen~Ȓѫf:vޮp2r~/fkPa83{הpC'_Fon2/Eh9z?k@d1Va+s8HL^M)ߓA-,24WݚFJhSl\+,vq3٠{S}+V 8 _3RJ52ؾGV4ޏpw3[nrz0 益WME'gt{˗HlD5l??yq+"dcw8zBZ] B>m+_ִ=ͥ?0|<v&by2i6H%h(79qf @݀uQ0ass=/]k1pT>7x ibTRXm9I5κU1a--# fJK @^LXS2"-kV?:11胳ߜG]r;WQ7dJ w\'۝qOy@pc[8r ,.[ʎAߑpWoJ~/ A7ӗv Q|<]pRzn~k< sUG==Wx1mi3X¯ἴ:?9܄9g[\4} u:d>ubہ+={ϯ#I{ﱿΜL>ьEL:h[1g/K6y ሐXpkPJ=fw&t%3= EF8V$/KtWaNxnvv?'^ i2 _诹E-ͬ5, -l߯WngP~O ߡfo} #B`k'FxAzzy8l7>î[<q<=SSըm>+_pW93" ~2[[ݼ]`m٭/`0#lJj06OTU-aEGV,X8 ÿ}N"E!kgqg3uMN}0e -ahzY΍p0PlCSi[T,δ=߬ٛ#8X*+ ۅ5$ b]}Vw?v}ycg;ԯdP.g,Ny!4r[7+u'a`yK?PvR*P֛E t.7W߆&nKs7gX~2uŽf11v?U}nZ8rgKK~"м>6]q&.Kʭɸ`(wQ"ѠP1|K$==ާFFҵ@.nP b^\s tT$G`oWoD4cէ-#SpA砐'$6NڇaK甧yseATƮz8QhVJ9.KOa.hOTGxAY;V/CI "sFcmT¾#8G>S<33Uü5?pUТr=^R࿝D iWQjjc0d,mIeUfpJhT gƢZ of H90_ĿmF nB0q7$]tܓ]en"t W]u3OW3=u8CԳ{yYOۻøab+gEe';Ǟhګbf6]sx>i##QI^ހ6CFT)/ޔC</ތ^`;L ˝VF,vZY) QUO@FR2 )Wl۳H_/s{W9>31|‚ ƒǐPk&Wom*mY:38o3 ]ؔ+pW6[Dq0>R~"3ΗC^^IAe- 6}FDgZ|`Y~>uٓYrq?3hv-I$aPũ~"sA8Vg8& ;V`aN\7 Iz:唌D+=am VƯt2<\yV޸Ȼv647[,$3~}$qlyX92\G9F˾xba$B}Ѝoms>f|t֔y1:k&G⹏z Hwnqߦ 4.k0 \c} g̗۝I}оa\&IQ1*E:%}5p*?NSЩ;y l=AT.sПb4x 1_$Adܾ{HQAQFoӲ$_QR^â= ZQ^h{]qIWbS _yqdm'9z?8WՉD Q3˃2Y%S//cY Gpixz68SBFr+EncHh ք]c1YFwDνJ>M䗃6$Αnnb?@vgG܎|'OH/À ˫K[ /w\^72ܔO*>.I_GΞ1RzÈɢ1A>9Qڙ+)aLu-,L ) Z',ϗaY,n'|NbT_[#a<^:R5~qxn. SDQhߖu>,V,$, W$FLy2:X at\iz?# avNmF&<v{ U+nq1dQ=~-k*[Uh?Cꌮ՚&抋]8[AG?8Wf6.|+ЀEkpum{bp1KNa1X9'NR$q85;7y5rxpxP?L 4q;׿(c_8k-1)$fBKKKzLs1&~][yDwa})'Yp:Gfl]]EtYD-u0rYku΄yIYطrJn:cJװ5i2µCzB9,eRg<]5t|f#}6mS<9 =N] >B> 2/2+$=Y zCy}afz e9}\͖'a 9gXqS|h+id t48) MlXj@?o) TB ~\[:%pFkKOY Kvlb-7F _dFv7f/n^Wc9XakֿԼ I]|#+Q>DƐo^'Vx'U߰L5c`S„D36X&k}߾oVh>q]؏0wqZMBЅkf1 r6(0긂brc'gp~ܰ)^5m0ުy2Գ/GU⟢)[=MIQylwLĚ~kyd̟&Z-c g4aZ~@+6T@o}:y}t=7r: ztV9"$\<.v 7sjYGKXc* a@.k3v?Ha3dى铸QAN/{,o E'k`#nok" tF fV0cʭcoWGxz,cT}ٸw5iv{\}\>ZZۄf 􅭴6FCiʋVW8s"?ԍI~k:ePiDx>tpJ\͂{%Uy9/òguq nyG+V.6ܖt/}^L&e}&{vyAKb@R?q%I/KJ I}|"0K>_E+A?DcbpØG/p(|.; Wiᓃt>=n 2é㇎6Bkž;+b(?vA,B\됒X㻊`ϰzz[X\5@2B ꏢxK6>IJC.aC&|[v<{fFqq^j%-<'p[{񷴚 H3Aw3E>q9-\ Šob4aD<Q+BVT]{pVSS? 3?e$P\ TmgqG@jq{~JL 0KUϧn#֙pޛaξkéacQL%T$S#e MR"dP2!,:ycv,^{}͞z",g`={𲿂Y߈FcCiJx/$"|5}E.*.+lH~k+ љğg á疾ұ]eB;!Ԋ}>Q׼=RluG^혐JoXQ̛m1 ppGlR_qbiiQ⫅"7Es4~z* mtRԷYX4.5r9K:5E"QP{5.&GCgRZ9 FE=./<6!v'&a:XhQ{#{IBk8#lz;>߯=,Ѐ-qBCa/!6%9JF %%(b 3[HZ`~V3.u4h@>3?eF[މœo%73L$%?φcsey+/7a5&=~т1RZS2:ק.lH;otF]eez0;$XqWcalY]r=R|9l׺UOE\HPO-2i ܯm琛8ma|( Gb5g6 C||WI.mSe ぴr`] 4?1o| ^U^Ʈn?&eZ Έ9ڦ#Uǚ;oir]I ]WB](wҼ3g*έA?o'ڋPw44f%&()ȟ% [p͗-{q xrꤿryg!.KU]+U톟~vs8BsPbEФɤ?KkɟM+ IyWjp^:ӇF3vaQ`bT OJdBqyaudxg8c]Wݺ#@5nRv?N* Mx]Am-@"jRVpD2'ei l+~T{Y5y] -mXr|0Ar0wEJ(`ah TĜ/1P4&X0m3 nBOkuCdLY4<滁O/{ìh3iWlrs/χ._!;vwjZ+Zt}k/r }uabDF,.p:o|? [هY=?8mvMc]}b|P#Cvc̻¹#8*N1Ĺ n/VWm7x`B% 4.k0 9'S>Qh AIKFFi3,$Cl[Я.[æ^݋a߃XhkX:~uƭ~#LD0w9Njkz=DH6ٚ5O%tj-,V6Kcrޖs,=%Ɗhz5^aɘsu?)u iI$\E *A~_jkJ-4 8g z{|סC*(ysWP{wMȁEx3`ZCp>X}cnv?:]_|s^Q/㒃觗SkZP)kzuLWc?ɞK+LfY;~%TG,'2H[8pGEj[FÒUq!N/~Z͎RG"d Jly78<-x"i~HZU Z8kYȃFɟopC'\&~z-{1kPPU13S?o{}r z@&ՔXC#PA3asj~ɾca6e8lْ(z7XN3"9]p6&Ȝ]a 0ad*%}zTBeva.uU5r/ eř>G8r62UNTr.~l׏sB<} B>L._! ~;aQv~L*{S9Wg×= Ta.v >vL׉b/kl-Js _MNEzmHI6aU'tw`FʆS{1tz* UÛmq|;h4ΪE&c Kq8$: ҥ팁ȟA sD T}ۑ+O2Zs wQ${ u%:*"17\.μ.5vŸ1{qJr 1֍OPǺZz<]{of'5#`ȝ>_x̒Ayy߮s'cac@P :[aGSZq[͟q=ҕW=|3U 2nI3D,)>jyepƵG"Sʶq3vew9!V_+xg;>ѪfL:-$ ~ٿ2a^!{5Y̻4\X[qKqjAFvh׻u._Xy)w쳴ʲpHٺ^M@.K&D>ƙ NܣPޭru[@1yo= 0Np zrTaJN#f?ME:$&N zQ8]gG҈ܸI8-psr&wEi?'~$P}KcE:+Fza ]^10m)T;|f5GE[{TrT5Q?]&ٛaF=zH$V]Go@MwKUPXWzE&%*0΂  ivާklQf&j+9 װEqrlKKR\kmrsm{ZznӹB* E pm;]&ʿZUGbS.at{Y]E}OCpXE`vnsF[ξ+ }M^š9v 7NonWԑHAЌ!,}եNk]SvGt)v9WwBۋ%Nr[U*"_cgx.œpH ۋ d>ȹX"SE=Hҝj3c3;pVywtU9i{v\V.>;#yid;+뜀:7X+BR{[&vXD!v&~a[E?#֪օ;P@+ /~=pd^;YGM,vGdXW zHj@RaTq?sU 'lbPRLB?cBNf4V,8[/*S̾#\ +<iHi+/IEͯDɜʟw[q$mQW=)#)OuVY$' r0wr?x~s0vƋb8>sC}L3/C$󩧏`jO k9ao7I8'~HN*̃iG5cէdR}diyg-kQ`iab.a^г&PDSTH~IBr@T|Zɥ RݗSELEqSTey vzJcKW) wcZ +w=;d%h3ƾLJ0?eSwVA/sݱgHb&L='z`0 uZ2mj4B÷FnpF_s ]8CIrdh{v&='8VG6|7L .||_ڟިe苍N{FoյĚوMgzAvCu[;(…s2.Or_( ƹ]zj :?W$X/,T\ g(b)J~7bW8;T@qٗj uk/ ѡWڴ7 h|pH` [> OWꩂ*ɧ^o'FYMR%oMd3!!jy{HR )<8KaCӪ`o+qDxpQdpnӿK[{ulz]u(T478==TS= vn*}E/O".pUiP:$+5E[`W}^l I2B5h{HXW3yp~sH,#Ϫ\k0)r =~u0|J#YGfzy+"8̧,$?ЭRFqrb"'jl3ͽGeA>˔^*h6Qw+o5I=z<6{3M֐hnOv3?"*XǺUiVlJ~kk{r}d}x[.Z 3"^l #\nQSCDɮ'0*@?XBO!6U2: 8Mʄxko]?vl;xfgQD˳H:v j" B> (%+gCϟ/0%eXU|5ؓ a>*k(;5UXl70i!-ZE7 N^;hsTލo l7_*&7Ġ@KfLh5:sD{tduBX>oQJ?m{#>/dɚN;SdomO}3M<'õ+^ga,5%$)8mp'r$\HNn'¬Hv ca. Pw崍 ru|UpŎ)\?asM.nrLquWQ|PdZwޮ_wӅ&/yW##wןٲL/ؑ䟩Շ`Lէ7_0VI ?yB>1uҫ-P=8C;q٨jY)錈h7΋eZ~>نCFdֹ(\{aU?*tNvwSh5l%J]earT̥FL.0 _ZNsÇSF}X(rӕW{h"022$4_LÑ#Zԋ*8fjc-rF{pGG:sꀕn;[zCzsp)lY\EÚ0 b 3E}}kR^p*Glp&b]GBb薻שG rE=4%Vo-7Z5Jm>]7WSE_?Ȼ{ l(n۶l Ss0RG(Ke_ qP:cԛ=5LECw*6U<~:-6 INۄLaw6GϊyCDrހ$M圐;Qo E9&(2XiBΡYũESLv8w=*]:_@ԥס2!p]pu(ƤRz#bK7FƬ˨Ub R imιq`۹CޯݙQkEO,Bč- dfF=S?`^Ճ8eYhsmb#tCh D+G}mx/\.:ZO?^]ZCj`XVN hq֥Lܐ}.>0sY3rBj,udC,>}6Qw] 3"7SwsAEzH;뤸` gⳫ&d1?z3 1:vC=m0,{*7͍5H#xƮmYyFou´}*IȔ%4DƸ|<Зs WR>}*} xrΈ~^} |{h?YֽVӶŅ8sޏ,:$ BQ+`XА%Fߊi7߽p#2 ۵ZnZ猪Nϡ8!hnѩ$aƖ sm%h`R$3õ#MJzr|5X}D%_ f ܖScdmR tR;,M)>nI'z|R9۠} bi&OsV-kT%`VQС,9B>ml{p68Bf8l`7siAkS 6nyK /[8N8xN"w!ukcqa2}xefae5g԰ү45/'`J^> #Cw<(+wx{puWd\|Yf.&qIwFZc_)<|{Wqyzd) R^M[TK$~a  \?z"=p!t :47 W;s0BHp DJ M<4+Xˁ M.L=Z_db\҄ }#:A& Gp~DRgxKj&$19D&|2 qZ@}KIC{mxL^U)#ojf1 ߛQ: @ y\/;/jBFeV]$-qLHX-!s+M{U㟾^q5aJL6)'\>NK k04R-"v$7o<8Eキ Fmy$~eY O}qksar+E$ qi_0l k7/`MjK ]>Y0%gy]~#k[qr7- {7xBG7ަ<;YQctt6ɁEo/d8_4oe[_ "> 5%H8`-;=jhR)A-Z+Mn6~=.Z`ZdDY|fP. A4`~o?gP#Mdsͱ]da&\G.mKH{6@}Ą7 |/jMANV~tz.! ;=2`cQxV.~L@OH>\~QR[-S=^CWK DWd?ZΊvTm]28S8Wox8fn HiFUW1%v]d&O~T/5cؙYi6t@sCRtLy4̅Ӯ.@ *X9VӟoUbl&wcc|w.cC˵8pZz?;P;Tcqfz[SPW|A]譻''"%,+Ě5T^6RK:U8^bSw\M̕78};;`5{MUZLjlYQ 0aV8FC\|>yO;vܰy1f1P(Rk/K +處̶$yNcځ4 .ΜZ'WL`ɕKLy uGY`jT7 o 29W#4Ypi8qwg*l[-Ab .J3^"DG`ot=蒈;+A:!oq]-о)_m*ڄeu;- <õ\zx{C~HSZ !XB߹-t\;WEԹ-ս07v|)ւ_8uně۴n*jCaC_!Ojhǭmu?wCR'(GFx = 7ϴA(yw@<(/i}G2GGBlScJ`uq -?laɱwsFt]?F->1<bl|}W\qFΥ>v[-IY؝Z>h&C`K9HŵQ8r=|/# vbIGd~Nzl\BOmq;4z..`;g;c^N'8rc{Rʰ{SXZ01Cu[B2Wɶ2U3j ~!+J聭s\pN-Bo<Չ'WcbN!t8hC][w!-oa'jg汿~z.wU 1B{NcepW)c<9$~|660vt2LX})aco`AO-6QƅWoyF8cLqk\F[u 0i,},oH4ZKuOGY)]WTSvCq~+fH[ ,=P*?v<1t7fN3n}Հ@S``qCT0g+&4&bo4p5P[\5O?ɻmC]w4'~}'꠯rΨEBim)BO%O`\{FHJ }`{W\19L 0bb)}{O`cq)y;`S@. {,ey`vYg%Jpv/c}L?,DHˁy^<x [a[i3YT$-Gp*Ӣ@(.}i{c6-H{;e, K{,Qn!d`+8kr(&<<}{ktyflDp4M>$IFRR'> o֘qHG:]L۵π]W6(Ksaq#}dyր=7g |Y:͑9*joq7Gj-ծWث%hž@>}ƹPZ't )_y2G4Tٱ\R L䘑*6{pT KpF[)PeD#?KF;K*L?9"r%.; FWgfgaivQVJRHŅIY"%Q(Cpbƽ͗K1vw-{]fo\H[EΕR^ar[l0q9%KT税hz@9u˼':l.ƹˇprE86ZBh9Gˉ\sIj7̖v}Zɷӟm+Y=Gxc m7#o@K*p}e*@7;jv{amKE`8륲l,L_8L_e 8wʵE5 S1cs~ð8Oc`OGƎyOȱn#t ~vR6_R 5?8kw^Ow\V:i:qW-a"Vny7$r?SI'C--N~̷ :+!{_ 4͞1SШ~:Q6;No- < hn"Ļ~Q)S,q Z{֏M_ r*\60]]hKGW"gMF̚=ɻ|Q*PغϡP5V!} I)erbpM{%.$j,ǔw4HZ{ZܠRz3: wr~= e2o{bQ$\Ⳏ+/*Cte&-VqJ*lK'hjcY@?(\69d8s%?;W|h77m\{ $0NXÎtjXMؼE=:Sboy<$h(u5S$իD _?`Bh(Li@f>+pя>ٛYqcF^V{LC4h݇y b<'i#t<VΜ YƝ?]Dk4t >gjrG0YG !%킪{ 5f«bO0cmfշ xzGa7Gp2bK5Bqz.Sx7+8 ӻ$_ï[J-'lq4vFuda(_>^_4·UZ12ط5u_.0 /.5a󶽝qDZO8K cR$('gȩݮ5haIJ_fv](1V/ܕ~P nzC@-WAݫ{}A:,4v PÎW-83X6MHWxeI24:lC%b8sZX6Eߨ)Fw 2Br`0|6%]۸gbASA/?q&d?=8zzT_qE損]4-OkU\u'<ȸRL|2aQ ĩ)W\XW@1S?TaFti%\r&]1gǴ%kяVV%fXlty!*Wu}+iҦ\AGcEw >5OF^~ Q]ZP0r'g/ J= ېph_L+(F;4Êؼ3&&xϨ-U%tW9IAyl;(R3X~Ñm|Je)kf#cKշbC4Ԛ>˼$ Eu@6'Si:ArG@۷TE,CE(,Eq/GC6ů\yuY`5Y2p:G$.2dG ?KyVzb'¾LڞHZ= zw<K,|;wH=J|h-RFһ3V 6m 6T)VqlBP(V?ڱa89k*:% O@+Mo>E"Fhd5e'ERg+l%+㓡am )YޓyF3Lqg6{Dciڕ>,Bc2b]F:tXWWqG[/U?O퉕<٠o(@p Iׂe˶2jHf^ˍF,'iw@-$Q[M8ݑFʹ-+;?Ղ)(v?a3{Fc|Q 4/b~AH)68`6| PPmoqn1yW:h1,15KI”cI!cܯwLST+iCP$t5<؅Kʒ=8mZ<;JGU] J˷Usv"iF;W T| ,S*c}PuϦ@!rƋbD+BjVRi7њǶ/_5` E/"ص \TTf>\:}9-%eQH̹Oerv=[* Kj(S&h1=f8UAu&WLJ,"ۮᯭQ4Xj`{vƺ2C<z\pk'4ン2K#&#`w8uض5q؜P(Be&p>S_b>y1}!tᲷF~WLoKO [Ē-L`p֞u F'1M8#|5#A*bG=?C3ٗyT%Ӥ&9<}L`dy5njW cÛo6rCK ڱ32$V\%wka&u׷ dS {m|L{s݌ ;l%Oā/SVW 'XʻS^c 3ǒCC_FI8")qܝ'=q|=wq7-=㩯|giaśd1E1 lZs8.ZE ϕԞB9u9(|Jgۨs5T7()p9Rjc*=`*! 4+r 8V=n²Vedm|%YU o $%%/Gs<˟垛Y deIq_p.$)$fڒ%68"lcӑP?dqҖ} X5 +7t'AUjFy`n{ÛzYM27ٿsύ~S~WcK4IC#5Ag*!} 7ͭ33=h k@-alg5ŁWr\ۄVd}6Iyֱ~siBwYXٖF%>${mѐ\-iBf5;ł39%P^-;zA8cK עi %,,鞷(/T6|F{ ԫ$ j<Մi{qBHA-( 5a}<`Ќ`D5^Mkl ;켫{d%>88;1c>>ّeؕaɑo8`("nMr5rSKnK)w'H_ 0yE)6ڝW3 _OBa^jO {8Ж/iD[5ZXh!sICBj|ʼn(?aڪ.lwH­?eBmȴH>Ll=+k_Žę3/|Mܘ>3toN +á/;#PF>:O vQ "i{lpN'QW$xW ~SV6L\/+A_?1R9~3Xܸ "n?p9^YU,eQŋs?Yvy[phfX8m νT4텤¡ͷ.WHp>`m!H~[@5Pn~3Wo<`bCy?67dg!p[M$wD :"I>K7-,~R~pܟo̢ џr%Xcg>F[ENLąP,w`LoNg,܋G E♠w誓ar -e/';`/s$2,\|r- tn1NK+m~Og&_뛮ak8kM"&ްbeOKp%\ͳW*E̞v,ɼY>O\ }Y yz@i9f_@cusڄ Ʃ;1СnNR}!+٤3}='.nqpJW"~LqܰG7TUUKη Cv.`>qxkE?XgKXDcayv 8VWt.p/o\p%%V)ɺl_cNgAж=00y_IwN"%=woAζ(e ;(ݍSQF֓4;tXOkxv0?D1]H-kmip F>w$aʐIA̾8ؒh\PÇ}2>3$W{m.>Tz* nqWT0]nu.Z^Ygaw8ՌJHݑ3c /=+.FyPzuO w=y~rҷE+C ͇t9:>l]Ǵ .`L&j)L}q-Y0h>M.I5!9=L8bv25x]O]x?ö_ы}Ɵ9WSIl߾9[(Qb{b |8}䆎_h/= SVSŅx,~a꿤rL4GMl"rGl RO0xl~\OE[zHUW%#Gy ŽGAiT >6d:^6:~^oآzyil73;w nj(baxk )F(/;oL>\n?m<+Gus N{g䡡9Y*\wpL`xlHۢz 8pl"^?@7-ߗ;K ԩFX+f.aF䠼r :b/QSoYyDM7p~{l~;Mڒ)xƚb^#"oa.RіJyab͉@""Sm_"XmjG.[0P9yC &xÒȸ/4ڭyCװJH&KP,t0w9elܮCۦw497r8=`z~d|Lpo/`jˌb-O˄2arԃt<#uN}>e2o8nk=㇁HwhВVq?|Obhio47njF˷e Heou_?~u?w߿/'{c?r8owGgqyOqǸo_u=;-.c;}]p?y7Gd?c__1os.s߿yo#o㼿ħKq?u-8?͛zh?Oy_~;;_wn￳Ok{YMIglmnet/data/PoissonExample.RData0000644000176200001440000022721212400076655016347 0ustar liggesusersw<m#Ef0JZ[!eJFє"$Eҷ;2εڛ{k?{q^Eu&ttt tGͷL z:&:>n/E/dQnr~=COrΨ" ZU0;̈WkzTY9}lݹe=ɟȘ=pdvcOۯq.mw({2!.4%ǔX|@j$F&2>Snz˚aX}ZQl O68CA" _>uH rf]7S=?gce +\+65XFavVߐ |$?(A"){lwXΡLsBW$'|l;B셐EI~ }.Gi@M,(y =|i!J$. ݟK݇Vs!3H zՅ$N-VDCiPP9k7y]37H) ?f =siuOaGnqԝpakErF:4|, ޡbs)-WRQ> Xb<ìPR;ס}Hv ;m f:Dt~iMǃ= w %}qΞRɢ8o"wWf[-vyGk ٺ&cLE%t79wtW`]m#3ck#6\q6}L~eξN1MVK6q:+l O'GIiQ^um0u=goLUuB|lb lŕ+݆V Cg?{D4q = 0r-YjR^?`F]꫷;1o. /L`30RVG%S0R1A?{ WEW4hj|RMCY/!0-s..U}!g6.Ї! fO fa= <YYk \sm/YeF6߼ `| tP&GoBNc0'Q$kv=e qcpP뭟u~C 1>XBHkhq~s[;X9l5֨ xMtMl\ HöA_@ c̿899Ȱ}bcN  v#|p Hl;d E.QCRۡtJ؃Bsa#= _yvnAݓi2zjV0gy|sN`];\= ==ZS41-h WîD;n&z2vNw!3ts(G&Cr̴2vV.e;.7zu#'fal61uK;vxK@Kq6`9Ra sCro8gCڙ 3|L0ZjRm|B6qG,:4""S?9G@oPǐ})^8=XMA Z%%-m05$$Q;` MC'"`\̩<+Ho3S[ǡ 2R|gyuadSj &\/ͻ!y38|sUm.|CCGav:Gm\9ss!;c֛/zS_/#Oaو-0yܕ:8RoW3pK#G.o\_7&8>{VVnr,OW+{qPԧ(~\ЉC,P=c Jǡm o=QH\9gzDX:9s$V4<9-|Ұ9U("ј }={|XױgM3 e /a}uY/b PmŽ5@vx-År`Y[oHɹ:AD\Zz`_7VXXu'OmNxg/mۊKW_ja (@;.Jz&IFYAa8{6>R3Rx~/RɩPX\闦 r޽>QhP۞^,8X8ۻ0Q l^399]Iy ҍeO; G6NH X$ cUJc%sVi|磊<vw-ɡ nYUfaŠQ']Ԩ9 4tk]DZqhRBzW”83kX S'A['&/N6;飸YGu냿Ǚrvju߷ _RSW5#QLrw2 Ⱦr6pvr3%8~ yKU3aaT16J>o|sLVvO%d݄)z3p6>u?6ss,E&j#RQd=lMzj5 'J@_.wnmv(t% 5g yp^tAW]=Ю/(7}JֺDa1uY>#,nM=.\բp~7IɬYw/]Q|#fY9/+rUf>7zu`sSyFwOg[.Êf3}NtXe|}E$ ݺɱ.`z{ZNA5.8" ĢWZ Pc˻m`^*RmSfaO}؀|*S0kt8˳> DYfwZd 񯠇(+쇳| zYLSae*D}L K,Fj股+|ɛ@=e0 Mǥ:WpԸ,g%_~~vUs[kDpJ"΄!;b룭{_MdqdtmЯye]ppZ @£@ڵ˅BgZ&9$џ;VZ|Lw~ A$@I\}#ԪZ|#D*h&p/ Kv#2,L8CJk_1+Wz|h=~4wbVF5X]1|Ԯ*1AhLUP*Dh&2bu3-=ߖÏ4n|lM;ԛ6ס^/{[Ƿ?O l5 �*zxa=|TyH>Knna+7mH\LgUF&iTc ):l vo\8o-ቃ0t 6&@sB^ >٥ЊAaUk=N]R2=/I21WWHjPQEcfi xd://ΆmiB7F ue >5H,2 ~&nhZ.ff~CᅱV<$z v FVrrfgEXOO94F`|8suNߓ_!5yn1[~jDoS~elĨ[`?ca$kӓ~)38\);Llq%H֏1fuvz__ڐ0OZ-bf۞$4`  %NװyArŔQ}]O72:ccEդ%*n_ȒXLA#jfvT<3G+Ɖ'"ٯ &W?ü?OA TKsCC-[)F<.=\_?u8w4=SP7g6~c}aJ}"qEh07$ &YDd"T5,?#0M'0ᯒ?_K|^:j^%J3i۴9Rrf,@=zA^pqx^x. 6:*Ӆ G N'Y=gt&EfvM`+wb 2TU82o R&agj.}NY-q{^ S(/o[d̕s1A5Q%A]_'#o$j&r'=f R^Ae p՚/ nc1O)^>4dҝ^vIL=ɲ<_}*xd*{n>Z)sRg[tq$kTo׻|R=1=~Z 9d[ efuW9~o`٫_u8;1=C.^ۆ0[؃ %5o18k,~Z7Pƹu;w|2s?yɪ;+;мD̿Hddy9_ѼByİr 9γi<g |b}=n? LڽjG Ek8R iS''U8S ݍP. /L͔pDctqΜk=PN\1a?o>=VM2G``}/IejZ=.G{$ DZx\;P;|U+}0IZ],9Bk%R0%ݿP2={=G¼uCqދAH<>]8Lo8JFp%Q>BRZ2/o~(*u>2ac?uk8|O"o n}у$M7 FO @;ׯ0ҼR~g|^g`4\Fm t=6-\$4F,[~ngc,(g/MA Nқ=(m}͋3@nݗfuF^X]6QCM\Ɖ_\eYa2`Ft'{S.M>fG[#%J1띁k@ w;B;FN|d/[;;"9Z"„#=OFٱLPN9'Yd3qb[WO8pdy )~1.'l|Dv_^Mebމo79`vH:y_}*Q`zjYz=ۍ\ ew;%B_̏Ӱ"ڌ_&d햟<)3@$cf?4Xx+/o̶–@ y}?sCʫwY{8FὮx=H19P4^^m3H:x+2FG$!fo~њ]_?8|%?x;كK2T>ʾ Gz!6@))ߝ݌\aߧKHy.dor(/z4X3K7q݀ISNE_$l`&w:  =MӁ‡W\/=tn 1Yj zp[q<.s_ gMrx7y9Jл%Vgg zT=ڡI Ыb)ǷɅV)̗Z$U([̺l]:<N,|Z.q2~U40Ճ B]wk1m>x;&j8`22 @HS0I;f4S4! X// mwKV$Z<,dpNj>qLiCAة%(nz7d1ôE_7_CTH?Ƌ/daQEj]Er޶RulIoHަrox܇g'`(;l/mI{ ɯҵ05Y[z|RJ:IXiޔrtQ^ZfOW%BQS|V %taʑ<0]tu|v'u0BYJ=b?1CQ>Vw1S5;z+\o׽ƒqEf{]p@[UN moJG#!INp»- XR}X0=ŨHA_p 0.y BL6B*q*h$a3 +HLsp& < Gz8{m2pLv:SEO"XآȈktpY֗25#@\}AۼV!eMOVůw?+f/+oiҤaXμ {܁闔`ce2Ѳ8`>Im$"'+/0-aAtWX6=r{4L)(ʖ&7$qvܨ8`Fl8w7LjWYAGۑ.ɽy_f.Od0s}X E[O1%p~ġQMrĴ-JrX$fd܈ژ Jv!4:.!vTӽK=keofZv@˩ZyЩSf \fJd<ĬV0^dzR|,(Ak*.=#HvRҭw/db8q"* N@V]Bq XH2aId(*al$P_o4>Oh<&*J)>:>6vf]ooI8F&QuJ{|yls}P;tw߇&{24-[X9H~!g۩gH`w19}Rw~ ")5cRXkm OV Sٶx@tAJN2\TF_ޞ, `hy&(Avp{\]V^}O=~;k`nXZF&j]d`_aM3w+DLso#ℱ P'3<`HzFTnVXW) }b#DX{#4Y)m#<ulʿQ߼~76Р>We־AS? B?|Ey4&xo&Vc[w Ga1Ui22lҒԟ@,6|)ٸ3h{0}ޝsZݟ^E',!y\ˎBǦ&aRgV= `A7"?z0?Nx[xSߢ81ļG( }ՠ#Ŋq 1fz*VXem+2NMl'jѝ"D::k%RK/?&ҫa"ZXY˵_l <2v{sO9SmpK\(S>Vʃ%W.WCg:qy)KYN<J7ņ`s!)^\wk;bC-5lYζ'g51AZ!V]d1  ۈ g1-9}z|,?XB8PO9%ATS[0u5-BG|,vn>ߢcט8236N5Gߣ[w0`J H/?`¹EKDk*ʜ˟tJuRE%ő5 C]I a]_-fsęYeK|%/H%?]0;&=~!+}ׇ)I][s쾌] N_TÎUV˗8/ўe N7ڟ Kܟ Ǚ]mSe(,7)kp!6{f֠s،-vji4JIǠ=S%Wo  G-+~EԺ~qu}K./YJzFޓx6o6\Z- >a{0p[XǸ Bשo_¿ a!vпnm gK_(r6_aV=@6RF~ӫ_I¥'[ Lꘑ;t/}y^upZe\s-q%oaYF{Hq 1's8Iw?˶c?6F4#o^φpߺ u7LsZJ} Tw+tZX=w}g ,0cֈwzU0$Hq+\Z"T!!#r _M<2 v~oz`'5Vw7Bbh t=Jѧry0`i'4l{}׸\ijB ,Xm``|.}ʆg4Z >63[#'۪ÂB)^](~|Qw fTBSL)R P D].9 c$uKZ39B]WۛT]awMQpԄ`nr=6DçmzaNˡK,ekN)+$mNi\aMҎ=W ^\*z{'0oEJm{؁ AllV+阀|s909$g{2}f~ɯAn(Ut<S ^ 8H|==(v4F>W 81u0xFG..: FJؾ旣0!-%ECsrh PT֛^ _G-=q-s:,;"0C,u?%Bi'n=,1VvDžv{{GaTqC`n%Mœy NXǗff,b|w>ZL_1C_OFJayZ9lqv|$. \\lKLW'L8= 3^!᪯渶akj0Q} nR dt&>G 's(j5u7A?ѥHQY9zΌ</Z@ 22[`W0+<}$uWSVw`INHRQp/i+?j0~;x}z"Ep0kJ""FvETnS @: PGSq~y)uG(P? `EjfXuz[ Zu$ߧ(7pY`Zj#yI2ùևY8laWbn،:A!V)Pޔ@a hdlpyq+ì!^Y4WZ”r>sSd7s\Ή! $sBݮ'LHr" &8b#27./.1th\eH4_qIqc*Prgv@*g{Mą8Vgl սj!c8׈ d]gC^Yn |<}5CsX!mjJc[Χ7U]7$Nj@:^<[afC:Cڇ&#Ǽ4Jԧ0Pp@o: ̡x=Js/F-h\iL}lltBT`.*V ;U3a0=);Rj֦r҈E!96,--ܣq=Z3~7ÑDz㸸J&; 7pʼnFaHα(+] meFPהㆅFsq'A k-'r'eRUv-QS^{y(޼&rM߷bC SF3 Zf᷀mNVSEW?;t3VwAI3Aml)>Jᅥ11 _ ۨ5VY)rPul6L~&{g$Z#2:!==}dMטuqӛd%l_ODzaU.?)y%Œxw$d@A& >kasϑ۹S>6/{d@kc-߷("󃣷ٔa)ehk??sl$Xκ~ǙRi&!{-v|i/<9ֶEfaŵ\܎Ue٠{/7³8~1cB=ت> t \8r0%r6iSx [Jެ\!0G|K`TrSl:NȈ%`QW:9~ ɥŨu\-披2g)ᖅ@i ͼqF'&`.r5qͶTW,)}v!w@zd#G0䗏 lǾ_NahM_$XVyX".EUQGIeA;مX\a\O췘! 9ϐyyYh0+<#(8>M%T>m$=x8w #v +"0:dz}VNL߇az11h$M\y|q޶r9Vt=IY%:4!\xc'bz\32'4}#2f7" b#?%Wki6V\U^B"Θ/tݺ}G=cy{pSj%$ Vnz {1:^}j( ˅}%T;>s ڻkXW'N~=oH~>~X4'SPV':Zσ-w4 9sv5V|}.ޜJ DJG)iܠ\VGX3g#IRkP}HD:v+}kXN'i82q<=%&,w/;3a8fuȽ)TUn'PK$V-Tc&=q?pθ} G}CQخm~1P_g3lkuh#r{vC3`_4R>Rٿ\w8J OOIEj!Abݎ6.hNRj<309 ^6?isɗ $`3r 7x6{Ao)3,SYXIYNPec~I{' Z*~nܩfԶU9n71ܓovlSUDjOxDOئ$C'](vͶktKHO2ʊlDXbab}.Sf@8<:RJ]~87 du `-4=~łi{#⛋Igu 5M_Mboq_o'?$~jG3kO`_g$c,U66Lg ~1qTJ­`iݜ痟K!QEn+9=Psg o ( []!ҙw%Ev觗 ǎzPxrl {FT;[eZzwm̯'V4ekFmAٸ-MҦ }墆Q|^qB0\S/^+{_bmEQ뛸PVt7[Kaqܘ})bҁ{Z9׈-Tx_7Z1޴OMXeYmP oM{fqNyP{z 978a*\Q!ly~8|!\}~hV ea]J`ô.h0_qqŴ+RZS`>Pdu ~LQBzNJsa$; .wܮ\;rpAhU|:3oS"SH rO 坨 JbPcAs?"o6Ɇ}i%*y~ F/Ak!sfl[Ɛ[ozGz%PVV⃢^'8`RpRmQx;ÿ}($"ˣXsRB]wc܈Yt^8H BϨ< í;_Fy`A1z0 #$7=~M d-| W]`J]_mhcƥG9ӠgLĎ]0Rī'W`;f/7hKѹ7[]ПwJ#. LFIJK T-!fÃ80a%h#T /Hr%o^?ʞ.wU\oF /kegs8 *ઋm`xXU6dGtixcaH\sv?FΰC8ZU`uõm=`BVxN֜ˊ>,oz?6 mg!7p-|&48Or;cgKcRmE׆$-ٛ~8ףV#c%c (\: s߻{ <ӑ^6H}davdi\E_B=MBKXmwX4Pg G2“]^"8tm$<WM}t_Vn(v.ek/pxc^عU8d_t݂zf"£ؕE`М| v:fr(zضuU26b^ B7KiaLa9 H/o@M%pl)JWGg+Ʈᚋ6eƞ޺?}ۢD,-ߺw.<wC6]OTr` eF?v_֕v֗0؟* (;spLMѱ%0jUdz]ѿ{ dLe=:2,Kb ;] |rx9 j1k5z6 Η}L"yR8tsD"2dMlw)=E#6T>n}# D:cK'J7sfmЎǍcga07OB/ 0g";cp=]GwM<:,l|4S,!qH!6TL`Mg9,ػ@m\eG˪~8 ?k~,o'vxf#R8Rvz J B\u gsh[ 1E{s^V|nmo:P( )|x#,Glkq[uW`$I'!NX_a9I{l(9c='+ڎ+qB%M0pփc5E2UhwbH;b/i8Q]Z؀2_ ů.; mZW|G ybAA/FZݑ:p:BAccOI&Y(2-Lp]6a &?Z ,Usua6{]{JlAϡ sLS0 8!f(=lz,S7] lƉXh"e֒Cj⏒fXx 3ב .*< KLanq8W9A=Cz Sӡyw:dN$xkUC->.xAB)U<7.!mP2|SW [ۛY/Ha @+&|9{i0ږjbsHlMd[p9 x:y7@ޝf#ثR-+nV\ĉ=S@n>ִ[%ϯZzckʜ3%(2ks>c)&Op1OϫY]%@/鎰o$eQ2 juổ<5PȂ$vk GqDCVcD W$ K߮_A&if0/},u=޴w@q6K jgH;e@}j_ K1= GfJ}^S`=|; (58~7`E=VRwCW"'8S$U{5 M"A#tL7j_*/݇iFuܳhID%5e~ĵДRx3,N"Ub "F^L1ԵϺ2Ô WS9~qxl}kꖎ%J.8`ۻe JW@oC4/Vi5V5t"˦Az[8_X7l{ͨwNVu X`ΫΔ`qݓ]0{K*R.-C?քc\`],s) 3< 1Twډ!]EN#(TU8=>VaUR_gmK 2]XFݷ@-_z[#ܠ.v$|GOe0v2,s:^v9KH̩*A3S8VǪMjUO6T$.ŢV8\^nȎmx"_$a!IbOyPex~tlӥxܮNؾ92ķN31ž-CFgNG$ty<#yCuEX.IP`P_'/xf j{~q #Wf%zg34C>YJ^p/d1?ΔM1K"6;u–a/hÃ{ʿDFQ ̈ =(ByZ.e0ZuIyn]d%hu Rp抡ؠ,$'(zZ]{T&/AIrP^řwTWcvuFZ2M\酭ޝOALoaʮ[1y$Qe1wKN+t 7]ʨR-?qv T0}ޝAEB()H#U8NE%}QM{zX8Ba=rb?̮2]o+]xNvz(Oxim\vDIZcLw_0x\Zss| 8kTC>~;8km{^d^h[n!kzVK`U%UQpaj=uw8]H?hI`Cs)+{E1}P1!Vl̀[^[d1j)z?O-{vK`{ ^Rk{5xb粨^;x-mK)9\3mÖ)YhR*߾ B71vE1ߤR|!;m '_r㍅rS[ĭ@/{We~M-~ o6}ڙ޹M 3C7NM]`]'j>$3~TFp`fZBƽ0нX Ed/!~2c%ۀ\zIuymg{ATGnoьs;gV SxXԢ6m2:8bt ʿ-kl8~uGx&ԁT-]uN𫻋 ,fnCAĵ&Փ@zsbFVF/B _1PI]Hܭ[6F?pnD'O#5l`[ 7lklQ\gSBZMkpLC:W<]C#.Z]sǾ[3WHbO71d^3ݵrzAG0:];LRʺoAxkOEG>W.A{Q'80kE_Yʸzӛ; #f32`al;Bɟ'ikT=O:b)08&<e6RIΉ~ '"up̣)2>_LGMlL쏖!Z/ f ]{ [u)@Q y2Lɍb{#ٕP ݹXr_Quj8Aǡ븰iLhO?)`gyl J!y+XT~^W~*cdGL=ƼE/Z .хK_9Fy;vtBD4,p#(#͜mE1clׇtj 8ĒMs$ڛeQ2"Ӵ휫ao,R뾻bGpݩP*h۟Vp :loڟYg\ ^{\s~`O'WT:Ծ}~S*T͙rO2L5 1af , &&0͔_u7[WΛDc?vE ldA1T Ȓ&3{){KG>$8/z9},:X`&S+YhYʗBCOLlXԸ {9bUԟO-AcPQg0Ralϫ] Tqv2 YpꅘL㼎@υn0x C: JD70 jV<srW+-p߼.\yn/tA-ep>]nޕsI67®qܝ 8pӹ|,q`{[-??Lm*aQY:Ը;|#_ƞ`o D:-I`>5рIz-U=T:{¯}'Fqjew0Pr\XuXZ@Jf+7y{A&Jli(0\ԼɤLb?}:`:mr& L?C w5Vp40W^/.o}IhDZc*uJKmvC h򣷱;1P-R MYN5@wFk3엒%PFl&v9κJXY O "c;t%!؅ r^熩]8\Oİa5=W{Y kƇ΋|G| SQV&ul\0U">/UӰAe0ĺ&svcv .F?mדogÈ%'v!ɡwgىcfKۃ_ zuPzݻpn(g}1KPɬ\G`7D0+ ~ucyHh3=*P *lGw_W0 (*C2_0Fx}Z+ 4cnsj}joW 49#sJ|_Ҩa*$ dMo8ygȨJNۖ+ {I]&zz{2zwWb㯖́rP~4NR|#}r}/TtRWyzYQ3&r &B#oxlUOe06cpGS;E i|7î2c7 sYh8*`Vד)|j& i`Kf~!\+t.e@q878 4YZa޼歀W u,,V3]N4b!]sZ톁=BSc0f!>-7aECXպ=HCM†7m_#TcÚNH3-Pvc4I=Hb$ MWw/v;4a=]}Xb! z3m%)\֨P&A/\Wfu%#\0݃Z|[U*P K]m!|'UL(&dd~m}-SǯNq9flEY=Wd߻4a -0Bz7~)2 cL޻ *^P5UPE`t=Wڂ~&2O E^GhcJc,1Mf;[ 8&S7.=Cc>N7ABp+.9i[}:֋߫{p&DK\m%pcze0X-ZYbc_-5mp8:*μ 8JMٗ PݒzHk["Gt09p)wVRʻ\;`nGVebk\jUH v7:eiG&7|UAn O(|ES]Jrcu^ypkD/CױBd\m%*2՝t;X|I7=Ҥ0**|V @QH@֭ǘ`TIW" zJط7$MoNO'H1zзn/5u  uwzŸ 7tah׌I6v~]1\l i6//B٭/)A^b};۹Gx^;.끮b)LܛM/.bw)?nlɳTל2h4®74I'Ihh;8Za3Nߺ0񠷷Vb}˘XgНn&Xeۓt,NPgh | -ll(' 0dkH'f ph[}dŗ@px~H?Gҿ.rS2Ru/,u; a,r/s)'iARʅsۉiR_k_^EL%P7X vQ5MkRR׾!jW.C,M3ˆmrp["{Yb?P#%Uieu{(=rHN#afzث3]ƥsCavTj;(I38oz$c$>F ըR 62ϊW@A2K{}(9b? ,`奯 Mj&݇v/ɕEhzqgD<hbԁTp!y cf?Brx+ Jw .rOu cG Qd*`ְ+_&>epb ^!6cpqUQ3{& cE`^' i8C[4L%{j+ ^:y [mD&(\Ջp$W ig|.(Hܶ>{,?:{*ԡ90\*W[qd|[}ocGQ |/T^ǻo=7s;Icmo eú3JǾ#pRNmlf ,©T 3V&8'+Ke(%#8YPPv;G \=ʱcbYyx' ]u'g~-GeVHf𑳷G}Zq2p1/.-KV)flv d/ʘ GҮgK~ g]/%8sl,t4kv6Z*R%4ߛbwRd5sKĉsk-SnozWҴdT$@Rz5 =<vz zQX[\^i˕2NTaH!bTz :^}S]oJCnǩ'wp$깄?0tSy~\>-]tsi0mQx6P|lP<3tWt;6R_6esZ:OK}q: lޛ;$zaӷ>> H߷LY'Eo`#+&0Φ;-~E0K^~]q ݥ?KǮ@I3Ѭ8Z*gMWӀA%a.R:9kx6 J>)pckeɯ AJ>@r%Xd%/ 5 Ja!Vy.n|'6IEEfol8\IPOIL묱]y? .=~za{oa\8 _ϵϾ_Wpjo%ܣs3ɭL0z^ۜخ״^sDzΉ材+Hc =~ z\hQi [PDgPkO$su3NՐCgND D+^ J,*C+F%~If㐥-Wzfp-y V}FS[xd gSd`auEYHzٿK@y;ql$+5m Wañ|VDۦG<9 l>Şz] GMm]"2l1f<ܩ8niPQFQ hHEdEE!+HEYe Jd{puα?x}߯u=O+f^]o$`>CK-4ly9CIt'!$^4txX'Be0;VV ESq}-ؽ.XU?3]+0n.rw:갖';ύجDH_-Cw$ygCNkYHay3| |0hLNf㰨-{La6tWXb?eRqf+[`e}Aw&C._8\7l%}L#ipEcǕ4[G ;A=ZE OT{/Cs0jfˏIb2NMX==HzNT:Y=3ؘۤua&nC.Fr$,]>Em[8O>qryfΑ$};'Nq焱>90)j1;cʿ,&י KLdUt,0ƞGXֱܢOs6-YJ};F>B3Nz }pUW<e&=j'ӷ2nx'fΒaP$u# uų~ǫ }VyBeVuQ\Y֯JE,r8[h˟D;fܟ㜀^I+}2 :DYg$];n*>=WGB,#FH$2CQ@s~JV܅5CF@ux>d+[zĹ"xײpù!sJ)R5c/9Gz.2Sy]=hUcj7vQ]jqx3M>a7g 2DrWaa]s_2vKv˞=+\EW7T(j?ݝu{m͑#3C ҇in|; ]sKD` 6 kݍY |c˃,i^0C8[qjfǁv9)D$R{RsEhkQlN̟)V{J~ *Z FzɜoEAaEU L 9ʳ ݹ?lEjn`,{-ڭu7p V 0m?2~ s$=~C42;v^ 9 1?zuWgtETqƑ@ѡ$9]4pŎ!h%iIc;5w{m mzY-0*c*%] 8BAY@+m;_5֨:EoY8 {>RE;i qN֋ϰ=3 sױf1g`eΓ@?4u#5“Wy8[5=,E&넌@^$!HO/H`xUq\1XEĔMybj+C7T뮝,6{k%9EnyL?A:6o͓F絏Pr~N؋Tk-8&KCT@S 24spl^ l(oضmq1j=VzSm4@5-:n|YMkH}C=<ԗyW]t턌mnD26CsyoPa38.͈#9~mjU@9{2kc+nW@ɭGMlcH92 c$4Sw?% M2}fɅkШPRݰbWWy9ABM,k UJ1q@\X2,Hq߇ nm$ ytZ ֳNF! `^Y4!a ׆ҍNNH}Xbm󙌹z'&iժkdtUy, 4+s-8syfftg3 >ʹWmkbSaKZI.jc!s1A"_IiS$P{,vBKqxħ?~_OZy|;a(f\a~eL9ǩ|gK/d@շ"@OO-&C )C0=6SFf/ ' .-~N2i 8ni;&^'d9c>6C#{ 3.3شqc]9֟Hϙ0>6o Gŝm#2 9zCiPARYS'F1C8zLS,(!&Bs; S~020޽@oTUb!+1ҦP &p^z֬9wq~"ՉX@f$}*o~+ϒ"P9uuk:NJ^vĕ0ӫBNC^4`>#r ߟ~EZG\|W2)Er¶DŽd7̫ωc \{|oػ# =$@F'G O"u l$G^CO4x &A[Мi[X{PQvԬ;'mfe@Ͱ}HrGf~[NbyFH*(MmqV4{bHRu>"ˢ9p@9`:9x~Ap+ p(ήܕpR; XTfjv@9-%8Xj覶؝.ã`M!?/u(*&1'9z#?jk6a_W܉LkwXfTjĴw<>n,5{\0Q껃cFaX>\]d{KPbRX>X;Jrk,K%}o݌jEDZޝ`ӗ_nGK7sREQG_̏-$R9˦p*ui06jZ%?n ?:%21ܰv&`Ro ,ٚ_@ն:EGPT`du}7f_qU\'DT`mڏlc@m&2,=6\UU Ʊm\HQyIk;6,.\{u79A6$os [>< A1Wذf\U}X_))X04:ԽQX}vx| E_ ;;%Fŏ8,P;Ha2qqq)$yZ7DjL:| JLȿJi3⊔ߒB]Z=T`3y _2/[ "\5m6_Ń+]۝`A8L#[B"rVB=DNpC:qXKV8K٪ On8Z{"'] mH@\" KgU实E8[;IԻjd(_ȃ,T,]k4b7?U}ly)T.4 E9i (ůwV{$Z9n_u㍑9! ;Dݰ>>/y V?q1͓Xzȕw?ui5eyWXYT5O>rZI;hmXeϽ\:)4lb^tޚþ-ՏM)cgyE7f݂GgCoȴ^c?8|( >I^:X-hyKbIYP{pwfdTQq3{Y5n4z8Hn+Wfbo18},Љ1X=,铚F)0k]={#"KK?r,>~K{Y6! %B0LUx.wJk/M?awb|_!5:bGp]EWs+Le @߆$vd]37T5h a*Iu{JWYxP;JF`;ԫuXqbXS-/,Ŀw_On!JO-+Ӑ;mWGdH8􌎷tdm"8(#؉-,LZr]EPz7.%[h8@2\w A,^b2(/Pxy0{VдtbA| 7ŗ~9iU+10wRҔ+pB[uuA|&p _Y3T8u2GF=bxè"f|Ug7RK6-\qgVQ(s/7g@ɋ‰u8%|rtn܊A5 ? ޿OgaؽcPju}BaC=8qcm uWA;7@GݏҽؽKA Y[oVO|!eǑ||v,72OB ׋rq8_ ~4]ӻſAt}zׯL8R蚷[|0F6-qrso1$A /W;}H+|⊝ˬL<8yCJ U@pj%UN:&nɢѶu~J8$`kKi{2jCEq~#׻PUT;_r2|<9kv&!2z}z-S֠iW8,*Q ̫Nն`yĮf2x- 8&t߁kcX#qa6(ɋ٦=K;q&JeNt7^z!϶myPVmo^_| (aJ{88N1PfΓ Gѽ`5 %9.e#51:mx pta)>@4+k -:>A.=k8zOShPQs͒Cr8uFlJ`@7g 5Z61)جx1gFJYH>Rw7,WMMOva,/6>? e9M@CM%PA'ڽ N :=afq<^V͎"Og'[obj]iUIi*7#_>i|§К_Z:~JjƬ MTӸ5uۏ8fmnXyNyFTy u]x/+ixbѸui|;y0F4ôk((:"c頿/~NX. Q{+Tӈt1%}SK 4c'pZuQ̊]ݲxO`X*^ F"B'qc'ڷm ˓!p-8kьr;nٝU+J(8!T/vo} N? ӵ&c)fsM8a})zJ-)'8EqvUFp@I0ܹ_ Ceoe`ӿqD=!ul81"aEqꑱL'2_I3췸8X]ch?g^*]Ĝ/,6NbÀE™H.4S B~ ])3_ StWP1#^9}w}sq)^`CGrΌoW+޹~?ɻYvA~^#,mH3CN]JYo?|Y%lI|^(eH ܼxWȏ C={_v K9p2D}M8E_ ~аDv _n>% E9: + `J ]>ZgAhmF;Hfݍ+zm%kcQ8g.4/%KzϺ$A}˞*ù>@nvB ǍmN_q,jaaPPp)\;[b93'1>opٸ䜙-lTq:ԖqljFȤs݀\)ȊϷcc7iW*"[Dl/ ZS6.}QOjB\q=#G_>Y;Uwk3dfOVdǕ>aV;3b:޲ ^u+>L¹;CX!s'R Cvs|QsKfl`Utu ?}7i.\g-"| x{#6g2O ;c#Ӣd_9-d,׍]=p NjZv~ݽ 7sݜ oxJ}#H)tK>޵U<fh$|s6L"d1Yd=4Hg ?fuǼ 5* xorA-Q G)}moAFh9|A>hڥKh7|庿cr^?tfP?Hĉ}lQ>A"t> Q?)873"I }BA)&U)}-ɼ7ԤasGz%5RC_M6rNh3Fh*Kmr5g UDJ} &2^&Eht"Ϩ@rt8-e(*C%dy'7`QV>8rl +f 9m89'ؘQ |EN:)XC۳%;ez Ƒmqd8RGqjG@cIzS"JNhn9 |aB}m) RzPܷ܁6,|#к˫Y3+?<?,3,`'l OFLA[iV?hnrr m)m&94S` ÀXqZs7|b*@ş_%pXehc0إtwz).\shk? g4@Yę㿰k^Zz ^*ܡd =^W$N'z?0nK8Vj<4!Gx=Y*b *cr'gYakD0v ][>bգK\2ϡdX';}2{nReemHr~t.g;͵9RՑYJU{%L?U ~WSʹS)+0Ugmx''W`{#~O追(bn]rjk[ 4VՑqh =-fXK/ޞT =7=PƑW#,v3^'d;OO3u`P8)wsԺ`8kXxf #GW`h5`ߟJy&昂,D͚-C`sD4X 'C^g¡^\?4θh[ޭA3\SOK80^b7L$pD>@n5ÚWmI)+bE$vz~IK%pjP&=ӿի`#T 9-fl0{6-G ~+"F^mG]3H u }Us`2߾Swݓ$qI;W Y8&׼jlX@} Ն=ӥ@ }84prґC`>5Fd7j]Q,⫛BhGnp'hzDy2 Of&-@43Wz* &6rí* & _da*VuD6L[.4s;Եqƚ㲕RxN8J z uP|1 Aĵ&s;$g_]^Vυ8$,z}ګ'$m[SO6qSNy8\i* :zp}0cjC&u3C]CUtԖ |mye*qo*6}kV*Bm!mV nFB$ WWqFmgtY~qr֩|`*!qV{r{Rf[eaꢗ㵼zXFȏ '. \<'߯)9#]Dk.]{9D?*v@7{4<pPn׷Sr k[fjzM%`MK"̽URfNG*>`iXӿ '] [b|qeCggNNdZSkN10rYGgi5bs8?v)9zƩG[̑ZQ8%w VzºZJ-u[F8y>Q,]y7xFfvDfMBE-{qfKDNw辛@?O0 G^KLnk493Igq([P*p8ܤщt\O?vhe ەsqb\rٽO"j8閹EidjPԒԧ`w[* kb ڑyf' %6}`íkMxC ~(A{j\ĉ??{da* *:.d >WC@lKU\Ie, O mL~I1Ю!~idvqajJuqݶ:RHJfީ G^n ueL]ė%H|}}Z;WÜ݆ҁO0۞:e::0ʹwj>`;h X3aS3]v'lO}91kbw^ jm{ch(p<i 62(vAc-OwAVx;'S`-e7 B?V6jo_LpZpCUW-$-D=@>:&i3:xNS",8ęGdr ЊDco]u="1 FO\xγ xzI~зb8qo CW5~ɳP|8gƏd$tq(c#N>QbXMHE)S F O6ؔ Uoo3P8ӽ篃V#>?R`j ݍy+X+$҅f@YVuxc54XvhjǑZCV:#Ho2fhLC7\[ r<!oLaJ$,Q$PָWgm.Mq3yJSؑq],1y; } ^ r h0D' C>a Wk`Zr)R(Ib)It60}ϗ2اݫ'V`1g}[YNɇTY18$ i}تNx-zd<#Jdaǩ*H/$9kF8b@wS οݢ=ߏw;¥WRilAoHBgr@Nj56Xtc._b~0 LqDWÑdp>MC(d“SoV `e7m`򭋍yU)O++\)>J?&ځ?cS`NT /ۿWP4cG 6vmF*wJK.dOuǠ AW"S/zܣ}tB|\A0P.ݣS47mʹvG50$|胞K%zU0Ԭ3\R,pr4'm8yΉ?`ߑ82s~5# t05YaWgPXߔ7B3D q{%A=vKY5|#)Jq  HJ0膑e@ ePk0uhHۛbzzsD(GrJpn搅HհsaAjހʵ!ոx/;K~:k>W~F9/'n^ _Pp}0gDmG>Qê7j>Bl G8phw"L>Ư㊠zLO6X~FWW IoXęG^n5)#B@r,Y/^w>r8wEgo,?cvFV$ L/=+p|;Һt/jqB=X/g;VOg#vQl;/tcvsy4BJYHvYJfޱmSD]%y' 7Wقq(3U6Sg2;.a1Le}Ikc,L[ne$[aVÒ]VL/E'uˏvp-UzWr[i[E{Xܬ!-Ug*<dCeI{kM}eR0hBMwMcUa$Jrv@< k ɧkؿkqahQ9 6il-ƹkT^.Gk:qMu \ʼ#rD{@KLj;>uG&a&VN5_ s؝4uWMTb_L+a +r?z7Q?~VӉ¤~q*?KvհD Lp0DbHis:- >7( o?UTq"av}pcEqW^cÕ]!0dƸ)=d3aY #i;PLpFu;D`ƫrxOKӖ("k\8sps Gƨ~#Ue iY9_Bn|ǩD./0Y|mSĮD)<Yv# ?ē?{a$3;v9S̫$4;J`*:8 JMMk2rƈ!6KfT\ҞdӍ bMOr*툫%Ա|bN5O+7=ASn >&p_ĥ1'?CS2sY3'bq[Oq,f~!+ձ׫Ϊ7ކYK]N$0΄"Wpp $Gii0XZwLߧ^zCSWi'^nM]%;jocՑx.t[zFF81sq|vH9uG\CQxX 1% J?` .]ǚT.b9[!nz+5EgپC;۟T]JH ߏ3j|Z8$zn *Q ZG!$6Jvt6C$@E1A1R<+j ,6C=u%mvp Y,:-&f2ž@[V0vjl ,z\#4Dcqr \_g?8`[.8_A JU%{;iB¢S$& Psc RzDK}m0!Z}P NNG ɦ(ur31i Tk~n鬝aSN\\JZkѯۙ _P%aiM|(S}nNy3:EX\XWM x#_ e3ֱo?p6.8_[l Vl z"䳤yX=.5//&#._g3rfoape!iI@y}0!em(`1Sj$+H͹ұ]~$Q!)FjޯF}&26uQ&ҽzˠ$.Gavn 2u)_/YQw\%)1Dd9-OxRδ Zr蕴h?wOnѱgJfcA4Nru. YDlF0IaϚ:yA]hIy1&a?U7/Hi^0!$[f(E@%J~½G[>#ԍa*^َ _7¢3 z}w )vx==vdQS_trCAV"=zXL*-VmpGa.,wuB\\#zp烇g\`i-H [i:v0^ (ZVބc&lQڑyk+L%\4j 7 K Ǻ#.;9 ~F oKꃚ3tm%5hm6;y)y-6lcɉק'Ͱ6vh v>[CJUofC2$a"2XƇ@יy9y_a,>JFbⶤZD=zS 39 U_/"qY1Ƥج׽U[Ҧ%tbEG^8D3-wR]6/oe\bأ^ʼnC%1c_oG>U}o0Nu5oxpeXn @nt#wcg{ۿ2U%um7~OӥҩH/ U%a։H]J^k%0cL+hY-Wo׏ y7XS]PS\nDlo_2Enz*iA,\#+;DbSbLO}6rJ5H+o mZHȼZƉ'sΑ t>4eN'u^Գ}a&a~hͅ~D(܂)qAW#Yf?:W ӊx $Nﰝ;P` 6xD@5L8 >R58+<$Xă4 `c=X2™ڤ ?zx9|L;g!Q1#|/9bϘKhi 8vHjo8a{,rf 0~M096fq-*Yz}J@R=L66E]j.+-Zj~3ԫ-8<v)1+68vhG+<(8V-~"`aKx6gx¸,sC/-Am6'ѡhYrL;puWK0їɨr r~(?bQU'A:|@X1, v]OCwV>wGTH㳇wS/ a$e =t5fk~~ 5 \MOhy@ϘRŇp>9ȷՑC-AQx"k?b{f~N\+>P*sղ tL=!{OltK>A, \,úU6[1vŽ..cX"ah9Tnkȍ9 ׾}!k-8fJ:y^>:j< 0X'pfw\z`sqpΗE;v;ǧVl1qm\@;lIYzQM3PYdZwYMu N-Ü ׷{q\lѝM2j֛I*Hu.Zcm?ێD^3 ߏ.~)[ogT0(SiSmW$@@ XiMGäН[gSj$ 6`Cu0t0hL*yUOW, s<|Olw'~=p2WjE^iz'/pG9` F9R"I5)~{c 쯷I$;km)XˋƩgGBת+gWWH#?*>a7֛9sFL@rub (n#5;HssX`1ݒ T!Gͧ79I%[OYL2z[2JX~[C;=-&No$] m,~&׉[{٫gpX0gu\_l-{|%m5 2ԓv[lzc6-l/pmdƯR7aIz3LuPSW z)} oBW;zyO]uBzFա}in):iI44fJ#2e; ;ֆu9Q/t^Eq|Vx^ mk`{IXs P" /ⴍ.B,>loRBw1U%dǴ=gh}CTf]yя? e&oܖI5nSW["Dt9?qΐ]2^@2(6 p[V!at*t#ಸ`X"ۖd, GܚUqr%f60kzD.=)<@H2 tv"N6(8d]bl[:uAlڎ 3*x"'yh?w%Q /o^laҼp_O fw^CWe l/Evxm/Nmc-]KRZ9O:Tzq8WvBA$Ķf,SP^w^{r-38<5 \&u~ ԑN{Ҋk&CY"u.I۔հ0xy+NOj'YX&.vhtE2uޒ/.€٢, !Í}JmvvfD}4C{2>X_pYd";|v2rlC}jP6&ap,(z<EXc}oåpAQ|.c }Y v͞ =O `֎.&7fqpǨ)H~mnk>n| 9H5ZbsnmqTHUJC.T2Mrڮ8sn&Z<$]aS((jGܿ0Aу!cX60,.zFŮtC~ ^pMd3߁srqHf$nK+>h׶(/ %R{[ `eC@L~;]@+Od0*g2wC/0veqվ ZZ*O=mHDnH$Ƶ;u)VmulG;!Tg/'T]vcp88 UEgm=.L~l܃>PCVߴs}M'g݌tد OhOEE!m6)FapϹ .&#E6\O!*n{(ܣ,tt{.zu\?"#t_ eot{I<%\ko Oo%psp?R'KY`"KRR0_[saZU5@Z%Hjfh%NRU\p -~ssg1W\4=I3w?H˷+:L(s~Y@8W|"NPHrqJ//ϗZHԚ!ȉ}Y=˘FM)Ů]{3i1ƚ#dpݡs_\lT|_ 6^<\ 1\,} *?qHD V*||IṯŹ[ pI}X~{0l 8`< &K˳phXI8;ʴΜ^IX3QȮC>")\N]xEvښB̷ ARrwV+׽Q},S< ܔC&m_K{ "aИG39nt;X㰖^5~[Stu#Zr6=u@T3NpۓDoo*P[Dʻ6 S0aqCt0N[5 B?fb t O5R_B],5c@u\$EWSmEz DWZWʁo)^Gm[b9?"z^񆴨|cOpcWҗ<*Y33h{p0+/ Dcݿ a\n~ZBsA}7qrCMWf6RTAMcz~V=~;RssxlD쇖^`s ĶSm{Mdjiiڕb`ѥ5Kޒi]"u.KiOz*ϱr38ecaL46?B_iXMz!ڷVܿNzs_µ3`C󂪩vpʹ=f)d%r`T7ȗRm?VrtoZu/]zjlFf.?\+'g ׋`r%u}4δ|$=|NٮCN4#%'֑tRXj+xn9|4kLn ĸy'maVCV_dȫ}'V͒aГ*c> /V1or0 ǖf O6Otvn;!=snz/mw\q~[6Y~](W)5\$vxE 2rۏka]tǏV< )MmKXH&foN+kUEܙ=;zڮι@Z I#'Y"IpPI7L0k׿+f!+6z_LXzLa0rӯZBwsU4wmdQRG7qTX$;Eڛ1x a1!)1\_aN >sICgozs 0e:5^K|'ҁDK&'!x3*rO'qiuD43 "ey|a.q~3KyW`UXCM0˺5> -2#{I{ۡJBHCʗR/bkJBEclqԱd!D锾[p`0vwLux;r"Ȼǡ0?p%068K~EʘK1!-7K9w^n`!:Bu_`x~-\d{݆#}:="t_O] 7(g0vJ;Zim'{J>vxGs`%j'j zJ6u 3]E"&bGQ>L?NX-ݠ)8f܊(0C)܆söWӠiq:q _WLn]W0j$~G*=A\<oMF҆`:l}ʯ;{FF?[PyoӎQԢ߅eq{S Sޞ1yrL@ok{Pc&MøZ%8Yy'- $}*n2pL0RY82w+'pHr~5PIcvڧN[C9o2G/<׋SUlɀ&VcO!QΙ%Z|$4Z ♅29ar<Ɔ~Xg?7IWUͮE Q981'1r_\<;h\-)ýyT]~LҵWAP(Ó4,{CN4ovAe?zZyv)0q؎t}sW RJ*:ov,r(=>Jlc\~7mEHI)8^m_@+xc1.$lSC7kqhƩw/mCZk#?k|~ rtg%B m?|=hƦ7Τ 62y6)Bs\XW>TŊC͏MAnJ=6C)q5Ũ'p}HXG` ]rZ~4qG;`%Xoƅ3;¬$}EoA 9ljR Y@-١qi_aY c >4H]Y;zDㇻ;JY m -)#t淺n3YJ춸R)\ j3{'pcᲗs MȌEm$sm{jxϥw]ϟBsk iap(?X(|q+ƃ>-8wHdQrF10١!6~L'NXтFַ8ۤvTfeSo`e(1|Ci(!*>ytZ8&8Bӎ gEZ$x(W>:w (|;ϝB3 i*U$0JW†(!!rFL(ϳ]`$R^I>TAR>dD[;aNE?S;pǛ"Ux:kz Ҋ /X|r`k=;ݜR݇0)t+μ.wgk|ƒ~|fݟ[^…g.⵮0p`SqNJSWC%=8a6b9R"oU}# -u>ctâtvm9)c5G"bVW@a"qna!{χ=Yh9KP::2HI}SqnBr7q̜P:R#٤Wۮ̚C͸95qhTC/4;4!l#S5juaET87 *?/M{-.+ VC{}&P|H^ u(: '8qp{&ߴLŌ(u:$qmF|qɬ/3$o &<ֹTWhfa=?e}{݂KA${ >ez ]i~@QxqAlc&i^9rDpyf 6ٻZ"y4_wOj.sv֟ramP9B M;{|F31˥y 0d3EjT76Y5H 0T;O]fh۫ B|I+sVCy+1tQw7z%};Κm)t݁nl;an+aa8'8ٷdf2^^{5hlmnEB;w ? qRQO lT/fG]UGa>'g{.denS03$a(J ÞDJ$Ŏ0XqK?64c$w Zecy?VA8鶾ІMG/r!x_zWVK/DJ@1qm VjZ>+騭9 z;-.jB 齸[Pw=439-#͓]gq22j[Z-:X~mg4>d+j[B8vE|$2ΆGmxpYlX}H>t͗DA_Hk}C-d2^]ꭕbY@]ZDH 8Qc(Æ$܏߷ʹP۫/ Ú8(d|=lX95ƕs{k<6) (]bc'gדTK죮Fyp01lg#Ͽ:^ k, ^(^VH(CS~B;.o?7r̀l,* GpcT[ f^ %\]C`qTHPәg%||=|h+u^i7IzC:ee];z[v.@VR.,z_Wr4\Bzp IƋqQ0[:n_x\)csɣlR!TbKWxN3~GpJlX{UæI`0Ye&^hK s[A([EjEH4J= ~YR! ; D 1 .a}=akuXއ:?âtN?5rLfN RaIɊ%T0G((Q;SH} nNm'!г?4N?c>5Ar!5Xb;F ]+3~^]oaVC o>󇡐\+o@= _^4i/0; ;}p@c1;~^‡(ƛkMyfJ5yVq=As-y$}7fbG/qDoO(l4肋\,cwx)J>m&%S&ۍw6!Yw`]kO2slm;;VQj7zLƢq4ph}|U"Ca„ pV/-5⣏^`_H^>L>V1"U܄&ǨH6`3NȂ9+`cU0]ξfL-Zұ\WO->GʲP,<=1LĞ}Lj9^Zk~j&._οGߙmg\"qNInv+9yQz/fPCqhnwQװ8S N겻ؒ]9v#=& a唹AX4"8NbdvZD(7eEk Y5.b=,S0qlt0'(NT{'θ7kC0q1э=l 2ΞH쪯*s'Jc2yR*?0ج:}.N_(?{5eK5_%ϰgk ^D7-'sD:}azG&hcB㷮'WѼ-ɬɆB'ǫ?P1X :p@O"ƵTl<e,T߄S-_ѸWOk~%b%`e3\zV@{H i< ܅-VnӐfP֤86<8wv ?Ppo=wG>c7H)Jyw/gv'M'B_a8 =N0-$`gxX{۝\1P'"j;6(U$p!+H&xT;}oЪ`rR\RɈ>J7wy0zNu;M&vPl8.[؞ =GBh,V9Co3q`x^X)ā]eH/7w99t-_cikwM4 Nձ7{-8˟qJe"I >sRf&U^ &$[wy1 =8ĎY"킯iBdy3Pgj8&ƫ0ӕQ jݚC֚q$G=P 5g7{[W2l%@JWz0.vY$ucgڥ.p𱯛sB%Cjz2qYG^M +=OFZMHS+OUݸa#S 5 >v}~g wbCUE[9 4gеFEz(k\8+Cn\/p{Ttmq@I76#ُ L+e#a/#]wXׇE] ;[z+W/ᆫ,Hvl@Jd (?vduAKzU()3Tj}k|&8~5vzwst ޔu()~6rO Z?(MpkE`h86]ja*cj<9U7+)~O `Y<.ãqfD`zABXcRO 1׊nǦRĒi蓻 p谘" ZSYl5G)%JH3]j||bT[7U?yKq:S}wol)2{q"ʯ5>Ow$?/w_f UNG-o{#I]B cRz +&*0%:yN<{o+JwXp⤙sY.4i=r@S~n/q O8}`~jЫtviF2(=vI@<b6lA MI/76OeP6uA1-;0HL9k-rCꫝ~)]TGO,D"!JI(Rڔ%-h'Hٷ i ׾s;^.~oM+pB kb%S'ИY,a]eގ[=qi ,Έ<^ ["m )^}mk^r^eнÿbkk&Vۉtk0` *-T>ϋobwu&N) ƞ.!uVuw lJ@Mh?φ}U+We{W8}n~C=Xz0c#Tq8#9c¥mVP _D21G -x*.++]㛼EZ]H_krT'=)戃BC{~saz,vX͙:`"{i5EdAjSb)9d:HY_jkiA4W5+؄ '{tZpn=6$> W}G0'6g֖f ml^X%C)aQ۱k$yNY3'oLLr@`W` ݕk^]2VO{]  fn Eb qf^w ]27ԕ:r269A8{ _{VI(p)e;fRYugR385RF&Uٓt3y$+ [N3@N:笝|W n۸:#["q$( Zu~ a-$(z} 2f0z~q^Ljۮ?3M[o-5{gs%?֩Y~`ȅw)9cciڋS8ο%xۣ X}5O>P }:[]Zvc˜PSfz*EZGD Pz+$*׵9l8٬O nԪoAעp?(nч=FuwhYa68;!)t:$U*)HWuMn*aޑ X|MN(˶V9wW֐)mr;oݻVFZi+>PQk죚n'C_9J:Ap OSI7:C΃x2Y0yX_%{jxŀ_D^g#^=k}?82kS1\H-.k65 K5ƓD$ڽ\S j:?pPEJ(U$|{-]ԕd~Ixx`҅fcYUUxƯgo_c8I4' &3\ITLtf(RĒu=IL0fQl@ 0d Fn_1{^AfDMW΢=䍮B~O1wŻʋ7ʙ+8e@eRqK+׍w fIJ 980kp$4rdfo>ˌ0'gj܈ކWF-XeREOޡSag{l}LeS +_ԪO)c/E4cle|tV儗Y,䓪&?NJ %RmU(2,V6=Z9]Юz^ 'NAxN|N .CmԱJ9+pV7y].WI!0'>qdĎX=^-Bl̀ΐw\t#m|٬~_ˡѓlJCBz}U%5j{__a\0DU8GR'iUoZ5,aV@l'FxB() S}@&RY7BaOG_ϬEx+P|9 /uMڱ.'obO1(ßJyՎc{{J/bgfn)ka)z_Vl\l7Ėm6a}'bBh^-tv\]Y Ր`ev%&_dj7ߛRR؞c= ~.v5%YH5i:>; \ FuuWX w"q.΁1,DM߰uBZQ&hxT{Atj3 'mvgLMhm7'=7~]:XzTId]*Jm{+ J#Na*T'&v_#1n_@/u?R;իq_};Гy#St5Dru+UYBnrqn)eeC;߹C:$.H.ra'eH'^ ?ܳH =zv\}҅/uE$;-Bh {d`q{wߺk)Rz%R &0a=:P^/g+J~Ɩ@#hy'\bQ\b==zM f~zG^z 9Xj@zN_GQ3Fd_r ybO%aK>;u/4WZOOڽpn_E}T+>Qei]w5f4pl'DqmGBJ+W6fP94a-O㎶M+[ku!@z}YZn=]fAa?X eDt1jV`q~6!֖8Ck?v_n0{{#25Spg~)$Q/?߭a4﫣3/ToP''g u/qwMvOpUt[)[C~&"5zP'SzıcoQ_iVb+Τ #Gc?fzyˊw"%o:Hp%ƍi Aa_Acŗܗ~> }j?uUk#{SY:vW䗫(ZCqߠ@Hؖ&5dWbc-C HXW꧋UJ3`JTѱ!_B͌zI9 LIH=eNO&g\$9UvuTOo&oKě C"-Ƃ:~aGv+op56KobA&̖kNXt-{v5vS+b-k0cN[v\#9EWcb~)NkR?vv,mVS†7)aizN`w1$d P"65ErƎ3;iP *RO6qٔ(ffڳgr7 SCfXOoV{Y7ݶas"9kWGĤ &/|ƍ<1M`Sm Zd LR,vR&^(VYBgx#+},_,x q gա"3;P94ZOd]A5l~ar뎟<7|E_p]@ r-Pe.-['nе+edjw@mUT#l۶-׿z9*>b=պ}j]@󝗑: ګe@iJHYN1U:i`a:_3ƹCEc{J 9Eە_u`ˈQh l]L:Jq R/1|5/ߌ#H^yO }v΀SIJGu:dF !_rT7 {E`hlI6mlbl6(A 8V cSzYҏȏF.c@k+,^2v@+))RP)Ql`'~3e vzP~Lhs@d4f:qxY:KuOV(Mbٕ}* Y"MlSQ w *XSYkqбoe36ԈLBm5 &KzmƁLXZ-g֚6VK#'?cJ82$F4C[^Bڋ}a[V{4=X+);3%l,pU@O*3 \Z&c'`Uji8SUmڂi%~5paW߈$3dh6SzӟR^SX=$V_9' a]B׾9r^)dSKrsA]hqH7Oڿ[-C mqHѼj×$Heދng8pbvelZDaG.gm#/9g$~0Բs/i5cKW,r>/Z/+obvq@HwjJwYWw,]DC) 0,9sg%R X+Ìī[]`PQ62&ş}" [}Ma}Ά5}1rΫ:7bSQj#q8Lˎ6}ZW;i0~*oL̼fԮs3qAPl#|sdWFW=.؋I{x`Svˈ/@N0k9B=w# ]gwCCo -?OQ6. s e_=I^;2y73I$Ҟ8w>gω3HWq1&Z?+8CrVk@+s0XzZz:+?VA /R1.9ʫ낊OkvޤS{Tb9,*-wAa뿲 r7>3󼇛T9y@<Cp\{t5NJ]Zg`V>~N%ju^e&]Rt *qn_|W!Kuckpj2=7-7&( TQƝH^Fx/.޷E˓)Ot[gmpT&nj@ސ bL{~jiۥٰ{疛<,v߲^XBGe.`yA]5$}\,k⢉܁7aލt2¬Cߑ2> \aQ @ѷ>1(|{}jS-Y ÔdcVػ< 0(7_ByL =3ZB8Mk:TW?ž 5iAuY 6yyNbe7O~6,F7aXa$4*:(y0 z`螤Nl"xP6KoH̟{ *܋0Aޚxmz ̿Ł+\k5<)Ow#IQ94xt~;u!y'ZA`pн({tvXqb! ~Hъi%X3N2h-\Y7~B~{=`u\oaw[J${f9 dou])8.aDph<($mQ[[?C8#~|wmuTu(bq}탘A/4Vsm3Am\"Pt2 QT"˜U4- 3L ;^jPa<}iSs+>Y:4ѽv?C=]ExϏ 0{'=DG3]aS18P#>܅=36@=`bx#CB=3T 8 [3E`Z}Iary}Y$ߏZ%?#g^I4(pdGzõP&&(-w}]ft{#uKzжx 8a41͖p/|J*nCgwPen!lYq0V&#+l/"5_+XluleYyr`4o ׶||mιw{pOHfޏ'!*PUhv1 ;%!X ᧳᥹([98f&cN+yb][|f/Ix1\ǒyyi"uC#^CA4uMWm^XQ%TILJtI>mS=:/vJz?ZZCI[J]nVOlz 0BZꅴn-^?azx2`{.|K4&(>J ԺRth}6rx$vZu͗/{ >߃ rٹVT9%ɹR6;pb@]%~J5 TOH̱6E5R8dhi᫦d8-g7]+W$ɾCqޖiԹ(:=-}|Rz8>B{;_ůz5Y::+Au_ qe&^hq t^1=x^& tkL6G qmуIgEuCʎLQHxzt5#:WyAҨE[ 2,z-H&oc;e PH|*, 7ջ]Žm @ˢ=]IgDVM7u54;>Zn?\'d8 (~oۿ2@JW иM#`Rhwغa!|t?b!D2 $84vރ!mMuE0KQZ~SrNKу$} *_F kSg :y9G|Q;a:PM@yVǹL'{`:N*eUa$z$ˤ@^F3\u*k=]Te 0aq :[Á-*4 `D܉UV%0ױ\P{&p<^(7NFB\<=#^2^Hrl#ܗ/aP|]/ctqdd^_D%:%6Ǚ~gѦr?&lKۏ}wJqZ*zqb;eo+B`)Fㄹ^Yo.e Qz'_Uʍ; SOUdIuPa˘8Glz Jǵ[ȁFlX/`]^ǁ9g 濉R;Jg c8| `dFuJm[>7a çP9aJe/̷#K#'KUj8dΜY9ؗ:&l!djQoc>#+d-U=!PO[q.| xV&ʞ,ڏP5n+`0. cܖ_й3gd=bw^11uH{6-_{Ņ^Ǫ0tVN Som['>3~3VBiwLD'R52u9ulV[^W#QUZ oLԙܰ`fF{;@VU8+Mm=06ٞ9ܙ ,^@]l( N 6ƺxbH?ppE@_H '=*Vg6m; S@cqq5ޙTj#y7 SB֗%J+Wv;`CT0Qx\ għe-ֿHۿ &f0[gVcec gR,Ӡl b[ \L‘ v88M$~tIJ wnů°*T?sTEqAsDef/+_}̢(r hV"mk;6\L}G"y#l.9]$]fܩݵTcs:W66a-oy=0J!4zo<:%,r9"щI8`୅Z45I1㇄2qp6nk nџy 4ǣ)l{{:,n )e8\g*(ܣapH[S!1Kbp9.q :\C6hə\s|b}:``Ol#/ %}ݺ@yG$Н[߯=c~c<҈°̓alk3 M~7{#l>a ӽ釂0ɕ"I C=e>'&XdPMϹck|Ś'`yy8px(|"=LLl=։׊uJp4^b?`o Gq( 9ݑ~]*Sd?)4CHyQL> }.Hij$ط`8 =ec\4 $ͦ0W9iW0^oݢa@Aqb3$[#,4BP%*ۏaEMq'`o.4T:l=MJmoafIE{8'taB-ِPT8Tm=݅IypK^\Rn+>pb!c\?}wHԞ6cg&W!L$er[CL CjJ8[K쯫{3J%mdVLjpn|[#WiA<sOdO<C9kl|~d +̝4'pB^C~6"<*-GJnJno)Oh9JEl|HZ^o/.ܾ F:0βab& ?7F`k-$~>n=HDY0_5[f ]l< VmJ%qjm+'8[>`23@חL/4O]IAիai@A< {(TYH܉tG;.,nPN`҉>'[vȹGmnBSe'f5S :հǗ14/c~Lͮ:IJ]H]`j5[$-'nާ*v aZO[4.^X/ ? B"܋ ) ),W+5ˡ;[,r3?:]0~ 헭炮8oLAh1|'r.Oߤ2n7הc ɱt]&j'C>$C}|شauߦ[0)v_18l)>.~?ճIUlbQ7  sX2C(MOv qNDI~iNwtC.ߚK~rg c@t5INEk,[>>*rӍz IBCh#1`_dX iuJDJ}KH;ba~mزHЄ_>ASͧD&g)q2芞Fv ~+yHIc֙ kgs:}k=%TH!efG*G>hm`{+| l I@ף6* {sD>®ʎg7xu#t0Cי".As{L`}C8tvhL-GBR7_lեI(J%Cn: l2gcg_i9X0LrRzdJ 7o얢LxnJ]V)GCu =CS7C2',hd TlMU=߁![AlXߧf9_o0m#|C=LC|M)=yhOsjlY먱ͺ6X a22ELL|?]cit >T:t7@Wu OEuXa{n>^e"5=}9og--쮹SUrOT۳)Xך8 DZ`ć:PUJnoq^V_v$IrGlCMb9%t##9.i04 9;ub^u['jKF(`/E+^ŁIu^K4MY]֬ ;X1G6ߗŁU+i\?-3ˇM+=ow{y*vQ}lD ^p`ˑҢ_ S҂V`mI0 Z֜ޛ\v|c<u_"6WIRugxveSp6Eǖ`e7dtɾu4(uˍ?;˲Ea;l9;$HDʝG:إB%3V!S7 ´~+ "Nzz P6|J7$ۜ3>@+"0 >Pپi-4D2<\d``ab```d`a\̶N{-1b㿘/bcg/`~Ēo`Yҙeb?]ϲWbcz?~2/s-6%KaK^"7ֱ-)DRCg#_?x1]ļ  Rﺑ? -/^K0}Kk;ߟx,!R_*s2O01g3e7H5ۗ/͏\_4[П5Ksmcl̳1O\\㯍B 틥Ϛ6?7L, ۇL -{n?2+YW_ӥЗ1?\C{ M7ߘ[%k0_0>C[~W.ѱ4Y]}Yr=4 `cu {/+/Ymc]K0\7K_kϿ{}ed |ݿmx@glmnet/data/CVXResults.RData0000644000176200001440000000031212464072752015415 0ustar liggesusers r0b```b`f@& `d`aI%a@6"H߾!6O\ʽ6.w9_9"pu7^+^{Yһ ~@Wu/쏙L7bdo glmnet/data/SparseExample.RData0000644000176200001440000000752112400077000016132 0ustar liggesusers 8UkǷ!2)ʐd i2D)TBr%,AT "Fc Ɏ۴62ksﻮ][^빧<˳vmZ#h%HP)<\ę8qQx)/G盇0qB\ $$ 4'0&N`/ ~N L"&D`HaN+~x fHS((hqr#}Z>I 撹-"[I`-YZNg* 55dtvMc;@+A3@oF`Aji!Bj1c :/? t , ɺɺ(PcVO&ؒsI 9u>P~xYǖ#9ڙvdM`!i;&?'}d\4=58y+R/^2ogM%csjR3NIm^{|9.kY95EgΦ3W8@ؘ1(?LRkXwg+ȸƤNS:Mē%8/'sY+g'c󒱧z@[GhkD˩sG9ZsS8YRUn=n 2g񿭕u"I2U"YH{H~~AzR~,9d@s$V9"D<$H%xGPE@#`LIE˵K_x>Jv ';u>Ay68."gpmA* c\!][~6ī5ͭ;^T{X0Yw Ǩ+xn+h:Kv.K]f^LDL#lϝXlfZxioGCNA#X͡Z EQ ֏JMf_of-Q d$ﷄsWca3 [1t^}; N97Cg\&IʩXuV_a8nnxu>;ou =n,>q>%'ҡuIZHtxo/`RAXb{$X‘rkmf ~6JMk+^ <@f {|?Rnp׉qlz l b,(aໜ;?E+Nu'.{گ)nn߷/64<ۛ=[lK@Jg p<`[8KBYm7`"oй{(ޞ' [7j1Q4 wB*l'N&%DGcnH\zn>* گ}z NG [}p׊~o޷;ܳdwSeMJޥ&*Ǻ]{ XoMً+z oțYG!ПLp#IAp\jB5w0R?LV ,#!JczI2 OJ.u;[gR"VfUt00!w$r+W>߮ɬI=ۛ|V%Z,t2Mbk^ZWpⶳM|cDmpdykg80X z=,=@ n?*,ג X|+>Y_Cv[XL̬Ħs{ LE[iPy*`=W옗M̃5{X3]e]w}2^keV c.͒ 8"ӻ@ ~Ԁ]Uz~P =c˩ZEY,)CsdNϡ-+$5[TH跋K)Lāu6e9$L<0Zf29Kݷb9tE?MVZ"&fT{-?߄Ncнu5i)7޴-~>~4x9/Ԩi VB^;'#Kmm] -;DffcHث|!J*a9L%^~"x[/g[pjeewA۸?|X! >=oRz᳆ IXzjFdmژprHz-ąk]sh˖b;C^=|1銽/}0hXvG<̔O￟jZ%( 4%%֖z`u;=U#>VÑX%F/3ݤ"kh 7)A{CRN 4vWݢ W[huFk?ߣu| E6lvp\ͭhkQ ͤZ?z1uW: _=T{ &pK(W݌ǩK]%9lăwbhՑ6.&B+[|ehIb\>VE\Ni9m$3qFJs:uB*Sq 7)CO:?#+$51FJ5P,x}Y( P T/kzk~8/F72i؋'J.5`D zWR -)Xum'm((GL&%6- : 8VʝlM6~ٌ le]x _tʩ%Ю@Z2)6^̏93t6ø.RLx}AL׶7)$tVHoƍ*"0-J8~Ӏ;ߤnv}c]FCnSVy>{/n -$+S+)2uCnVlا`ʅ1XPtLo?hk|Ln1M-w7,6'Rvr: wOz u  g<.cCwthN(ه#}| {ITԲfpQ;7xRT퇾KfI&WŸW"|glmnet/data/QuickStartExample.RData0000644000176200001440000003762312400076361017006 0ustar liggesusers]i4UoELBD&!\яJ%)D)E**i02^<{K;hhhhifKV筻;ihA.T_킩b{$u%<~s:^O1N9gL ȍcxH(CYq2K6>3bY>0ϭc0>m_t F3vNϚP70܊}Dڟ]،UX/9tGad>AcHr)_ ÝÔ[gb~X(~;Mw`KPI߷h.|1a^>Hs(xSە`Rw[% |~t@1m}͋:]a5VT^ZC#~8 Ãdh '4 g^ f'}8u.6GE{)N)0PA%̀o߅#7aV"]O%LWttKDK7,1Y..{{8ww׾TE_ūX_mn$agf ;JY3sN|] \GrkoyWvǂ0Tc!h#ygœKiUR,$cՌf6>viy8vg yDžPf ~}d:kv~q uh;=#ЅL_}A:έE~ׄBG?a@/"́OfO{x)Uo7rn*38jp%*w8#w1l pѐX %9Gp`e,uiU->p}(Ił.{HyposZn!/8+QCg&+g5r(W[/jrsY fmœdUXPS*ۿs+؝6Ɩw@=}S_'̩GD0kHl &h*,&woSµGxA!$ ',uc"VEc-&Byk3aGo94S Lʕu?f +Ts$r!w@$R^w*NoLܾ}E9{^; se 8zZ|`Mahhiإ Ջ9a9FDjA50|W՛G::;nǑ|``,vs*6nRAG`S'%+x) 'l{R-\ DKfڟ{tfb2)<}ێ]OCqmyM8i%7cv3[_XͧHc yWBm1} ,>FS›4y)){)dSz]s7 ONkJے3S Oa3>۠}#6{jxH=lv>~ f`5xw&tF|x#`邋q,*ia\qЭH;g_fR;XM_zqe;,krOदdPZǫ4ݥ\顓)8l1^.RC0y}Jq xqȉyv}. .gpBM{k)^M`y ugis8eaTqg[*LINbDh{8Q3O}NlEY Mǘ$ XH&tT_UX>7α,=1á 7|y7Dp%7؁ћ!dwhcq+[6DWW8`J!pb`}HJu9%qyZ 0A+(tV#UW{wTݹvA1V30UqµV$]iZtj!^ܣ= 3_w;Cq/DjAyDFs8kG,eED&omIIZ5`*֭*;P? u;I`hPa0)?8d*k?,z=aX=;_ی}@/eo|d3Q@uJ4tڷsZck R0/,,\n6.B5@:]7Nj<;rK&wzt6V_`:7cGq r:7+RZeLq{֧3M]|mC=NÆcr;CoÎ# 7clk _> ly`a?[G7Nv|Lwԋ82sL6:YI㏲]ꆴ%c9Dgxryw$N/Շjs[z aݸrOY"i'Sm3XosFNk>'З͎<];W;mEd\0i\hLJb?>c&*N03h%:}ƛ2`pIYx.&BڢS)W~hKͿmLga|64b׷o>y`K-ޘ+˔!+ $ațwY2,INeq6|nMAk30{K˖ ۑhѯعs? >pr( ӟGOqSΎCݘqa])Y5>9keox \+8]6bb*CnV}Q1X}?c3+ 4+:ӠčHfzF7iNaA,`TSо4iٜU})oid+;}90sۛ6TeB2,9;´x2nwZ`@wM9 }Iu`Ʋ9V.I/ ~YumPRj6]#mvism{0ƕ+ɁݟmDhC3s88|t_r,^`:&c (ܣصn*_RӟCno40/[w L?t>)m۹qE}Zj:KǢ$*B 4ʴ +IJ=CqjD$p;"O;Z>@!,49Z9,y̎s%dZ#8'vg$l[62 2lHJI_|eʘgFCUB aLmBJnк@J*RD^{jpI5'@9E@_P) =Q=@sW<չ`'MhJ/bsx*"&0+ǓD v;h=5;a]%7 cCy] PvY/[ Y(snU-,7Q`~m[ېlIɚT V1߭֓rLn>T,(,`h!K2N5A~˽ji)}84L4=א%2KQ>0ib6t IoS0eL%>`8l7~ +aAʄUm:U9 Y‰͓fq;ttO<)KZ:8iuՋSΈz܎(y2%uprFw-U3wyTTqOBG:Y9<ȏe;(t4;I? _jjlY[L <+Sg2bs.%:fn=> Ojgqi=QPFH_$%TƩڃF$w^X5f~ϩ=jp/dڨu%߳\`~+/Z4LoD^/"T5vMvWRxd1~ ׃TE+@d RSN%QT\5jq0T+[ގ/ q|ZLb}K , OXB#JgcM:'?䟅b_O?8^#O2 ~=c2 }.҉5Ch!!Du8AӮDZN[ʽo! 8탆Ca~$Y鯴q䐍?[-k){F ?m^Jɴ9S"o!eym4\}o*p2J?rm+lp9.4pLXyNi n0K"ֻTwׅ(JF!LT{#>{pXUxx|>aAeR[$3:{/cpQNZO/~h\ZY^ӯpw0$6Mɫ(c ءMpj=I480(b DŁCW#% q!9C$$K(¥Pequh>q~vŜXn_'Ƒr;Xro$&ҴΣ긄aל}VŤae%5|e츗O*ZtacH]0"`Ph:f*_+aA''7=d6 Iy=0(=i[v)DZ(u'kEu4}~mfo"w)wdaq&:_ͪ\;ΜV ƠǶx2V [hӻdzFx}{AGܜIB"ǰ 7jhzp]7tqMSFigq큪v/)ֿbNg큲'H0tbncU@_5{ƤnH] ~/U~e{:c{oߝfhvT_CȗG-4%&lMe#O5sNqcPN\x-GS̿ۆP+2@i):c;.o )ߗPGH^ *G:-3P@v\6D9SiE0٧5YVu&DJcFE%WX/ جpH2)?c?QAWqN2F`IO:K٩)r8)hLw+4(LLv:m u[ΑA=JA-v`E>;%]ξawOTȢ!}Xj8%g8qSBB;#@5R jW6(5&ίuXߴ32G9M<*6m%&:M"Kh{qWlGĨ1& )r1w szfu{d"6~ rʎa6{-v_qc 8I*s{1n:0<4G79 8wDð\|R9IL,b\72?"R=Ia08yeyR .tO%IAc꿰،-T]q)fN O3 +(ˆuezDRZ%|s3ibذ[s8)}z9.6k X?CZÎTܹ=0"zwɴg5n+P.Wh,'cF5̪~5=+5]GrxI3=@c¾6sxJcξ0ΫjTCVWKI3& ZŽ+óX3G (ngaFY8,P|7jq}&'\kaE"Oz k+g]pzLrV.مߒ U&*Oc? )…tZ 7ܶf؀}?l}ߥ9܌:R cfMFqشUKV_ӷ3FR1]/9NuT\nʃĀ'e}"|Q1'8 Bv̟`v{jM|79Xޙm` κ:#~ik-$lژswj̾[݇HVxb@)8NqɝLp9!e}zF9OcOԃf?_OCC:BSZRyČk/#2r\0U:^{b~z:7 4H;y/Ve|hK ,ql. LN&prS/`e'땃C5<vUne ?xhD &9iʜ dڝ uos癠wAw/.;Rw?,ԗJx$ .xm"X lW~MFcY ~}qn+.:ģjuSl1әgZTh:BC4%Z}d孫42 M#>?b Λ`&_}kj#ߦ mck^a^H߾JBϠj[='ISy _ACKA0eR%e(spKP.r`[N""gJR{uN{6HaǷh0~r/k=@_O=_Qǡv4|+wWԵ#wC[n6R$G۴C rBC{c0+]K!d{>4݅~)!r fvPb6${Õ4 )3/BK/ks/)mOmIS'qQ.R N$LL+҇_qx8 Zz {_PRLk` v~XzN@{⫄! gO8A kp8]nIz4&[˻aG}snnb`] 84yCl$>ANaq]2">?|-$n޶x-i p1 l&Tfq$} zA03ފ9+̸LY"?ћ,M>N=QA 'jZeƅA?;W:=P3MY)%??} iFpE_\),rRN?8/+P_@& Ky@}JódQF0@kپ3|}ǑH\ 휒1SXI.)zaz|D#+l5+Jp=N7py0t!-# T$336~ϰ\Rc 3c3?z}Z.;dok_ "\s2ܿ '再Nw 18NfBS]sSoټ/8hs)䣠-3,6Uea'y<5){t(Әa]hOK;cu G~#g%P.O Ì{ɏP'F,~z7WQ#:/"bt mZВxZRebFׯc,q,&ϕoHWбNcDz+oFNX? 6 [M ̕lPꓗYWՁzf.7֜a_Ƒy <A/m"uJnrm=;b qGEs>! =82箳YsyW$⌽kd4}RWoՃFMH%8zhu"϶^2}(rhm7 B@, @C7*âףr˜|(W{q!2||ŵ\^r G 'uP&Z`D;e1f2OlǵCJώcTJ@d*W aFlF[uJ.ǎGz\Rbm{f7GkHSΧٛN|W%V%pZ2ZEY{T $␎2]ELz+qU/<*eCepH%!,34۳ Z>ChTB&&M;HV@jc.`gmFaؠx,u]_M&20_s['I![H6'io?퇌-Z vC`B{- \+2f/TYB*h|OdЅF_ÕHK0Qso(,/ N\ԇ:/4qbʗ/8 OXv˜Y [В?8ŞSZ6|INgw"\(iVo;pƗ/q7W{S9n Zk<"[qϛس!īk/6c%f;~=Cou%%0AsaяޮAT7AWFB0}@|%Wa}7mrMm(ӫT| kQ 8pgp8NFV݅A_ޑi s%^ۤJ=ם׆!7?Ӿogr=Rh]Wuǜ6CGW2|8 [ˋLjq\}a`~yX4\pᄥ;"a>mX+ NaZ5%褬Pԅ-kږ^^VulX >c?h־bnҲ;98sJ-=(%墉3m籟gN9UJO]]\-mPtz_E&zY~@6UPdùw{X;Pq}T:W_e֮{JTCywePw6\8c 42YIyM/ `cJXbuJpȴ"DM68VU & F,bƼ.C*ovՄ L8Ber<3 2btq;k+Wyq`Y]0P#jihv& G>oŁYٝ~]`OMk\㟷~w Yle?WM^3 b{Nh`;q`GЈ`."NX[U0m !`Ri0d%W/k<4O@aoGPI;˫~cc]M_Aݨ|Ayڙ {+%[}/z;H~N" ?ԫunLy^L x`oT$7U=kFT0*xeMVYTkţ3MJK *_ 1(SyqR8ќ,2~Lf9aU^ugNmc_8hv&ãCq&@ym^hޥv Wۈ2qo7bH겫2*2BGZ8?uUl\:-k"2 |w !~M^(s(]iℱ*f =`sAo3 0r 3p Kbҋ >_`邟m "Z ɼð rYyBf0JؑgX޳* K]_[DݙJo(MdKLPfضݺ,}ntϴP*b4Vw"+:L)~&K;ፅŒoBؑN%9MvkoKÃOz9(Ω|aK2}DFQlaQ=bO3j5@y̓2X88"_9Gg|{}~OѦ8֠~ל'NQN*T/)WtC01njKq)9 A  |dGÎc>̅iPKG]$/1ٕ߷oBdF{䒐 ɪ60ʻzw8֧|`P^UUaLrj}HW 7 6QcK}?{=0_n3]@v~H{Ήc-'p.mSY)-li|d1 ?ա.-+o GI#e06= _\h`qiUk~^̞@멑(u_Օ۽XaN[o!U|6ϸ)ɠ]}y-ѣl?Zmti+8Nsgh{u ߵ)crØev!>,869+MpJIk4=+I-v)JMt7.x2?[ˀ5p`Ѳ{0^s+ =ƅ{w1Ce [6 )K ŸY6i]ԥbپ q1G`B,|ZR_f[~6^Vڳ>-u~ΗN3}DŽ⯰!Yq{:A9]Xrk? A,aIrqWh,% z߃ /zXEpagz8 X%u&7Ztzs[ ]1[co:9R,fU\ay|(t =`ujB_@x+8 ~Vܔ1﹞~!VӰz@EIwh1{4YJ9UA`y7DW+Ԅxp\rl4)J&^[j)bWDOĝ^ݽvD7ًj qZfec˜1D%#LD%[?0TMqcf#ngu!0$&jj(W\BQڰ7dXks{) Lo=W}rǠT1aPQ&'u)/]V®#R2qϟ@"s'eoy awàWm qۋ"KΥ +m7$l]޴"p:%9 i:;C4&oZDfKnOI([j7H9a.w$9"!H偙hRjޗq W۟K|tM]n=]YD4#?4GS>e|b@yzZ\iǾMUf+zpwҿ&ؤ=f Ȫu5KY*_#YR/9y.H歔.uܜk}??Iؑ—t[JFB.fׇ mno{4<ۂ}qqʉ.DЗf^zdojm*kސD~{w޶D}EDfPśݴ%߉;0) and 'status' (binary) as a response; a 'Surv' object suffices",call.=FALSE) ty=as.double(y[,"time"]) tevent=as.double(y[,"status"]) if(any(ty<=0))stop("negative event times encountered; not permitted for Cox family") maxit=as.integer(maxit) weights=as.double(weights) if(is.null(offset)){ offset=ty*0 is.offset=FALSE} else{ storage.mode(offset)="double" is.offset=TRUE } fit=if(is.sparse)stop("Cox model mot implemented for sparse x in glmnet",call.=FALSE) else .Fortran("coxnet", parm=alpha,nobs,nvars,as.double(x),ty,tevent,offset,weights,jd,vp,cl,ne,nx,nlam,flmin,ulam,thresh, maxit,isd,# need to get JHF to reverse these lmu=integer(1), ca=double(nx*nlam), ia=integer(nx), nin=integer(nlam), nulldev=double(1), dev=double(nlam), alm=double(nlam), nlp=integer(1), jerr=integer(1),PACKAGE="glmnet" ) if(fit$jerr!=0){ errmsg=jerr(fit$jerr,maxit,pmax=nx,family="cox") if(errmsg$fatal)stop(errmsg$msg,call.=FALSE) else warning(errmsg$msg,call.=FALSE) } outlist=getcoef(fit,nvars,nx,vnames) dev=fit$dev[seq(fit$lmu)] outlist=c(outlist,list(dev.ratio=dev,nulldev=fit$nulldev,npasses=fit$nlp,jerr=fit$jerr,offset=is.offset)) class(outlist)="coxnet" outlist } glmnet/R/cvcompute.R0000644000176200001440000000106312177041746014102 0ustar liggesuserscvcompute=function(mat,weights,foldid,nlams){ ###Computes the weighted mean and SD within folds, and hence the se of the mean wisum=tapply(weights,foldid,sum) nfolds=max(foldid) outmat=matrix(NA,nfolds,ncol(mat)) good=matrix(0,nfolds,ncol(mat)) mat[is.infinite(mat)]=NA#just in case some infinities crept in for(i in seq(nfolds)){ mati=mat[foldid==i,,drop=FALSE] wi=weights[foldid==i] outmat[i,]=apply(mati,2,weighted.mean,w=wi,na.rm=TRUE) good[i,seq(nlams[i])]=1 } N=apply(good,2,sum) list(cvraw=outmat,weights=wisum,N=N) } glmnet/R/predict.lognet.R0000644000176200001440000000132413240602077015006 0ustar liggesuserspredict.lognet=function(object,newx,s=NULL,type=c("link","response","coefficients","class","nonzero"),exact=FALSE,newoffset,...){ type=match.arg(type) ### remember that although the fortran lognet makes predictions ### for the first class, we make predictions for the second class ### to avoid confusion with 0/1 responses. ### glmnet flipped the signs of the coefficients nfit=NextMethod("predict") switch(type, response={ pp=exp(-nfit) 1/(1+pp) }, class={ cnum=ifelse(nfit>0,2,1) clet=object$classnames[cnum] if(is.matrix(cnum))clet=array(clet,dim(cnum),dimnames(cnum)) clet }, nfit ) } glmnet/R/fix.lam.R0000644000176200001440000000015412177040012013414 0ustar liggesusersfix.lam=function(lam){ if(length(lam)>2){ llam=log(lam) lam[1]=exp(2*llam[2]-llam[3]) } lam } glmnet/R/na.mean.R0000644000176200001440000000030111566267311013403 0ustar liggesusersna.mean=function(x){ ### replace missing entries with mean for that column. namean=function(x){ nas=is.na(x) if(any(nas)) x[nas]=mean(x,na.rm=TRUE) x } apply(x,2,namean) } glmnet/R/plot.glmnet.R0000644000176200001440000000026511542462034014333 0ustar liggesusersplot.glmnet=function(x, xvar=c("norm","lambda","dev"),label=FALSE,...){ xvar=match.arg(xvar) plotCoef(x$beta,lambda=x$lambda,df=x$df,dev=x$dev.ratio,label=label,xvar=xvar,...) } glmnet/R/rmult.R0000644000176200001440000000016011356053215013225 0ustar liggesusersrmult <- function(p){ x=t(apply(p,1,function(x)rmultinom(1,1,x))) x=x%*%seq(ncol(p)) drop(x) } glmnet/R/fishnet.R0000644000176200001440000000321012110667157013526 0ustar liggesusersfishnet=function(x,is.sparse,ix,jx,y,weights,offset,alpha,nobs,nvars,jd,vp,cl,ne,nx,nlam,flmin,ulam,thresh,isd,intr,vnames,maxit){ if(any(y<0))stop("negative responses encountered; not permitted for Poisson family") maxit=as.integer(maxit) weights=as.double(weights) storage.mode(y)="double" if(is.null(offset)){ offset=y*0 #keeps the shape of y is.offset=FALSE} else{ storage.mode(offset)="double" is.offset=TRUE } fit=if(is.sparse).Fortran("spfishnet", parm=alpha,nobs,nvars,x,ix,jx,y,offset,weights,jd,vp,cl,ne,nx,nlam,flmin,ulam,thresh,isd,intr,maxit, lmu=integer(1), a0=double(nlam), ca=double(nx*nlam), ia=integer(nx), nin=integer(nlam), nulldev=double(1), dev=double(nlam), alm=double(nlam), nlp=integer(1), jerr=integer(1),PACKAGE="glmnet" ) else .Fortran("fishnet", parm=alpha,nobs,nvars,as.double(x),y,offset,weights,jd,vp,cl,ne,nx,nlam,flmin,ulam,thresh,isd,intr,maxit, lmu=integer(1), a0=double(nlam), ca=double(nx*nlam), ia=integer(nx), nin=integer(nlam), nulldev=double(1), dev=double(nlam), alm=double(nlam), nlp=integer(1), jerr=integer(1),PACKAGE="glmnet" ) if(fit$jerr!=0){ errmsg=jerr(fit$jerr,maxit,pmax=nx,family="poisson") if(errmsg$fatal)stop(errmsg$msg,call.=FALSE) else warning(errmsg$msg,call.=FALSE) } outlist=getcoef(fit,nvars,nx,vnames) dev=fit$dev[seq(fit$lmu)] outlist=c(outlist,list(dev.ratio=dev,nulldev=fit$nulldev,npasses=fit$nlp,jerr=fit$jerr,offset=is.offset)) class(outlist)="fishnet" outlist } glmnet/R/onAttach.R0000644000176200001440000000022012067137361013625 0ustar liggesusers.onAttach=function(libname,pkgname){ packageStartupMessage("Loaded glmnet ", as.character(packageDescription("glmnet")[["Version"]]),"\n") } glmnet/R/cv.fishnet.R0000644000176200001440000000334313240602077014137 0ustar liggesuserscv.fishnet <- function (outlist, lambda, x, y, weights, offset, foldid, type.measure, grouped, keep = FALSE) { if (!is.null(offset)) { is.offset = TRUE offset = drop(offset) } else is.offset = FALSE ##We dont want to extrapolate lambdas on the small side mlami=max(sapply(outlist,function(obj)min(obj$lambda))) which_lam=lambda >= mlami devi = function(y, eta) { deveta = y * eta - exp(eta) devy = y * log(y) - y devy[y == 0] = 0 2 * (devy - deveta) } predmat = matrix(NA, length(y), length(lambda)) nfolds = max(foldid) nlams = double(nfolds) for (i in seq(nfolds)) { which = foldid == i fitobj = outlist[[i]] if (is.offset) off_sub = offset[which] preds = predict(fitobj, x[which, , drop = FALSE], s=lambda[which_lam], newoffset = off_sub) nlami = sum(which_lam) predmat[which, seq(nlami)] = preds nlams[i] = nlami } N = length(y) - apply(is.na(predmat), 2, sum) cvraw = switch(type.measure, mse = (y - exp(predmat))^2, mae = abs(y - exp(predmat)), deviance = devi(y, predmat) ) if ((length(y)/nfolds < 3) && grouped) { warning("Option grouped=FALSE enforced in cv.glmnet, since < 3 observations per fold", call. = FALSE) grouped = FALSE } if (grouped) { cvob = cvcompute(cvraw, weights, foldid, nlams) cvraw = cvob$cvraw weights = cvob$weights N = cvob$N } cvm = apply(cvraw, 2, weighted.mean, w = weights, na.rm = TRUE) cvsd = sqrt(apply(scale(cvraw, cvm, FALSE)^2, 2, weighted.mean, w = weights, na.rm = TRUE)/(N - 1)) out = list(cvm = cvm, cvsd = cvsd, type.measure=type.measure) if (keep) out$fit.preval = predmat out } glmnet/R/cv.glmnet.R0000644000176200001440000000665413240602077013775 0ustar liggesuserscv.glmnet <- function (x, y, weights, offset = NULL, lambda = NULL, type.measure = c("mse", "deviance", "class", "auc", "mae"), nfolds = 10, foldid, grouped = TRUE, keep = FALSE, parallel = FALSE, ...) { if (missing(type.measure)) type.measure = "default" else type.measure = match.arg(type.measure) if (!is.null(lambda) && length(lambda) < 2) stop("Need more than one value of lambda for cv.glmnet") N = nrow(x) if (missing(weights)) weights = rep(1, N) else weights = as.double(weights) y = drop(y) glmnet.call = match.call(expand.dots = TRUE) which = match(c("type.measure", "nfolds", "foldid", "grouped", "keep"), names(glmnet.call), F) if (any(which)) glmnet.call = glmnet.call[-which] glmnet.call[[1]] = as.name("glmnet") glmnet.object = glmnet(x, y, weights = weights, offset = offset, lambda = lambda, ...) glmnet.object$call = glmnet.call subclass=class(glmnet.object)[[1]] type.measure=cvtype(type.measure,subclass) is.offset = glmnet.object$offset ###Next line is commented out so each call generates its own lambda sequence # lambda=glmnet.object$lambda if (inherits(glmnet.object, "multnet") && !glmnet.object$grouped) { nz = predict(glmnet.object, type = "nonzero") nz = sapply(nz, function(x) sapply(x, length)) nz = ceiling(apply(nz, 1, median)) } else nz = sapply(predict(glmnet.object, type = "nonzero"), length) if (missing(foldid)) foldid = sample(rep(seq(nfolds), length = N)) else nfolds = max(foldid) if (nfolds < 3) stop("nfolds must be bigger than 3; nfolds=10 recommended") outlist = as.list(seq(nfolds)) if (parallel) { # if (parallel && require(foreach)) { outlist = foreach(i = seq(nfolds), .packages = c("glmnet")) %dopar% { which = foldid == i # if (is.matrix(y)) if (length(dim(y))>1) y_sub = y[!which, ] else y_sub = y[!which] if (is.offset) offset_sub = as.matrix(offset)[!which, ] else offset_sub = NULL glmnet(x[!which, , drop = FALSE], y_sub, lambda = lambda, offset = offset_sub, weights = weights[!which], ...) } } else { for (i in seq(nfolds)) { which = foldid == i if (is.matrix(y)) y_sub = y[!which, ] else y_sub = y[!which] if (is.offset) offset_sub = as.matrix(offset)[!which, ] else offset_sub = NULL outlist[[i]] = glmnet(x[!which, , drop = FALSE], y_sub, lambda = lambda, offset = offset_sub, weights = weights[!which], ...) } } fun = paste("cv", subclass, sep = ".") lambda = glmnet.object$lambda cvstuff = do.call(fun, list(outlist, lambda, x, y, weights, offset, foldid, type.measure, grouped, keep)) cvm = cvstuff$cvm cvsd = cvstuff$cvsd nas=is.na(cvsd) if(any(nas)){ lambda=lambda[!nas] cvm=cvm[!nas] cvsd=cvsd[!nas] nz=nz[!nas] } cvname = names(cvstuff$type.measure) names(cvname)=cvstuff$type.measure# to be compatible with earlier version; silly, I know out = list(lambda = lambda, cvm = cvm, cvsd = cvsd, cvup = cvm + cvsd, cvlo = cvm - cvsd, nzero = nz, name = cvname, glmnet.fit = glmnet.object) if (keep) out = c(out, list(fit.preval = cvstuff$fit.preval, foldid = foldid)) lamin=if(cvname=="AUC")getmin(lambda,-cvm,cvsd) else getmin(lambda, cvm, cvsd) obj = c(out, as.list(lamin)) class(obj) = "cv.glmnet" obj } glmnet/R/predict.multnet.R0000644000176200001440000000554513240602077015217 0ustar liggesuserspredict.multnet <- function (object, newx, s = NULL, type = c("link", "response", "coefficients", "class", "nonzero"), exact = FALSE, newoffset, ...) { type = match.arg(type) ###multnet is very different, so we treat it separately if(missing(newx)){ if(!match(type,c("coefficients","nonzero"),FALSE))stop("You need to supply a value for 'newx'") } if(exact&&(!is.null(s))){ lambda=object$lambda which=match(s,lambda,FALSE) if(!all(which>0)){ lambda=unique(rev(sort(c(s,lambda)))) check_dots(object,...)# This fails if you don't supply the crucial arguments object=update(object,lambda=lambda,...) } } a0 = object$a0 rownames(a0) = rep("(Intercept)", nrow(a0)) nbeta = object$beta klam = dim(a0) nclass = klam[[1]] nlambda = length(s) if (!is.null(s)) { lambda = object$lambda lamlist = lambda.interp(lambda, s) for (i in seq(nclass)) { kbeta = methods::rbind2(a0[i, , drop = FALSE], nbeta[[i]])#was rbind2 vnames = dimnames(kbeta)[[1]] dimnames(kbeta) = list(NULL, NULL) kbeta = kbeta[, lamlist$left, drop = FALSE] %*% Diagonal(x=lamlist$frac) + kbeta[, lamlist$right, drop = FALSE] %*% Diagonal(x=1 - lamlist$frac) dimnames(kbeta) = list(vnames, paste(seq(along = s))) nbeta[[i]] = kbeta } } else { for (i in seq(nclass)) nbeta[[i]] = methods::rbind2(a0[i, ], nbeta[[i]])#was rbind2 nlambda=length(object$lambda) } if (type == "coefficients") return(nbeta) if (type == "nonzero") if(object$grouped)return(nonzeroCoef(object$beta[[1]],bystep=TRUE)) else return(lapply(nbeta, function(x) nonzeroCoef(x[-1, , drop = FALSE], bystep = TRUE))) dd = dim(newx) if (inherits(newx, "sparseMatrix")) newx = as(newx, "dgCMatrix") npred = dd[[1]] dn = list(names(nbeta), dimnames(nbeta[[1]])[[2]], dimnames(newx)[[1]]) dp = array(0, c(nclass, nlambda, npred), dimnames = dn) for (i in seq(nclass)) { fitk = cbind2(1, newx) %*% (nbeta[[i]]) dp[i, , ] = dp[i, , ] + t(as.matrix(fitk)) } if (object$offset) { if (missing(newoffset)) stop("No newoffset provided for prediction, yet offset used in fit of glmnet", call. = FALSE) if (!is.matrix(newoffset) || dim(newoffset)[[2]] != nclass) stop(paste("Dimension of newoffset should be", npred, "x", nclass), call. = FALSE) toff = t(newoffset) for (i in seq(nlambda)) { dp[, i, ] = dp[, i, ] + toff } } switch(type, response = { pp = exp(dp) psum = apply(pp, c(2, 3), sum) aperm(pp/rep(psum, rep(nclass, nlambda * npred)), c(3, 1, 2)) }, link = aperm(dp, c(3, 1, 2)), class = { dp = aperm(dp, c(3, 1, 2)) apply(dp, 3, glmnet_softmax) }) } glmnet/R/jerr.lognet.R0000644000176200001440000000100012032407536014306 0ustar liggesusersjerr.lognet=function(n,maxit,pmax){ outlist=jerr.elnet(n,maxit,pmax) if(n< -20000)outlist$msg=paste("Max(p(1-p),1.0e-6 at ",-n-20000,"th value of lambda; solutions for larger values of lambda returned") if(outlist$msg!="Unknown error")return(outlist) if((8000 1.0 - 1.0e-5") else msg="Unknown error" list(n=n,fatal=TRUE,msg=msg) } glmnet/R/response.coxnet.R0000644000176200001440000000077312757706512015244 0ustar liggesusersresponse.coxnet=function(y){ ## if(is.Surv(y)){ ## y=y[,c(1,ncol(y))] ## colnames(y)=c("time","status") ## } if(!is.matrix(y)||!all(match(c("time","status"),dimnames(y)[[2]],0)))stop("Cox model requires a matrix with columns 'time' (>0) and 'status' (binary) as a response; a 'Surv' object suffices",call.=FALSE) ty=as.double(y[,"time"]) tevent=as.double(y[,"status"]) if(any(ty<=0))stop("negative event times encountered; not permitted for Cox family") list(time=ty,event=tevent) } glmnet/R/glmnet.R0000644000176200001440000001220413020720244013343 0ustar liggesusersglmnet=function(x,y,family=c("gaussian","binomial","poisson","multinomial","cox","mgaussian"),weights,offset=NULL,alpha=1.0,nlambda=100,lambda.min.ratio=ifelse(nobs1){ warning("alpha >1; set to 1") alpha=1 } if(alpha<0){ warning("alpha<0; set to 0") alpha=0 } alpha=as.double(alpha) this.call=match.call() nlam=as.integer(nlambda) y=drop(y) # we dont like matrix responses unless we need them np=dim(x) ###check dims if(is.null(np)|(np[2]<=1))stop("x should be a matrix with 2 or more columns") nobs=as.integer(np[1]) if(missing(weights))weights=rep(1,nobs) else if(length(weights)!=nobs)stop(paste("number of elements in weights (",length(weights),") not equal to the number of rows of x (",nobs,")",sep="")) nvars=as.integer(np[2]) dimy=dim(y) nrowy=ifelse(is.null(dimy),length(y),dimy[1]) if(nrowy!=nobs)stop(paste("number of observations in y (",nrowy,") not equal to the number of rows of x (",nobs,")",sep="")) vnames=colnames(x) if(is.null(vnames))vnames=paste("V",seq(nvars),sep="") ne=as.integer(dfmax) nx=as.integer(pmax) if(missing(exclude))exclude=integer(0) if(any(penalty.factor==Inf)){ exclude=c(exclude,seq(nvars)[penalty.factor==Inf]) exclude=sort(unique(exclude)) } if(length(exclude)>0){ jd=match(exclude,seq(nvars),0) if(!all(jd>0))stop("Some excluded variables out of range") penalty.factor[jd]=1 #ow can change lambda sequence jd=as.integer(c(length(jd),jd)) }else jd=as.integer(0) vp=as.double(penalty.factor) ###check on limits internal.parms=glmnet.control() if(any(lower.limits>0)){stop("Lower limits should be non-positive")} if(any(upper.limits<0)){stop("Upper limits should be non-negative")} lower.limits[lower.limits==-Inf]=-internal.parms$big upper.limits[upper.limits==Inf]=internal.parms$big if(length(lower.limits)=1)stop("lambda.min.ratio should be less than 1") flmin=as.double(lambda.min.ratio) ulam=double(1) } else{ flmin=as.double(1) if(any(lambda<0))stop("lambdas should be non-negative") ulam=as.double(rev(sort(lambda))) nlam=as.integer(length(lambda)) } is.sparse=FALSE ix=jx=NULL if(inherits(x,"sparseMatrix")){##Sparse case is.sparse=TRUE x=as(x,"CsparseMatrix") x=as(x,"dgCMatrix") ix=as.integer(x@p+1) jx=as.integer(x@i+1) x=as.double(x@x) } kopt=switch(match.arg(type.logistic), "Newton"=0,#This means to use the exact Hessian "modified.Newton"=1 # Use the upper bound ) if(family=="multinomial"){ type.multinomial=match.arg(type.multinomial) if(type.multinomial=="grouped")kopt=2 #overrules previous kopt } kopt=as.integer(kopt) fit=switch(family, "gaussian"=elnet(x,is.sparse,ix,jx,y,weights,offset,type.gaussian,alpha,nobs,nvars,jd,vp,cl,ne,nx,nlam,flmin,ulam,thresh,isd,intr,vnames,maxit), "poisson"=fishnet(x,is.sparse,ix,jx,y,weights,offset,alpha,nobs,nvars,jd,vp,cl,ne,nx,nlam,flmin,ulam,thresh,isd,intr,vnames,maxit), "binomial"=lognet(x,is.sparse,ix,jx,y,weights,offset,alpha,nobs,nvars,jd,vp,cl,ne,nx,nlam,flmin,ulam,thresh,isd,intr,vnames,maxit,kopt,family), "multinomial"=lognet(x,is.sparse,ix,jx,y,weights,offset,alpha,nobs,nvars,jd,vp,cl,ne,nx,nlam,flmin,ulam,thresh,isd,intr,vnames,maxit,kopt,family), "cox"=coxnet(x,is.sparse,ix,jx,y,weights,offset,alpha,nobs,nvars,jd,vp,cl,ne,nx,nlam,flmin,ulam,thresh,isd,vnames,maxit), "mgaussian"=mrelnet(x,is.sparse,ix,jx,y,weights,offset,alpha,nobs,nvars,jd,vp,cl,ne,nx,nlam,flmin,ulam,thresh,isd,jsd,intr,vnames,maxit) ) if(is.null(lambda))fit$lambda=fix.lam(fit$lambda)##first lambda is infinity; changed to entry point fit$call=this.call fit$nobs=nobs class(fit)=c(class(fit),"glmnet") fit } glmnet/R/glmnet_softmax.R0000644000176200001440000000117711700417662015125 0ustar liggesusersglmnet_softmax <- function (x) { d <- dim(x) nas=apply(is.na(x),1,any) if(any(nas)){ pclass=rep(NA,d[1]) if(sum(nas) maxdist pclass[l] <- i maxdist[l] <- x[l, i] } dd <- dimnames(x)[[2]] pclass <- if (is.null(dd) || !length(dd)) pclass else factor(pclass, levels = seq(d[2]), labels = dd) } pclass } glmnet/R/deviance.glmnet.R0000644000176200001440000000013611464326427015140 0ustar liggesusersdeviance.glmnet=function(object,...){ dev=object$dev nulldev=object$nulldev (1-dev)*nulldev } glmnet/R/coxnet.deviance.R0000644000176200001440000000152711355656355015164 0ustar liggesuserscoxnet.deviance=function(pred=NULL,y,x=0,offset=pred,weights=NULL,beta=NULL){ storage.mode(x)="double" y=response.coxnet(y) ty=y$time tevent=y$event nobs=as.integer(length(ty)) nvars=as.integer(ncol(x)) if(is.null(weights))weights=rep(1.0,nobs) else weights=as.double(weights) if(is.null(offset))offset=rep(0.0,nobs) else offset=as.double(offset) if(is.null(beta)){ beta=double(0) nvec=as.integer(1) nvars=as.integer(0) } else{ beta=as.matrix(beta) nvec=as.integer(ncol(beta)) } fit=.Fortran("loglike", nobs,nvars,x,ty,tevent,offset,weights,nvec,beta, flog=double(nvec), jerr=integer(1), PACKAGE="glmnet") if(fit$jerr!=0){ errmsg=jerr(fit$jerr,maxit=0,pmax=0,family="cox") if(errmsg$fatal)stop(errmsg$msg,call.=FALSE) else warning(errmsg$msg,call.=FALSE) } -2*fit$flog } glmnet/R/coef.cv.glmnet.R0000644000176200001440000000040412065767577014720 0ustar liggesuserscoef.cv.glmnet=function(object,s=c("lambda.1se","lambda.min"),...){ if(is.numeric(s))lambda=s else if(is.character(s)){ s=match.arg(s) lambda=object[[s]] } else stop("Invalid form for s") coef(object$glmnet.fit,s=lambda,...) } glmnet/R/mrelnet.R0000644000176200001440000000406513240602077013540 0ustar liggesusersmrelnet=function(x,is.sparse,ix,jx,y,weights,offset,alpha,nobs,nvars,jd,vp,cl,ne,nx,nlam,flmin,ulam,thresh,isd,jsd,intr,vnames,maxit){ maxit=as.integer(maxit) weights=as.double(weights) ### compute the null deviance y=as.matrix(y) nr=ncol(y) if(nr>1){ responseNames=dimnames(y)[[2]] if(is.null(responseNames))responseNames=paste("y",seq(nr),sep="") } storage.mode(y)="double" if(is.null(offset)){ is.offset=FALSE} else{ offset=as.matrix(offset) storage.mode(offset)="double" if(!all.equal(dim(offset),dim(y)))stop("Offset must match dimension of y") y=y-offset is.offset=TRUE } nulldev=0 for(i in seq(nr)){ ybar=weighted.mean(y[,i],weights) nulldev=nulldev+sum(weights* (y[,i]-ybar)^2) } storage.mode(nr)="integer" fit=if(is.sparse).Fortran("multspelnet", parm=alpha,nobs,nvars,nr,x,ix,jx,y,weights,jd,vp,cl,ne,nx,nlam,flmin,ulam,thresh,isd,jsd,intr,maxit, lmu=integer(1), a0=double(nlam*nr), ca=double(nx*nlam*nr), ia=integer(nx), nin=integer(nlam), rsq=double(nlam), alm=double(nlam), nlp=integer(1), jerr=integer(1),PACKAGE="glmnet" ) else .Fortran("multelnet", parm=alpha,nobs,nvars,nr,as.double(x),y,weights,jd,vp,cl,ne,nx,nlam,flmin,ulam,thresh,isd,jsd,intr,maxit, lmu=integer(1), a0=double(nlam*nr), ca=double(nx*nlam*nr), ia=integer(nx), nin=integer(nlam), rsq=double(nlam), alm=double(nlam), nlp=integer(1), jerr=integer(1),PACKAGE="glmnet" ) if(fit$jerr!=0){ errmsg=jerr(fit$jerr,maxit,pmax=nx,family="mrelnet") if(errmsg$fatal)stop(errmsg$msg,call.=FALSE) else warning(errmsg$msg,call.=FALSE) } if(nr>1) outlist=getcoef.multinomial(fit,nvars,nx,vnames,nr,responseNames,center.intercept=FALSE) else outlist=getcoef(fit,nvars,nx,vnames) dev=fit$rsq[seq(fit$lmu)] outlist=c(outlist,list(dev.ratio=dev,nulldev=nulldev,npasses=fit$nlp,jerr=fit$jerr,offset=is.offset)) class(outlist)="mrelnet" outlist } glmnet/R/cv.mrelnet.R0000644000176200001440000000264713240602077014153 0ustar liggesuserscv.mrelnet=function(outlist,lambda,x,y,weights,offset,foldid,type.measure,grouped,keep=FALSE){ ndim=dim(y) nc=ndim[2] nobs=ndim[1] if(!is.null(offset))y=y-drop(offset) ##We dont want to extrapolate lambdas on the small side mlami=max(sapply(outlist,function(obj)min(obj$lambda))) which_lam=lambda >= mlami predmat=array(NA,c(nobs,nc,length(lambda))) nfolds=max(foldid) nlams=double(nfolds) for(i in seq(nfolds)){ which=foldid==i fitobj=outlist[[i]] fitobj$offset=FALSE preds=predict(fitobj,x[which,,drop=FALSE], s=lambda[which_lam]) nlami=sum(which_lam) predmat[which,,seq(nlami)]=preds nlams[i]=nlami } N=nobs - apply(is.na(predmat[,1,]),2,sum) bigY=array(y,dim(predmat)) cvraw=switch(type.measure, "mse"=apply((bigY-predmat)^2,c(1,3),sum), "deviance"=apply((bigY-predmat)^2,c(1,3),sum), "mae"=apply(abs(bigY-predmat),c(1,3),sum) ) if( (nobs/nfolds <3)&&grouped){ warning("Option grouped=FALSE enforced in cv.glmnet, since < 3 observations per fold",call.=FALSE) grouped=FALSE } if(grouped){ cvob=cvcompute(cvraw,weights,foldid,nlams) cvraw=cvob$cvraw;weights=cvob$weights;N=cvob$N } cvm=apply(cvraw,2,weighted.mean,w=weights,na.rm=TRUE) cvsd=sqrt(apply(scale(cvraw,cvm,FALSE)^2,2,weighted.mean,w=weights,na.rm=TRUE)/(N-1)) out=list(cvm=cvm,cvsd=cvsd,type.measure=type.measure) if(keep)out$fit.preval=predmat out } glmnet/R/check_dots.R0000644000176200001440000000116113160072664014176 0ustar liggesuserscheck_dots<- function(object,...){ thiscall=object$call ncall=names(thiscall)[-1] needarg=c("x","y","weights","offset","penalty.factor","lower.limits","upper.limits") w=match(ncall,needarg,0) needarg=needarg[w] nargs=names(list(...)) w=match(needarg,nargs,0)>0 if(!all(w)){ margs=needarg[!w] stop(paste("used coef.glmnet() or predict.glmnet() with `exact=TRUE` so must in addition supply original argument(s) ",paste(margs,collapse=" and "), " in order to safely rerun glmnet"),call.=FALSE) } invisible() } glmnet/R/plot.multnet.R0000644000176200001440000000150511774472360014545 0ustar liggesusersplot.multnet=function(x, xvar=c("norm","lambda","dev"),label=FALSE,type.coef=c("coef","2norm"),...){ xvar=match.arg(xvar) type.coef=match.arg(type.coef) beta=x$beta if(xvar=="norm"){ cnorm1=function(beta){ which=nonzeroCoef(beta) beta=as.matrix(beta[which,]) apply(abs(beta),2,sum) } norm=apply(sapply(x$beta,cnorm1),1,sum) } else norm = NULL dfmat=x$dfmat if(type.coef=="coef"){ ncl=nrow(dfmat) clnames=rownames(dfmat) for( i in seq(ncl)){ plotCoef(beta[[i]],norm,x$lambda,dfmat[i,],x$dev.ratio,label=label,xvar=xvar,ylab=paste("Coefficients: Response",clnames[i]),...) } } else { dfseq=round(apply(dfmat,2,mean),1) plotCoef(coefnorm(beta,2),norm,x$lambda,dfseq,x$dev.ratio,label=label,xvar=xvar,ylab="Coefficient 2Norms",...) } } glmnet/R/coef.glmnet.R0000644000176200001440000000015612654524015014273 0ustar liggesuserscoef.glmnet=function(object,s=NULL,exact=FALSE,...) predict(object,s=s,type="coefficients",exact=exact,...) glmnet/R/plotCoef.R0000644000176200001440000000305312177022650013642 0ustar liggesusersplotCoef=function(beta,norm,lambda,df,dev,label=FALSE,xvar=c("norm","lambda","dev"),xlab=iname,ylab="Coefficients",...){ ##beta should be in "dgCMatrix" format which=nonzeroCoef(beta) nwhich=length(which) switch(nwhich+1,#we add one to make switch work "0"={ warning("No plot produced since all coefficients zero") return() }, "1"=warning("1 or less nonzero coefficients; glmnet plot is not meaningful") ) beta=as.matrix(beta[which,,drop=FALSE]) xvar=match.arg(xvar) switch(xvar, "norm"={ index=if(missing(norm))apply(abs(beta),2,sum)else norm iname="L1 Norm" approx.f=1 }, "lambda"={ index=log(lambda) iname="Log Lambda" approx.f=0 }, "dev"= { index=dev iname="Fraction Deviance Explained" approx.f=1 } ) dotlist=list(...) type=dotlist$type if(is.null(type)) matplot(index,t(beta),lty=1,xlab=xlab,ylab=ylab,type="l",...) else matplot(index,t(beta),lty=1,xlab=xlab,ylab=ylab,...) atdf=pretty(index) ### compute df by interpolating to df at next smaller lambda ### thanks to Yunyang Qian prettydf=approx(x=index,y=df,xout=atdf,rule=2,method="constant",f=approx.f)$y # prettydf=ceiling(approx(x=index,y=df,xout=atdf,rule=2)$y) axis(3,at=atdf,labels=prettydf,tcl=NA) if(label){ nnz=length(which) xpos=max(index) pos=4 if(xvar=="lambda"){ xpos=min(index) pos=2 } xpos=rep(xpos,nnz) ypos=beta[,ncol(beta)] text(xpos,ypos,paste(which),cex=.5,pos=pos) } } glmnet/R/jerr.elnet.R0000644000176200001440000000133411746343006014141 0ustar liggesusersjerr.elnet=function(n,maxit,pmax){ if(n>0){#fatal error if(n<7777)msg="Memory allocation error; contact package maintainer" else if(n==7777)msg="All used predictors have zero variance" else if(n==10000)msg="All penalty factors are <= 0" else msg="Unknown error" list(n=n,fatal=TRUE,msg=msg) } else if(n<0){# non-fatal error if(n>-10000)msg=paste("Convergence for ",-n,"th lambda value not reached after maxit=",maxit," iterations; solutions for larger lambdas returned",sep="") if(n < -10000)msg=paste("Number of nonzero coefficients along the path exceeds pmax=",pmax, " at ",-n-10000,"th lambda value; solutions for larger lambdas returned",sep="") list(n=n,fatal=FALSE,msg=msg) } } glmnet/R/cv.coxnet.R0000644000176200001440000000360113240602077013774 0ustar liggesuserscv.coxnet <- function (outlist, lambda, x, y, weights, offset, foldid, type.measure, grouped, keep = FALSE) { if (!is.null(offset)) { is.offset = TRUE offset = drop(offset) } else is.offset = FALSE nfolds = max(foldid) if ((length(weights)/nfolds < 10) && !grouped) { warning("Option grouped=TRUE enforced for cv.coxnet, since < 3 observations per fold", call. = FALSE) grouped = TRUE } cvraw = matrix(NA, nfolds, length(lambda)) ###We dont want to extrapolate lambdas on the small side mlami=max(sapply(outlist,function(obj)min(obj$lambda))) which_lam=lambda >= mlami for (i in seq(nfolds)) { which = foldid == i fitobj = outlist[[i]] coefmat = predict(fitobj, type = "coeff",s=lambda[which_lam]) if (grouped) { plfull = coxnet.deviance(x = x, y = y, offset = offset, weights = weights, beta = coefmat) plminusk = coxnet.deviance(x = x[!which, ], y = y[!which, ], offset = offset[!which], weights = weights[!which], beta = coefmat) cvraw[i, seq(along = plfull)] = plfull - plminusk } else { plk = coxnet.deviance(x = x[which, ], y = y[which, ], offset = offset[which], weights = weights[which], beta = coefmat) cvraw[i, seq(along = plk)] = plk } } status = y[, "status"] N = nfolds - apply(is.na(cvraw), 2, sum) weights = as.vector(tapply(weights * status, foldid, sum)) cvraw = cvraw/weights cvm = apply(cvraw, 2, weighted.mean, w = weights, na.rm = TRUE) cvsd = sqrt(apply(scale(cvraw, cvm, FALSE)^2, 2, weighted.mean, w = weights, na.rm = TRUE)/(N - 1)) out = list(cvm = cvm, cvsd = cvsd, type.measure=type.measure) if (keep) warning("keep=TRUE not implemented for coxnet") out } glmnet/R/glmnet.control.R0000644000176200001440000000321112337161136015031 0ustar liggesusersglmnet.control <- function (fdev = 1e-05, devmax = 0.999, eps = 1e-06, big = 9.9e+35, mnlam = 5, pmin = 1e-09, exmx = 250, prec = 1e-10, mxit = 100, factory = FALSE) { inquiry=!nargs() if (factory) invisible(glmnet.control(fdev = 1e-05, devmax = 0.999, eps = 1e-06, big = 9.9e+35, mnlam = 5, pmin = 1e-09, exmx = 250, prec = 1e-10, mxit = 100)) else { if (!missing(fdev)) .Fortran("chg_fract_dev", as.double(fdev), PACKAGE = "glmnet") if (!missing(devmax)) .Fortran("chg_dev_max", as.double(devmax), PACKAGE = "glmnet") if (!missing(eps)) .Fortran("chg_min_flmin", as.double(eps), PACKAGE = "glmnet") if (!missing(big)) .Fortran("chg_big", as.double(big), PACKAGE = "glmnet") if (!missing(mnlam)) .Fortran("chg_min_lambdas", as.integer(mnlam), PACKAGE = "glmnet") if (!missing(pmin)) .Fortran("chg_min_null_prob", as.double(pmin), PACKAGE = "glmnet") if (!missing(exmx)) .Fortran("chg_max_exp", as.double(exmx), PACKAGE = "glmnet") if (!missing(prec) | !missing(mxit)) .Fortran("chg_bnorm", as.double(prec), as.integer(mxit), PACKAGE = "glmnet") value=c(.Fortran("get_int_parms", fdev = double(1), eps = double(1), big = double(1), mnlam = integer(1), devmax = double(1), pmin = double(1), exmx = double(1), PACKAGE = "glmnet"), .Fortran("get_bnorm", prec = double(1), mxit = integer(1), PACKAGE = "glmnet")) if(inquiry)value else invisible(value) } } glmnet/R/predict.fishnet.R0000644000176200001440000000036413240602077015161 0ustar liggesuserspredict.fishnet=function(object,newx,s=NULL,type=c("link","response","coefficients","nonzero"),exact=FALSE,newoffset,...){ type=match.arg(type) nfit=NextMethod("predict") switch(type, response=exp(nfit), nfit ) } glmnet/R/predict.coxnet.R0000644000176200001440000000253613240602077015024 0ustar liggesuserspredict.coxnet=function(object,newx,s=NULL,type=c("link","response","coefficients","nonzero"),exact=FALSE,newoffset,...){ type=match.arg(type) ###coxnet has no intercept, so we treat it separately if(missing(newx)){ if(!match(type,c("coefficients","nonzero"),FALSE))stop("You need to supply a value for 'newx'") } if(exact&&(!is.null(s))){ lambda=object$lambda which=match(s,lambda,FALSE) if(!all(which>0)){ lambda=unique(rev(sort(c(s,lambda)))) check_dots(object,...)# This fails if you don't supply the crucial arguments object=update(object,lambda=lambda,...) } } nbeta=object$beta if(!is.null(s)){ vnames=dimnames(nbeta)[[1]] dimnames(nbeta)=list(NULL,NULL) lambda=object$lambda lamlist=lambda.interp(lambda,s) nbeta=nbeta[,lamlist$left,drop=FALSE]%*%Diagonal(x=lamlist$frac) +nbeta[,lamlist$right,drop=FALSE]%*%Diagonal(x=1-lamlist$frac) dimnames(nbeta)=list(vnames,paste(seq(along=s))) } if(type=="coefficients")return(nbeta) if(type=="nonzero")return(nonzeroCoef(nbeta,bystep=TRUE)) nfit=as.matrix(newx%*%nbeta) if(object$offset){ if(missing(newoffset))stop("No newoffset provided for prediction, yet offset used in fit of glmnet",call.=FALSE) nfit=nfit+array(newoffset,dim=dim(nfit)) } switch(type, response=exp(nfit), link=nfit ) } glmnet/R/cv.lognet.R0000644000176200001440000000606013240602077013766 0ustar liggesuserscv.lognet <- function (outlist, lambda, x, y, weights, offset, foldid, type.measure, grouped, keep = FALSE) { prob_min = 1e-05 prob_max = 1 - prob_min nc = dim(y) if (is.null(nc)) { y = as.factor(y) ntab = table(y) nc = as.integer(length(ntab)) y = diag(nc)[as.numeric(y), ] } N = nrow(y) nfolds = max(foldid) if ((N/nfolds < 10) && type.measure == "auc") { warning("Too few (< 10) observations per fold for type.measure='auc' in cv.lognet; changed to type.measure='deviance'. Alternatively, use smaller value for nfolds", call. = FALSE) type.measure = cvtype("deviance","lognet") } if ((N/nfolds < 3) && grouped) { warning("Option grouped=FALSE enforced in cv.glmnet, since < 3 observations per fold", call. = FALSE) grouped = FALSE } if (!is.null(offset)) { is.offset = TRUE offset = drop(offset) } else is.offset = FALSE mlami=max(sapply(outlist,function(obj)min(obj$lambda))) which_lam=lambda >= mlami predmat = matrix(NA, nrow(y), length(lambda)) nlams = double(nfolds) for (i in seq(nfolds)) { which = foldid == i fitobj = outlist[[i]] if (is.offset) off_sub = offset[which] preds = predict(fitobj,x[which, , drop = FALSE], s=lambda[which_lam], newoffset = off_sub, type = "response") nlami = sum(which_lam) predmat[which, seq(nlami)] = preds nlams[i] = nlami } if (type.measure == "auc") { cvraw = matrix(NA, nfolds, length(lambda)) good = matrix(0, nfolds, length(lambda)) for (i in seq(nfolds)) { good[i, seq(nlams[i])] = 1 which = foldid == i for (j in seq(nlams[i])) { cvraw[i, j] = auc.mat(y[which, ], predmat[which, j], weights[which]) } } N = apply(good, 2, sum) weights = tapply(weights, foldid, sum) } else { ywt = apply(y, 1, sum) y = y/ywt weights = weights * ywt N = nrow(y) - apply(is.na(predmat), 2, sum) cvraw = switch(type.measure, mse = (y[, 1] - (1 - predmat))^2 + (y[, 2] - predmat)^2, mae = abs(y[, 1] - (1 - predmat)) + abs(y[, 2] - predmat), deviance = { predmat = pmin(pmax(predmat, prob_min), prob_max) lp = y[, 1] * log(1 - predmat) + y[, 2] * log(predmat) ly = log(y) ly[y == 0] = 0 ly = drop((y * ly) %*% c(1, 1)) 2 * (ly - lp) }, class = y[, 1] * (predmat > 0.5) + y[, 2] * (predmat <=0.5) ) if (grouped) { cvob = cvcompute(cvraw, weights, foldid, nlams) cvraw = cvob$cvraw weights = cvob$weights N = cvob$N } } cvm = apply(cvraw, 2, weighted.mean, w = weights, na.rm = TRUE) cvsd = sqrt(apply(scale(cvraw, cvm, FALSE)^2, 2, weighted.mean, w = weights, na.rm = TRUE)/(N - 1)) out = list(cvm = cvm, cvsd = cvsd, type.measure=type.measure) if (keep) out$fit.preval = predmat out } glmnet/R/getcoef.multinomial.R0000644000176200001440000000242312120527741016033 0ustar liggesusersgetcoef.multinomial=function(fit,nvars,nx,vnames,nc,classnames,center.intercept=TRUE){ lmu=fit$lmu nin=fit$nin[seq(lmu)] ninmax=max(nin) lam=fit$alm[seq(lmu)] stepnames=paste("s",seq(lmu)-1,sep="") beta.list=as.list(seq(nc)) names(beta.list)=classnames a0=matrix(fit$a0[seq(lmu*nc)],nc,lmu,dimnames=list(classnames,stepnames)) if(center.intercept){ a0=scale(a0,TRUE,FALSE) attr(a0,"scaled:center")=NULL } dfmat=a0 dd=c(nvars,lmu) if(ninmax>0){ ca=array(fit$ca[seq(nx*lmu*nc)],c(nx,nc,lmu))[seq(ninmax),,,drop=FALSE] ja=fit$ia[seq(ninmax)]#confusing but too hard to change oja=order(ja) ja=rep(ja[oja],lmu) ia=cumsum(c(1,rep(ninmax,lmu))) df=apply(abs(ca)>0,c(1,3),any) df=apply(df,2,sum) for(k in seq(nc)){ cak=ca[oja,k, ,drop=FALSE] dfmat[k,]=apply(abs(cak)>0,3,sum) beta=new("dgCMatrix",Dim=dd,Dimnames=list(vnames,stepnames),x=as.vector(cak),p=as.integer(ia-1),i=as.integer(ja-1)) beta.list[[k]]=drop0(beta) } } else{ for (k in seq(nc)) { dfmat[k, ] = rep(0,lmu) beta.list[[k]] = zeromat(nvars,lmu,vnames,stepnames) } } list(a0=a0,beta=beta.list,dfmat=dfmat,df=df,dim=dd,lambda=lam) } glmnet/R/lambda.interp.R0000644000176200001440000000204212757676772014634 0ustar liggesuserslambda.interp=function(lambda,s){ ### lambda is the index sequence that is produced by the model ### s is the new vector at which evaluations are required. ### the value is a vector of left and right indices, and a vector of fractions. ### the new values are interpolated bewteen the two using the fraction ### Note: lambda decreases. you take: ### sfrac*left+(1-sfrac*right) if(length(lambda)==1){# degenerate case of only one lambda nums=length(s) left=rep(1,nums) right=left sfrac=rep(1,nums) } else{ s[s > max(lambda)] = max(lambda) s[s < min(lambda)] = min(lambda) k=length(lambda) sfrac <- (lambda[1]-s)/(lambda[1] - lambda[k]) lambda <- (lambda[1] - lambda)/(lambda[1] - lambda[k]) coord <- approx(lambda, seq(lambda), sfrac)$y left <- floor(coord) right <- ceiling(coord) sfrac=(sfrac-lambda[right])/(lambda[left] - lambda[right]) sfrac[left==right]=1 sfrac[abs(lambda[left]-lambda[right])<.Machine$double.eps]=1 } list(left=left,right=right,frac=sfrac) } glmnet/R/zeromat.R0000644000176200001440000000040711030754736013554 0ustar liggesuserszeromat=function(nvars,lmu,vnames,stepnames){ ca=rep(0,lmu) ia=seq(lmu+1) ja=rep(1,lmu) dd=c(nvars,lmu) new("dgCMatrix", Dim = dd, Dimnames = list(vnames,stepnames), x = as.vector(ca), p = as.integer(ia - 1), i = as.integer(ja - 1)) } glmnet/R/predict.elnet.R0000644000176200001440000000022213240602077014621 0ustar liggesuserspredict.elnet=function(object,newx,s=NULL,type=c("link","response","coefficients","nonzero"),exact=FALSE,newoffset,...){ NextMethod("predict") } glmnet/R/predict.mrelnet.R0000644000176200001440000000047713240602077015174 0ustar liggesuserspredict.mrelnet=function(object, newx, s = NULL, type = c("link", "response", "coefficients", "nonzero"), exact = FALSE, newoffset, ...) { type=match.arg(type) if(type=="response")type="link" object$grouped=TRUE predict.multnet(object,newx,s,type,exact,newoffset,...) } glmnet/R/cv.multnet.R0000644000176200001440000000534313240602077014171 0ustar liggesuserscv.multnet <- function (outlist, lambda, x, y, weights, offset, foldid, type.measure, grouped, keep = FALSE) { prob_min = 1e-05 prob_max = 1 - prob_min nc = dim(y) if (is.null(nc)) { y = as.factor(y) ntab = table(y) nc = as.integer(length(ntab)) y = diag(nc)[as.numeric(y), ] } else nc = nc[2] if (!is.null(offset)) is.offset = TRUE else is.offset = FALSE mlami=max(sapply(outlist,function(obj)min(obj$lambda))) which_lam=lambda >= mlami predmat = array(NA, c(nrow(y), nc, length(lambda))) nfolds = max(foldid) nlams = double(nfolds) for (i in seq(nfolds)) { which = foldid == i fitobj = outlist[[i]] if (is.offset) off_sub = offset[which, , drop = FALSE] preds = predict(fitobj, x[which, , drop = FALSE], s=lambda[which_lam],newoffset = off_sub, type = "response") nlami = sum(which_lam) predmat[which, , seq(nlami)] = preds nlams[i] = nlami } ywt = apply(y, 1, sum) y = y/ywt weights = weights * ywt N = nrow(y) - apply(is.na(predmat[, 1, ]), 2, sum) bigY = array(y, dim(predmat)) cvraw = switch(type.measure, mse = apply((bigY - predmat)^2, c(1, 3), sum), mae = apply(abs(bigY - predmat), c(1, 3), sum), deviance = { predmat = pmin(pmax(predmat, prob_min), prob_max) lp = bigY * log(predmat) ly = bigY * log(bigY) ly[bigY == 0] = 0 apply(2 * (ly - lp), c(1, 3), sum) }, class = { classid = as.numeric(apply(predmat, 3, glmnet_softmax)) yperm = matrix(aperm(bigY, c(1, 3, 2)), ncol = nc) matrix(1 - yperm[cbind(seq(classid), classid)], ncol = length(lambda)) }) if ((nrow(y)/nfolds < 3) && grouped) { warning("Option grouped=FALSE enforced in cv.glmnet, since < 3 observations per fold", call. = FALSE) grouped = FALSE } if (grouped) { cvob = cvcompute(cvraw, weights, foldid, nlams) cvraw = cvob$cvraw weights = cvob$weights N = cvob$N } cvm = apply(cvraw, 2, weighted.mean, w = weights, na.rm = TRUE) cvsd = sqrt(apply(scale(cvraw, cvm, FALSE)^2, 2, weighted.mean, w = weights, na.rm = TRUE)/(N - 1)) out = list(cvm = cvm, cvsd = cvsd, type.measure=type.measure) if (keep) out$fit.preval = predmat out } glmnet/R/nonzeroCoef.R0000644000176200001440000000200712041143767014357 0ustar liggesusersnonzeroCoef = function (beta, bystep = FALSE) { ### bystep = FALSE means which variables were ever nonzero ### bystep = TRUE means which variables are nonzero for each step nr=nrow(beta) if (nr == 1) {#degenerate case if (bystep) apply(beta, 2, function(x) if (abs(x) > 0) 1 else NULL) else { if (any(abs(beta) > 0)) 1 else NULL } } else { beta=abs(beta)>0 # this is sparse which=seq(nr) ones=rep(1,ncol(beta)) nz=as.vector((beta%*%ones)>0) which=which[nz] if (bystep) { if(length(which)>0){ beta=as.matrix(beta[which,,drop=FALSE]) nzel = function(x, which) if (any(x)) which[x] else NULL which=apply(beta, 2, nzel, which) if(!is.list(which))which=data.frame(which)# apply can return a matrix!! which } else{ dn=dimnames(beta)[[2]] which=vector("list",length(dn)) names(which)=dn which } } else which } } glmnet/R/auc.mat.R0000644000176200001440000000026211352471334013417 0ustar liggesusersauc.mat=function(y,prob,weights=rep(1,nrow(y))){ Weights=as.vector(weights*y) ny=nrow(y) Y=rep(c(0,1),c(ny,ny)) Prob=c(prob,prob) auc(Y,Prob,Weights) } glmnet/R/jerr.coxnet.R0000644000176200001440000000131212176611766014337 0ustar liggesusersjerr.coxnet=function(n,maxit,pmax){ if(n>0){#fatal error outlist=jerr.elnet(n) if(outlist$msg!="Unknown error")return(outlist) if(n==8888)msg="All observations censored - cannot proceed" else if(n==9999)msg="No positive observation weights" else if(match(n,c(20000,30000),FALSE)) msg="Inititialization numerical error; probably too many censored observations" else msg="Unknown error" list(n=n,fatal=TRUE,msg=msg) } else if(n<0){ # non-fatal error if(n<= -30000){ msg=paste("Numerical error at ",-n-30000,"th lambda value; solutions for larger values of lambda returned",sep="") list(n=n,fatal=FALSE,msg=msg) } else jerr.elnet(n,maxit,pmax) } } glmnet/R/predict.cv.glmnet.R0000644000176200001440000000042212065770070015414 0ustar liggesuserspredict.cv.glmnet=function(object,newx,s=c("lambda.1se","lambda.min"),...){ if(is.numeric(s))lambda=s else if(is.character(s)){ s=match.arg(s) lambda=object[[s]] } else stop("Invalid form for s") predict(object$glmnet.fit,newx,s=lambda,...) } glmnet/R/jerr.R0000644000176200001440000000115612177040527013036 0ustar liggesusersjerr=function(n,maxit,pmax,family){ if(n==0) list(n=0,fatal=FALSE,msg="") else { errlist=switch(family, "gaussian"=jerr.elnet(n,maxit,pmax), "binomial"=jerr.lognet(n,maxit,pmax), "multinomial"=jerr.lognet(n,maxit,pmax), "poisson"=jerr.fishnet(n,maxit,pmax), "cox"=jerr.coxnet(n,maxit,pmax), "mrelnet"=jerr.mrelnet(n,maxit,pmax) ) names(errlist)=c("n","fatal","msg") errlist$msg=paste("from glmnet Fortran code (error code ",n, "); ",errlist$msg,sep="") errlist } } glmnet/R/getcoef.R0000644000176200001440000000252512066736174013520 0ustar liggesusersgetcoef=function(fit,nvars,nx,vnames){ lmu=fit$lmu if(lmu<1){ ## changed this to a warning message, and return an empty model warning("an empty model has been returned; probably a convergence issue") coefob=list(a0=fit$a0,beta=zeromat(nvars,as.integer(1),vnames,"s0"),df=0,dim=c(nvars,1),lambda=Inf) return(coefob) } nin=fit$nin[seq(lmu)] ninmax=max(nin) lam=fit$alm[seq(lmu)] stepnames=paste("s",seq(lmu)-1,sep="") dd=c(nvars,lmu) if(ninmax>0){ ca=matrix(fit$ca[seq(nx*lmu)],nx,lmu)[seq(ninmax),,drop=FALSE] df=apply(abs(ca)>0,2,sum) ja=fit$ia[seq(ninmax)] ####confusing but too hard to change ###glmnet builds a list of ever active variables which is nondecreasing ###Since ca was initialized to zero, no harm is done in passing a square matrix ###to new(); then when we do a drop0 it makes it really sparse oja=order(ja) ja=rep(ja[oja],lmu) ia=cumsum(c(1,rep(ninmax,lmu))) beta=drop0(new("dgCMatrix",Dim=dd,Dimnames=list(vnames,stepnames),x=as.vector(ca[oja,]),p=as.integer(ia-1),i=as.integer(ja-1))) }else { beta = zeromat(nvars,lmu,vnames,stepnames) df=rep(0,lmu) } a0=fit$a0 if(!is.null(a0)){#for Cox model a0=a0[seq(lmu)] names(a0)=stepnames } list(a0=a0,beta=beta,df=df,dim=dd,lambda=lam) } glmnet/R/cv.elnet.R0000644000176200001440000000275113240602077013610 0ustar liggesuserscv.elnet <- function (outlist, lambda, x, y, weights, offset, foldid, type.measure, grouped, keep = FALSE) { if (!is.null(offset)) y = y - drop(offset) ##We dont want to extrapolate lambdas on the small side mlami=max(sapply(outlist,function(obj)min(obj$lambda))) which_lam=lambda >= mlami predmat = matrix(NA, length(y), length(lambda)) nfolds = max(foldid) nlams = double(nfolds) for (i in seq(nfolds)) { which = foldid == i fitobj = outlist[[i]] fitobj$offset = FALSE preds = predict(fitobj, x[which, , drop = FALSE], s=lambda[which_lam]) nlami = sum(which_lam) predmat[which, seq(nlami)] = preds nlams[i] = nlami } N = length(y) - apply(is.na(predmat), 2, sum) cvraw = switch(type.measure, mse = (y - predmat)^2, deviance = (y - predmat)^2, mae = abs(y - predmat) ) if ((length(y)/nfolds < 3) && grouped) { warning("Option grouped=FALSE enforced in cv.glmnet, since < 3 observations per fold", call. = FALSE) grouped = FALSE } if (grouped) { cvob = cvcompute(cvraw, weights, foldid, nlams) cvraw = cvob$cvraw weights = cvob$weights N = cvob$N } cvm = apply(cvraw, 2, weighted.mean, w = weights, na.rm = TRUE) cvsd = sqrt(apply(scale(cvraw, cvm, FALSE)^2, 2, weighted.mean, w = weights, na.rm = TRUE)/(N - 1)) out = list(cvm = cvm, cvsd = cvsd, type.measure=type.measure) if (keep) out$fit.preval = predmat out } glmnet/R/elnet.R0000644000176200001440000000347313240602077013203 0ustar liggesuserselnet=function(x,is.sparse,ix,jx,y,weights,offset,type.gaussian=c("covariance","naive"),alpha,nobs,nvars,jd,vp,cl,ne,nx,nlam,flmin,ulam,thresh,isd,intr,vnames,maxit){ maxit=as.integer(maxit) weights=as.double(weights) type.gaussian=match.arg(type.gaussian) ka=as.integer(switch(type.gaussian, covariance=1, naive=2, )) storage.mode(y)="double" if(is.null(offset)){ is.offset=FALSE} else{ storage.mode(offset)="double" is.offset=TRUE y=y-offset } ### compute the null deviance ybar=weighted.mean(y,weights) nulldev=sum(weights* (y-ybar)^2) if(nulldev==0)stop("y is constant; gaussian glmnet fails at standardization step") fit=if(is.sparse).Fortran("spelnet", ka,parm=alpha,nobs,nvars,x,ix,jx,y,weights,jd,vp,cl,ne,nx,nlam,flmin,ulam,thresh,isd,intr,maxit, lmu=integer(1), a0=double(nlam), ca=double(nx*nlam), ia=integer(nx), nin=integer(nlam), rsq=double(nlam), alm=double(nlam), nlp=integer(1), jerr=integer(1),PACKAGE="glmnet" ) else .Fortran("elnet", ka,parm=alpha,nobs,nvars,as.double(x),y,weights,jd,vp,cl,ne,nx,nlam,flmin,ulam,thresh,isd,intr,maxit, lmu=integer(1), a0=double(nlam), ca=double(nx*nlam), ia=integer(nx), nin=integer(nlam), rsq=double(nlam), alm=double(nlam), nlp=integer(1), jerr=integer(1),PACKAGE="glmnet" ) if(fit$jerr!=0){ errmsg=jerr(fit$jerr,maxit,pmax=nx,family="gaussian") if(errmsg$fatal)stop(errmsg$msg,call.=FALSE) else warning(errmsg$msg,call.=FALSE) } outlist=getcoef(fit,nvars,nx,vnames) dev=fit$rsq[seq(fit$lmu)] outlist=c(outlist,list(dev.ratio=dev,nulldev=nulldev,npasses=fit$nlp,jerr=fit$jerr,offset=is.offset)) class(outlist)="elnet" outlist } glmnet/R/lognet.R0000644000176200001440000001017312774776003013373 0ustar liggesuserslognet=function(x,is.sparse,ix,jx,y,weights,offset,alpha,nobs,nvars,jd,vp,cl,ne,nx,nlam,flmin,ulam,thresh,isd,intr,vnames,maxit,kopt,family){ nc=dim(y) maxit=as.integer(maxit) if(is.null(nc)){ ## Need to construct a y matrix, and include the weights y=as.factor(y) ntab=table(y) minclass=min(ntab) if(minclass<=1)stop("one multinomial or binomial class has 1 or 0 observations; not allowed") if(minclass<8)warning("one multinomial or binomial class has fewer than 8 observations; dangerous ground") classnames=names(ntab) nc=as.integer(length(ntab)) y=diag(nc)[as.numeric(y),] } else{ noo=nc[1] if(noo!=nobs)stop("x and y have different number of rows in call to glmnet",call.=FALSE) nc=as.integer(nc[2]) classnames=colnames(y) } #Check for size limitations maxvars=.Machine$integer.max/(nlam*nc) if(nx>maxvars)stop(paste("Integer overflow; num_classes*num_lambda*pmax should not exceed .Machine$integer.max. Reduce pmax to be below", trunc(maxvars))) if(!missing(weights)) y=y*weights ### check if any rows of y sum to zero, and if so deal with them weights=drop(y%*%rep(1,nc)) o=weights>0 if(!all(o)){ #subset the data y=y[o,] if(is.sparse){ # we have to subset this beast with care x=sparseMatrix(i=jx,p=ix-1,x=x,dims=c(nobs,nvars))[o,,drop=FALSE] ix=as.integer(x@p+1) jx=as.integer(x@i+1) x=as.double(x@x) } else x=x[o,,drop=FALSE] nobs=sum(o) }else o=NULL if(family=="binomial"){ if(nc>2)stop("More than two classes; use multinomial family instead in call to glmnet",call.=FALSE) nc=as.integer(1) # for calling lognet y=y[,c(2,1)]#fortran lognet models the first column; we prefer the second (for 0/1 data) } storage.mode(y)="double" if(is.null(offset)){ offset=y*0 #keeps the shape of y is.offset=FALSE} else{ offset=as.matrix(offset) if(!is.null(o))offset=offset[o,,drop=FALSE]# we might have zero weights do=dim(offset) if(do[[1]]!=nobs)stop("offset should have the same number of values as observations in binomial/multinomial call to glmnet",call.=FALSE) if((do[[2]]==1)&(nc==1))offset=cbind(offset,-offset) if((family=="multinomial")&(do[[2]]!=nc))stop("offset should have same shape as y in multinomial call to glmnet",call.=FALSE) storage.mode(offset)="double" is.offset=TRUE } fit=if(is.sparse) .Fortran("splognet", parm=alpha,nobs,nvars,nc,x,ix,jx,y,offset,jd,vp,cl,ne=ne,nx,nlam,flmin,ulam,thresh,isd,intr,maxit,kopt, lmu=integer(1), a0=double(nlam*nc), ca=double(nx*nlam*nc), ia=integer(nx), nin=integer(nlam), nulldev=double(1), dev=double(nlam), alm=double(nlam), nlp=integer(1), jerr=integer(1),PACKAGE="glmnet" ) else .Fortran("lognet", parm=alpha,nobs,nvars,nc,as.double(x),y,offset,jd,vp,cl,ne,nx,nlam,flmin,ulam,thresh,isd,intr,maxit,kopt, lmu=integer(1), a0=double(nlam*nc), ca=double(nx*nlam*nc), ia=integer(nx), nin=integer(nlam), nulldev=double(1), dev=double(nlam), alm=double(nlam), nlp=integer(1), jerr=integer(1),PACKAGE="glmnet" ) if(fit$jerr!=0){ errmsg=jerr(fit$jerr,maxit,pmax=nx,family) if(errmsg$fatal)stop(errmsg$msg,call.=FALSE) else warning(errmsg$msg,call.=FALSE) } if(family=="binomial"){ outlist=getcoef(fit,nvars,nx,vnames) # outlist$a0=-outlist$a0#sign flips make 2 target class # outlist$beta=-outlist$beta#sign flips make 2 target class } else outlist=getcoef.multinomial(fit,nvars,nx,vnames,nc,classnames) dev=fit$dev[seq(fit$lmu)] outlist=c(outlist,list(dev.ratio=dev,nulldev=fit$nulldev,npasses=fit$nlp,jerr=fit$jerr,offset=is.offset,classnames=classnames)) if(family=="multinomial"){ if(kopt==2)grouped=TRUE else grouped =FALSE outlist$grouped=grouped } class(outlist)=switch(family, "binomial"="lognet", "multinomial"="multnet" ) outlist } glmnet/R/predict.glmnet.R0000644000176200001440000000320713240602077015006 0ustar liggesuserspredict.glmnet=function(object,newx,s=NULL,type=c("link","response","coefficients","nonzero","class"),exact=FALSE,newoffset,...){ type=match.arg(type) if(missing(newx)){ if(!match(type,c("coefficients","nonzero"),FALSE))stop("You need to supply a value for 'newx'") } if(exact&&(!is.null(s))){ ###we augment the lambda sequence with the new values, if they are different,and refit the model using update lambda=object$lambda which=match(s,lambda,FALSE) if(!all(which>0)){ lambda=unique(rev(sort(c(s,lambda)))) check_dots(object,...)# This fails if you don't supply the crucial arguments object=update(object,lambda=lambda,...) } } a0=t(as.matrix(object$a0)) rownames(a0)="(Intercept)" nbeta=methods::rbind2(a0,object$beta)#was rbind2 if(!is.null(s)){ vnames=dimnames(nbeta)[[1]] dimnames(nbeta)=list(NULL,NULL) lambda=object$lambda lamlist=lambda.interp(lambda,s) nbeta=nbeta[,lamlist$left,drop=FALSE]%*%Diagonal(x=lamlist$frac) +nbeta[,lamlist$right,drop=FALSE]%*%Diagonal(x=1-lamlist$frac) dimnames(nbeta)=list(vnames,paste(seq(along=s))) } if(type=="coefficients")return(nbeta) if(type=="nonzero")return(nonzeroCoef(nbeta[-1,,drop=FALSE],bystep=TRUE)) ###Check on newx if(inherits(newx, "sparseMatrix"))newx=as(newx,"dgCMatrix") nfit=as.matrix(cbind2(1,newx)%*%nbeta) if(object$offset){ if(missing(newoffset))stop("No newoffset provided for prediction, yet offset used in fit of glmnet",call.=FALSE) if(is.matrix(newoffset)&&inherits(object,"lognet")&&dim(newoffset)[[2]]==2)newoffset=newoffset[,2] nfit=nfit+array(newoffset,dim=dim(nfit)) } nfit } glmnet/R/jerr.mrelnet.R0000644000176200001440000000033312076116652014500 0ustar liggesusersjerr.mrelnet=function(n,maxit,pmax){ if(n==90000){ msg=paste("Newton stepping for bounded multivariate response did not converge") list(n=n,fatal=FALSE,msg=msg) } else jerr.elnet(n,maxit,pmax) } glmnet/R/coefnorm.R0000644000176200001440000000031511774431722013703 0ustar liggesuserscoefnorm=function(coeflist,q=1){ ###coeflist comes from mrelnet or multnet nmat=coeflist[[1]]*0 nclass=length(coeflist) for(i in seq(nclass)){ nmat=nmat+abs(coeflist[[i]])^q } nmat^(1/q) } glmnet/R/auc.R0000644000176200001440000000103313035250255012631 0ustar liggesusersauc=function(y,prob,w){ if(missing(w)){ rprob=rank(prob) n1=sum(y);n0=length(y)-n1 u=sum(rprob[y==1])-n1*(n1+1)/2 exp(log(u) - log(n1) - log(n0)) } else{ rprob=runif(length(prob)) op=order(prob,rprob)#randomize ties y=y[op] w=w[op] cw=cumsum(w) w1=w[y==1] cw1=cumsum(w1) wauc = log(sum(w1*(cw[y==1]-cw1))) sumw1 = cw1[length(cw1)] sumw2 = cw[length(cw)] - sumw1 exp(wauc - log(sumw1) - log(sumw2)) } } glmnet/R/plot.cv.glmnet.R0000644000176200001440000000132011352411560014730 0ustar liggesusersplot.cv.glmnet=function(x,sign.lambda=1,...){ cvobj=x xlab="log(Lambda)" if(sign.lambda<0)xlab=paste("-",xlab,sep="") plot.args=list(x=sign.lambda*log(cvobj$lambda),y=cvobj$cvm,ylim=range(cvobj$cvup,cvobj$cvlo),xlab=xlab,ylab=cvobj$name,type="n") new.args=list(...) if(length(new.args))plot.args[names(new.args)]=new.args do.call("plot",plot.args) error.bars(sign.lambda*log(cvobj$lambda),cvobj$cvup,cvobj$cvlo,width=0.01,col="darkgrey") points(sign.lambda*log(cvobj$lambda),cvobj$cvm,pch=20,col="red") axis(side=3,at=sign.lambda*log(cvobj$lambda),labels=paste(cvobj$nz),tick=FALSE,line=0) abline(v=sign.lambda*log(cvobj$lambda.min),lty=3) abline(v=sign.lambda*log(cvobj$lambda.1se),lty=3) invisible() } glmnet/R/print.glmnet.R0000644000176200001440000000032611464325756014523 0ustar liggesusersprint.glmnet=function(x,digits = max(3, getOption("digits") - 3),...){ cat("\nCall: ", deparse(x$call), "\n\n") print(cbind(Df=x$df,"%Dev"=signif(x$dev.ratio,digits),Lambda=signif(x$lambda,digits))) } glmnet/R/getmin.R0000644000176200001440000000045511754100341013347 0ustar liggesusersgetmin=function(lambda,cvm,cvsd){ cvmin=min(cvm,na.rm=TRUE) idmin=cvm<=cvmin lambda.min=max(lambda[idmin],na.rm=TRUE) idmin=match(lambda.min,lambda) semin=(cvm+cvsd)[idmin] idmin=cvm<=semin lambda.1se=max(lambda[idmin],na.rm=TRUE) list(lambda.min=lambda.min,lambda.1se=lambda.1se) } glmnet/vignettes/0000755000176200001440000000000013251400020013533 5ustar liggesusersglmnet/vignettes/glmnet_beta.html0000644000176200001440001641537412512167763016756 0ustar liggesusers

Glmnet Vignette

Introduction

Glmnet is a package that fits a generalized linear model via penalized maximum likelihood. The regularization path is computed for the lasso or elasticnet penalty at a grid of values for the regularization parameter lambda. The algorithm is extremely fast, and can exploit sparsity in the input matrix x. It fits linear, logistic and multinomial, poisson, and Cox regression models. A variety of predictions can be made from the fitted models. It can also fit multi-response linear regression.

The authors of glmnet are Jerome Friedman, Trevor Hastie, Rob Tibshirani and Noah Simon, and the R package is maintained by Trevor Hastie. The matlab version of glmnet is maintained by Junyang Qian. This vignette describes the usage of glmnet in R.

glmnet solves the following problem \[ \min_{\beta_0,\beta} \frac{1}{N} \sum_{i=1}^{N} w_i l(y_i,\beta_0+\beta^T x_i) + \lambda\left[(1-\alpha)||\beta||_2^2/2 + \alpha ||\beta||_1\right], \] over a grid of values of \(\lambda\) covering the entire range. Here \(l(y,\eta)\) is the negative log-likelihood contribution for observation \(i\); e.g. for the Gaussian case it is \(\frac{1}{2}(y-\eta)^2\). The elastic-net penalty is controlled by \(\alpha\), and bridges the gap between lasso (\(\alpha=1\), the default) and ridge (\(\alpha=0\)). The tuning parameter \(\lambda\) controls the overall strength of the penalty.

It is known that the ridge penalty shrinks the coefficients of correlated predictors towards each other while the lasso tends to pick one of them and discard the others. The elastic-net penalty mixes these two; if predictors are correlated in groups, an \(\alpha=0.5\) tends to select the groups in or out together. This is a higher level parameter, and users might pick a value upfront, else experiment with a few different values. One use of \(\alpha\) is for numerical stability; for example, the elastic net with \(\alpha = 1 - \epsilon\) for some small \(\epsilon > 0\) performs much like the lasso, but removes any degeneracies and wild behavior caused by extreme correlations.

The glmnet algorithms use cyclical coordinate descent, which successively optimizes the objective function over each parameter with others fixed, and cycles repeatedly until convergence. The package also makes use of the strong rules for efficient restriction of the active set. Due to highly efficient updates and techniques such as warm starts and active-set convergence, our algorithms can compute the solution path very fast.

The code can handle sparse input-matrix formats, as well as range constraints on coefficients. The core of glmnet is a set of fortran subroutines, which make for very fast execution.

The package also includes methods for prediction and plotting, and a function that performs K-fold cross-validation.

Installation

Like many other R packages, the simplest way to obtain glmnet is to install it directly from CRAN. Type the following command in R console:

install.packages("glmnet", repos = "http://cran.us.r-project.org")

Users may change the repos options depending on their locations and preferences. Other options such as the directories where to install the packages can be altered in the command. For more details, see help(install.packages).

Here the R package has been downloaded and installed to the default directories.

Alternatively, users can download the package source at http://cran.r-project.org/web/packages/glmnet/index.html and type Unix commands to install it to the desired location.

Back to Top

Quick Start

The purpose of this section is to give users a general sense of the package, including the components, what they do and some basic usage. We will briefly go over the main functions, see the basic operations and have a look at the outputs. Users may have a better idea after this section what functions are available, which one to choose, or at least where to seek help. More details are given in later sections.

First, we load the glmnet package:

library(glmnet)
## Loading required package: Matrix
## Loading required package: foreach
## Loaded glmnet 2.0-1

The default model used in the package is the Guassian linear model or “least squares”, which we will demonstrate in this section. We load a set of data created beforehand for illustration. Users can either load their own data or use those saved in the workspace.

data(QuickStartExample)

The command loads an input matrix x and a response vector y from this saved R data archive.

We fit the model using the most basic call to glmnet.

fit = glmnet(x, y)

“fit” is an object of class glmnet that contains all the relevant information of the fitted model for further use. We do not encourage users to extract the components directly. Instead, various methods are provided for the object such as plot, print, coef and predict that enable us to execute those tasks more elegantly.

We can visualize the coefficients by executing the plot function:

plot(fit)

Each curve corresponds to a variable. It shows the path of its coefficient against the \(\ell_1\)-norm of the whole coefficient vector at as \(\lambda\) varies. The axis above indicates the number of nonzero coefficients at the current \(\lambda\), which is the effective degrees of freedom (df) for the lasso. Users may also wish to annotate the curves; this can be done by setting label = TRUE in the plot command.

A summary of the glmnet path at each step is displayed if we just enter the object name or use the print function:

print(fit)
## 
## Call:  glmnet(x = x, y = y) 
## 
##       Df    %Dev   Lambda
##  [1,]  0 0.00000 1.631000
##  [2,]  2 0.05528 1.486000
##  [3,]  2 0.14590 1.354000
##  [4,]  2 0.22110 1.234000
##  [5,]  2 0.28360 1.124000
##  [6,]  2 0.33540 1.024000
##  [7,]  4 0.39040 0.933200
##  [8,]  5 0.45600 0.850300
##  [9,]  5 0.51540 0.774700
## [10,]  6 0.57350 0.705900
## [11,]  6 0.62550 0.643200
## [12,]  6 0.66870 0.586100
## [13,]  6 0.70460 0.534000
## [14,]  6 0.73440 0.486600
## [15,]  7 0.76210 0.443300
## [16,]  7 0.78570 0.404000
## [17,]  7 0.80530 0.368100
## [18,]  7 0.82150 0.335400
## [19,]  7 0.83500 0.305600
## [20,]  7 0.84620 0.278400
## [21,]  7 0.85550 0.253700
## [22,]  7 0.86330 0.231200
## [23,]  8 0.87060 0.210600
## [24,]  8 0.87690 0.191900
## [25,]  8 0.88210 0.174900
## [26,]  8 0.88650 0.159300
## [27,]  8 0.89010 0.145200
## [28,]  8 0.89310 0.132300
## [29,]  8 0.89560 0.120500
## [30,]  8 0.89760 0.109800
## [31,]  9 0.89940 0.100100
## [32,]  9 0.90100 0.091170
## [33,]  9 0.90230 0.083070
## [34,]  9 0.90340 0.075690
## [35,] 10 0.90430 0.068970
## [36,] 11 0.90530 0.062840
## [37,] 11 0.90620 0.057260
## [38,] 12 0.90700 0.052170
## [39,] 15 0.90780 0.047540
## [40,] 16 0.90860 0.043310
## [41,] 16 0.90930 0.039470
## [42,] 16 0.90980 0.035960
## [43,] 17 0.91030 0.032770
## [44,] 17 0.91070 0.029850
## [45,] 18 0.91110 0.027200
## [46,] 18 0.91140 0.024790
## [47,] 19 0.91170 0.022580
## [48,] 19 0.91200 0.020580
## [49,] 19 0.91220 0.018750
## [50,] 19 0.91240 0.017080
## [51,] 19 0.91250 0.015570
## [52,] 19 0.91260 0.014180
## [53,] 19 0.91270 0.012920
## [54,] 19 0.91280 0.011780
## [55,] 19 0.91290 0.010730
## [56,] 19 0.91290 0.009776
## [57,] 19 0.91300 0.008908
## [58,] 19 0.91300 0.008116
## [59,] 19 0.91310 0.007395
## [60,] 19 0.91310 0.006738
## [61,] 19 0.91310 0.006140
## [62,] 20 0.91310 0.005594
## [63,] 20 0.91310 0.005097
## [64,] 20 0.91310 0.004644
## [65,] 20 0.91320 0.004232
## [66,] 20 0.91320 0.003856
## [67,] 20 0.91320 0.003513

It shows from left to right the number of nonzero coefficients (Df), the percent (of null) deviance explained (%dev) and the value of \(\lambda\) (Lambda). Although by default glmnet calls for 100 values of lambda the program stops early if `%dev% does not change sufficently from one lambda to the next (typically near the end of the path.)

We can obtain the actual coefficients at one or more \(\lambda\)’s within the range of the sequence:

coef(fit,s=0.1)
## 21 x 1 sparse Matrix of class "dgCMatrix"
##                        1
## (Intercept)  0.150928072
## V1           1.320597195
## V2           .          
## V3           0.675110234
## V4           .          
## V5          -0.817411518
## V6           0.521436671
## V7           0.004829335
## V8           0.319415917
## V9           .          
## V10          .          
## V11          0.142498519
## V12          .          
## V13          .          
## V14         -1.059978702
## V15          .          
## V16          .          
## V17          .          
## V18          .          
## V19          .          
## V20         -1.021873704

(why s and not lambda? In case later we want to allow one to specify the model size in other ways.) Users can also make predictions at specific \(\lambda\)’s with new input data:

nx = matrix(rnorm(10*20),10,20)
predict(fit,newx=nx,s=c(0.1,0.05))
##                 1           2
##  [1,] -2.64769691 -2.86002795
##  [2,]  4.21866923  4.34564149
##  [3,] -0.72883713 -0.76989481
##  [4,]  3.44097615  3.75062144
##  [5,]  1.05366642  0.96485931
##  [6,] -1.79439698 -2.00667683
##  [7,]  0.08439509  0.11698066
##  [8,]  5.24921127  5.50753178
##  [9,]  1.34115245  1.31133010
## [10,]  0.03387652  0.05403399

The function glmnet returns a sequence of models for the users to choose from. In many cases, users may prefer the software to select one of them. Cross-validation is perhaps the simplest and most widely used method for that task.

cv.glmnet is the main function to do cross-validation here, along with various supporting methods such as plotting and prediction. We still act on the sample data loaded before.

cvfit = cv.glmnet(x, y)

cv.glmnet returns a cv.glmnet object, which is “cvfit” here, a list with all the ingredients of the cross-validation fit. As for glmnet, we do not encourage users to extract the components directly except for viewing the selected values of \(\lambda\). The package provides well-designed functions for potential tasks.

We can plot the object.

plot(cvfit)

It includes the cross-validation curve (red dotted line), and upper and lower standard deviation curves along the \(\lambda\) sequence (error bars). Two selected \(\lambda\)’s are indicated by the vertical dotted lines (see below).

We can view the selected \(\lambda\)’s and the corresponding coefficients. For example,

cvfit$lambda.min
## [1] 0.07569327

lambda.min is the value of \(\lambda\) that gives minimum mean cross-validated error. The other \(\lambda\) saved is lambda.1se, which gives the most regularized model such that error is within one standard error of the minimum. To use that, we only need to replace lambda.min with lambda.1se above.

coef(cvfit, s = "lambda.min")
## 21 x 1 sparse Matrix of class "dgCMatrix"
##                       1
## (Intercept)  0.14867414
## V1           1.33377821
## V2           .         
## V3           0.69787701
## V4           .         
## V5          -0.83726751
## V6           0.54334327
## V7           0.02668633
## V8           0.33741131
## V9           .         
## V10          .         
## V11          0.17105029
## V12          .         
## V13          .         
## V14         -1.07552680
## V15          .         
## V16          .         
## V17          .         
## V18          .         
## V19          .         
## V20         -1.05278699

Note that the coefficients are represented in the sparse matrix format. The reason is that the solutions along the regularization path are often sparse, and hence it is more efficient in time and space to use a sparse format. If you prefer non-sparse format, pipe the output through as.matrix().

Predictions can be made based on the fitted cv.glmnet object. Let’s see a toy example.

predict(cvfit, newx = x[1:5,], s = "lambda.min")
##               1
## [1,] -1.3638848
## [2,]  2.5713428
## [3,]  0.5729785
## [4,]  1.9881422
## [5,]  1.5179882

newx is for the new input matrix and s, as before, is the value(s) of \(\lambda\) at which predictions are made.

That is the end of glmnet 101. With the tools introduced so far, users are able to fit the entire elastic net family, including ridge regression, using squared-error loss. In the package, there are many more options that give users a great deal of flexibility. To learn more, move on to later sections.

Back to Top

Linear Regression

Linear regression here refers to two families of models. One is gaussian, the Gaussian family, and the other is mgaussian, the multiresponse Gaussian family. We first discuss the ordinary Gaussian and the multiresponse one after that.

Gaussian Family

gaussian is the default family option in the function glmnet. Suppose we have observations \(x_i \in \mathbb{R}^p\) and the responses \(y_i \in \mathbb{R}, i = 1, \ldots, N\). The objective function for the Gaussian family is \[ \min_{(\beta_0, \beta) \in \mathbb{R}^{p+1}}\frac{1}{2N} \sum_{i=1}^N (y_i -\beta_0-x_i^T \beta)^2+\lambda \left[ (1-\alpha)||\beta||_2^2/2 + \alpha||\beta||_1\right], \] where \(\lambda \geq 0\) is a complexity parameter and \(0 \leq \alpha \leq 1\) is a compromise between ridge (\(\alpha = 0\)) and lasso (\(\alpha = 1\)).

Coordinate descent is applied to solve the problem. Specifically, suppose we have current estimates \(\tilde{\beta_0}\) and \(\tilde{\beta}_\ell\) \(\forall j\in 1,]\ldots,p\). By computing the gradient at \(\beta_j = \tilde{\beta}_j\) and simple calculus, the update is \[ \tilde{\beta}_j \leftarrow \frac{S(\frac{1}{N}\sum_{i=1}^N x_{ij}(y_i-\tilde{y}_i^{(j)}),\lambda \alpha)}{1+\lambda(1-\alpha)}, \] where \(\tilde{y}_i^{(j)} = \tilde{\beta}_0 + \sum_{\ell \neq j} x_{i\ell} \tilde{\beta}_\ell\), and \(S(z, \gamma)\) is the soft-thresholding operator with value \(\text{sign}(z)(|z|-\gamma)_+\).

This formula above applies when the x variables are standardized to have unit variance (the default); it is slightly more complicated when they are not. Note that for “family=gaussian”, glmnet standardizes \(y\) to have unit variance before computing its lambda sequence (and then unstandardizes the resulting coefficients); if you wish to reproduce/compare results with other software, best to supply a standardized \(y\) first (Using the “1/N” variance formula).

glmnet provides various options for users to customize the fit. We introduce some commonly used options here and they can be specified in the glmnet function.

  • alpha is for the elastic-net mixing parameter \(\alpha\), with range \(\alpha \in [0,1]\). \(\alpha = 1\) is the lasso (default) and \(\alpha = 0\) is the ridge.

  • weights is for the observation weights. Default is 1 for each observation. (Note: glmnet rescales the weights to sum to N, the sample size.)

  • nlambda is the number of \(\lambda\) values in the sequence. Default is 100.

  • lambda can be provided, but is typically not and the program constructs a sequence. When automatically generated, the \(\lambda\) sequence is determined by lambda.max and lambda.min.ratio. The latter is the ratio of smallest value of the generated \(\lambda\) sequence (say lambda.min) to lambda.max. The program then generated nlambda values linear on the log scale from lambda.max down to lambda.min. lambda.max is not given, but easily computed from the input \(x\) and \(y\); it is the smallest value for lambda such that all the coefficients are zero. For alpha=0 (ridge) lambda.max would be \(\infty\); hence for this case we pick a value corresponding to a small value for alpha close to zero.)

  • standardize is a logical flag for x variable standardization, prior to fitting the model sequence. The coefficients are always returned on the original scale. Default is standardize=TRUE.

For more information, type help(glmnet) or simply ?glmnet.

As an example, we set \(\alpha = 0.2\) (more like a ridge regression), and give double weights to the latter half of the observations. To avoid too long a display here, we set nlambda to 20. In practice, however, the number of values of \(\lambda\) is recommended to be 100 (default) or more. In most cases, it does not come with extra cost because of the warm-starts used in the algorithm, and for nonlinear models leads to better convergence properties.

fit = glmnet(x, y, alpha = 0.2, weights = c(rep(1,50),rep(2,50)), nlambda = 20)

We can then print the glmnet object.

print(fit)
## 
## Call:  glmnet(x = x, y = y, weights = c(rep(1, 50), rep(2, 50)), alpha = 0.2,      nlambda = 20) 
## 
##       Df   %Dev   Lambda
##  [1,]  0 0.0000 7.939000
##  [2,]  4 0.1789 4.889000
##  [3,]  7 0.4445 3.011000
##  [4,]  7 0.6567 1.854000
##  [5,]  8 0.7850 1.142000
##  [6,]  9 0.8539 0.703300
##  [7,] 10 0.8867 0.433100
##  [8,] 11 0.9025 0.266700
##  [9,] 14 0.9101 0.164300
## [10,] 17 0.9138 0.101200
## [11,] 17 0.9154 0.062300
## [12,] 17 0.9160 0.038370
## [13,] 19 0.9163 0.023630
## [14,] 20 0.9164 0.014550
## [15,] 20 0.9164 0.008962
## [16,] 20 0.9165 0.005519
## [17,] 20 0.9165 0.003399

This displays the call that produced the object fit and a three-column matrix with columns Df (the number of nonzero coefficients), %dev (the percent deviance explained) and Lambda (the corresponding value of \(\lambda\)).

(Note that the digits option can used to specify significant digits in the printout.)

Here the actual number of \(\lambda\)’s here is less than specified in the call. The reason lies in the stopping criteria of the algorithm. According to the default internal settings, the computations stop if either the fractional change in deviance down the path is less than \(10^{-5}\) or the fraction of explained deviance reaches \(0.999\). From the last few lines , we see the fraction of deviance does not change much and therefore the computation ends when meeting the stopping criteria. We can change such internal parameters. For details, see the Appendix section or type help(glmnet.control).

We can plot the fitted object as in the previous section. There are more options in the plot function.

Users can decide what is on the X-axis. xvar allows three measures: “norm” for the \(\ell_1\)-norm of the coefficients (default), “lambda” for the log-lambda value and “dev” for %deviance explained.

Users can also label the curves with variable sequence numbers simply by setting label = TRUE.

Let’s plot “fit” against the log-lambda value and with each curve labeled.

plot(fit, xvar = "lambda", label = TRUE)

Now when we plot against %deviance we get a very different picture. This is percent deviance explained on the training data. What we see here is that toward the end of the path this value are not changing much, but the coefficients are “blowing up” a bit. This lets us focus attention on the parts of the fit that matter. This will especially be true for other models, such as logistic regression.

plot(fit, xvar = "dev", label = TRUE)

We can extract the coefficients and make predictions at certain values of \(\lambda\). Two commonly used options are:

  • s specifies the value(s) of \(\lambda\) at which extraction is made.

  • exact indicates whether the exact values of coefficients are desired or not. That is, if exact = TRUE, and predictions are to be made at values of s not included in the original fit, these values of s are merged with object$lambda, and the model is refit before predictions are made. If exact=FALSE (default), then the predict function uses linear interpolation to make predictions for values of s that do not coincide with lambdas used in the fitting algorithm.

A simple example is:

any(fit$lambda == 0.5)
## [1] FALSE
coef.exact = coef(fit, s = 0.5, exact = TRUE)
coef.apprx = coef(fit, s = 0.5, exact = FALSE)
cbind2(coef.exact, coef.apprx)
## 21 x 2 sparse Matrix of class "dgCMatrix"
##                       1            1
## (Intercept)  0.19657091  0.199098747
## V1           1.17495906  1.174650452
## V2           .           .          
## V3           0.52934375  0.531934651
## V4           .           .          
## V5          -0.76126245 -0.760959480
## V6           0.46627405  0.468209413
## V7           0.06148079  0.061926756
## V8           0.38048793  0.380301491
## V9           .           .          
## V10          .           .          
## V11          0.14213614  0.143260991
## V12          .           .          
## V13          .           .          
## V14         -0.91090226 -0.911207368
## V15          .           .          
## V16          .           .          
## V17          .           .          
## V18          .           0.009196628
## V19          .           .          
## V20         -0.86099392 -0.863117051

The left column is for exact = TRUE and the right for FALSE. We see from the above that 0.01 is not in the sequence and that hence there are some difference, though not much. Linear interpolation is mostly enough if there are no special requirements.

Users can make predictions from the fitted object. In addition to the options in coef, the primary argument is newx, a matrix of new values for x. The type option allows users to choose the type of prediction: * “link” gives the fitted values

  • “response” the sames as “link” for “gaussian” family.

  • “coefficients” computes the coefficients at values of s

  • “nonzero” retuns a list of the indices of the nonzero coefficients for each value of s.

For example,

predict(fit, newx = x[1:5,], type = "response", s = 0.05)
##               1
## [1,] -0.9802591
## [2,]  2.2992453
## [3,]  0.6010886
## [4,]  2.3572668
## [5,]  1.7520421

gives the fitted values for the first 5 observations at \(\lambda = 0.05\). If multiple values of s are supplied, a matrix of predictions is produced.

Users can customize K-fold cross-validation. In addition to all the glmnet parameters, cv.glmnet has its special parameters including nfolds (the number of folds), foldid (user-supplied folds), type.measure(the loss used for cross-validation): * “deviance” or “mse” uses squared loss

  • “mae” uses mean absolute error

As an example,

cvfit = cv.glmnet(x, y, type.measure = "mse", nfolds = 20)

does 20-fold cross-validation, based on mean squared error criterion (default though).

Parallel computing is also supported by cv.glmnet. To make it work, users must register parallel beforehand. We give a simple example of comparison here. Unfortunately, the package doMC is not available on Windows platforms (it is on others), so we cannot run the code here, but we make it looks as if we have.

require(doMC)
registerDoMC(cores=2)
X = matrix(rnorm(1e4 * 200), 1e4, 200)
Y = rnorm(1e4)
system.time(cv.glmnet(X, Y))
##    user  system elapsed 
##   2.440   0.080   2.518
system.time(cv.glmnet(X, Y, parallel = TRUE))
##    user  system elapsed 
##   2.450   0.157   1.567

As suggested from the above, parallel computing can significantly speed up the computation process especially for large-scale problems.

Functions coef and predict on cv.glmnet object are similar to those for a glmnet object, except that two special strings are also supported by s (the values of \(\lambda\) requested): * “lambda.1se”: the largest \(\lambda\) at which the MSE is within one standard error of the minimal MSE.

  • “lambda.min”: the \(\lambda\) at which the minimal MSE is achieved.
cvfit$lambda.min
## [1] 0.07569327
coef(cvfit, s = "lambda.min")
## 21 x 1 sparse Matrix of class "dgCMatrix"
##                       1
## (Intercept)  0.14867414
## V1           1.33377821
## V2           .         
## V3           0.69787701
## V4           .         
## V5          -0.83726751
## V6           0.54334327
## V7           0.02668633
## V8           0.33741131
## V9           .         
## V10          .         
## V11          0.17105029
## V12          .         
## V13          .         
## V14         -1.07552680
## V15          .         
## V16          .         
## V17          .         
## V18          .         
## V19          .         
## V20         -1.05278699
predict(cvfit, newx = x[1:5,], s = "lambda.min")
##               1
## [1,] -1.3638848
## [2,]  2.5713428
## [3,]  0.5729785
## [4,]  1.9881422
## [5,]  1.5179882

Users can control the folds used. Here we use the same folds so we can also select a value for \(\alpha\).

foldid=sample(1:10,size=length(y),replace=TRUE)
cv1=cv.glmnet(x,y,foldid=foldid,alpha=1)
cv.5=cv.glmnet(x,y,foldid=foldid,alpha=.5)
cv0=cv.glmnet(x,y,foldid=foldid,alpha=0)

There are no built-in plot functions to put them all on the same plot, so we are on our own here:

par(mfrow=c(2,2))
plot(cv1);plot(cv.5);plot(cv0)
plot(log(cv1$lambda),cv1$cvm,pch=19,col="red",xlab="log(Lambda)",ylab=cv1$name)
points(log(cv.5$lambda),cv.5$cvm,pch=19,col="grey")
points(log(cv0$lambda),cv0$cvm,pch=19,col="blue")
legend("topleft",legend=c("alpha= 1","alpha= .5","alpha 0"),pch=19,col=c("red","grey","blue"))

We see that lasso (alpha=1) does about the best here. We also see that the range of lambdas used differs with alpha.

Coefficient upper and lower bounds

These are recently added features that enhance the scope of the models. Suppose we want to fit our model, but limit the coefficients to be bigger than -0.7 and less than 0.5. This is easily achieved via the upper.limits and lower.limits arguments:

tfit=glmnet(x,y,lower=-.7,upper=.5)
plot(tfit)

These are rather arbitrary limits; often we want the coefficients to be positive, so we can set only lower.limit to be 0. (Note, the lower limit must be no bigger than zero, and the upper limit no smaller than zero.) These bounds can be a vector, with different values for each coefficient. If given as a scalar, the same number gets recycled for all.

Penalty factors

This argument allows users to apply separate penalty factors to each coefficient. Its default is 1 for each parameter, but other values can be specified. In particular, any variable with penalty.factor equal to zero is not penalized at all! Let \(v_j\) denote the penalty factor for \(j\) th variable. The penalty term becomes \[ \lambda \sum_{j=1}^p \boldsymbol{v_j} P_\alpha(\beta_j) = \lambda \sum_{j=1}^p \boldsymbol{v_j} \left[ (1-\alpha)\frac{1}{2} \beta_j^2 + \alpha |\beta_j| \right]. \] Note the penalty factors are internally rescaled to sum to nvars.

This is very useful when people have prior knowledge or preference over the variables. In many cases, some variables may be so important that one wants to keep them all the time, which can be achieved by setting corresponding penalty factors to 0:

p.fac = rep(1, 20)
p.fac[c(5, 10, 15)] = 0
pfit = glmnet(x, y, penalty.factor = p.fac)
plot(pfit, label = TRUE)

We see from the labels that the three variables with 0 penalty factors always stay in the model, while the others follow typical regularization paths and shrunken to 0 eventually.

Some other useful arguments. exclude allows one to block certain variables from being the model at all. Of course, one could simply subset these out of x, but sometimes exclude is more useful, since it returns a full vector of coefficients, just with the excluded ones set to zero. There is also an intercept argument which defaults to TRUE; if FALSE the intercept is forced to be zero.

Customizing plots

Sometimes, especially when the number of variables is small, we want to add variable labels to a plot. Since glmnet is intended primarily for wide data, this is not supprted in plot.glmnet. However, it is easy to do, as the following little toy example shows.

We first generate some data, with 10 variables, and for lack of imagination and ease we give them simple character names. We then fit a glmnet model, and make the standard plot.

set.seed(101)
x=matrix(rnorm(1000),100,10)
y=rnorm(100)
vn=paste("var",1:10)
fit=glmnet(x,y)
plot(fit)

We wish to label the curves with the variable names. Here s a simple way to do this, using the axis command in R (and a little research into how to customize it). We need to have the positions of the coefficients at the end of the path, and we need to make some space using the par command, so that our labels will fit in. This requires knowing how long your labels are, but here they are all quite short.

par(mar=c(4.5,4.5,1,4))
plot(fit)
vnat=coef(fit)
vnat=vnat[-1,ncol(vnat)] # remove the intercept, and get the coefficients at the end of the path
axis(4, at=vnat,line=-.5,label=vn,las=1,tick=FALSE, cex.axis=0.5) 

We have done nothing here to avoid overwriting of labels, in the event that they are close together. This would be a bit more work, but perhaps best left alone, anyway.

Multiresponse Gaussian Family

The multiresponse Gaussian family is obtained using family = "mgaussian" option in glmnet. It is very similar to the single-response case above. This is useful when there are a number of (correlated) responses - the so-called “multi-task learning” problem. Here the sharing involves which variables are selected, since when a variable is selected, a coefficient is fit for each response. Most of the options are the same, so we focus here on the differences with the single response model.

Obviously, as the name suggests, \(y\) is not a vector, but a matrix of quantitative responses in this section. The coefficients at each value of lambda are also a matrix as a result.

Here we solve the following problem: \[ \min_{(\beta_0, \beta) \in \mathbb{R}^{(p+1)\times K}}\frac{1}{2N} \sum_{i=1}^N ||y_i -\beta_0-\beta^T x_i||^2_F+\lambda \left[ (1-\alpha)||\beta||_F^2/2 + \alpha\sum_{j=1}^p||\beta_j||_2\right]. \] Here \(\beta_j\) is the jth row of the \(p\times K\) coefficient matrix \(\beta\), and we replace the absolute penalty on each single coefficient by a group-lasso penalty on each coefficient K-vector \(\beta_j\) for a single predictor \(x_j\).

We use a set of data generated beforehand for illustration.

data(MultiGaussianExample)

We fit the data, with an object “mfit” returned.

mfit = glmnet(x, y, family = "mgaussian")

For multiresponse Gaussian, the options in glmnet are almost the same as the single-response case, such as alpha, weights, nlambda, standardize. A exception to be noticed is that standardize.response is only for mgaussian family. The default value is FALSE. If standardize.response = TRUE, it standardizes the response variables.

To visualize the coefficients, we use the plot function.

plot(mfit, xvar = "lambda", label = TRUE, type.coef = "2norm")

Note that we set type.coef = "2norm". Under this setting, a single curve is plotted per variable, with value equal to the \(\ell_2\) norm. The default setting is type.coef = "coef", where a coefficient plot is created for each response (multiple figures).

xvar and label are two other options besides ordinary graphical parameters. They are the same as the single-response case.

We can extract the coefficients at requested values of \(\lambda\) by using the function coef and make predictions by predict. The usage is similar and we only provide an example of predict here.

predict(mfit, newx = x[1:5,], s = c(0.1, 0.01))
## , , 1
## 
##              y1         y2         y3       y4
## [1,] -4.7106263 -1.1634574  0.6027634 3.740989
## [2,]  4.1301735 -3.0507968 -1.2122630 4.970141
## [3,]  3.1595229 -0.5759621  0.2607981 2.053976
## [4,]  0.6459242  2.1205605 -0.2252050 3.146286
## [5,] -1.1791890  0.1056262 -7.3352965 3.248370
## 
## , , 2
## 
##              y1         y2         y3       y4
## [1,] -4.6415158 -1.2290282  0.6118289 3.779521
## [2,]  4.4712843 -3.2529658 -1.2572583 5.266039
## [3,]  3.4735228 -0.6929231  0.4684037 2.055574
## [4,]  0.7353311  2.2965083 -0.2190297 2.989371
## [5,] -1.2759930  0.2892536 -7.8259206 3.205211

The prediction result is saved in a three-dimensional array with the first two dimensions being the prediction matrix for each response variable and the third indicating the response variables.

We can also do k-fold cross-validation. The options are almost the same as the ordinary Gaussian family and we do not expand here.

cvmfit = cv.glmnet(x, y, family = "mgaussian")

We plot the resulting cv.glmnet object “cvmfit”.

plot(cvmfit)

To show explicitly the selected optimal values of \(\lambda\), type

cvmfit$lambda.min
## [1] 0.04731812
cvmfit$lambda.1se
## [1] 0.1316655

As before, the first one is the value at which the minimal mean squared error is achieved and the second is for the most regularized model whose mean squared error is within one standard error of the minimal.

Prediction for cv.glmnet object works almost the same as for glmnet object. We omit the details here.

Back to Top

Logistic Regression

Logistic regression is another widely-used model when the response is categorical. If there are two possible outcomes, we use the binomial distribution, else we use the multinomial.

Binomial Models

For the binomial model, suppose the response variable takes value in \(\mathcal{G}=\{1,2\}\). Denote \(y_i = I(g_i=1)\). We model \[\mbox{Pr}(G=2|X=x)+\frac{e^{\beta_0+\beta^Tx}}{1+e^{\beta_0+\beta^Tx}},\] which can be written in the following form \[\log\frac{\mbox{Pr}(G=2|X=x)}{\mbox{Pr}(G=1|X=x)}=\beta_0+\beta^Tx,\] the so-called “logistic” or log-odds transformation.

The objective function for the penalized logistic regression uses the negative binomial log-likelihood, and is \[ \min_{(\beta_0, \beta) \in \mathbb{R}^{p+1}} -\left[\frac{1}{N} \sum_{i=1}^N y_i \cdot (\beta_0 + x_i^T \beta) - \log (1+e^{(\beta_0+x_i^T \beta)})\right] + \lambda \big[ (1-\alpha)||\beta||_2^2/2 + \alpha||\beta||_1\big]. \] Logistic regression is often plagued with degeneracies when \(p > N\) and exhibits wild behavior even when \(N\) is close to \(p\); the elastic-net penalty alleviates these issues, and regularizes and selects variables as well.

Our algorithm uses a quadratic approximation to the log-likelihood, and then coordinate descent on the resulting penalized weighted least-squares problem. These constitute an outer and inner loop.

For illustration purpose, we load pre-generated input matrix x and the response vector y from the data file.

data(BinomialExample)

The input matrix \(x\) is the same as other families. For binomial logistic regression, the response variable \(y\) should be either a factor with two levels, or a two-column matrix of counts or proportions.

Other optional arguments of glmnet for binomial regression are almost same as those for Gaussian family. Don’t forget to set family option to “binomial”.

fit = glmnet(x, y, family = "binomial")

Like before, we can print and plot the fitted object, extract the coefficients at specific \(\lambda\)’s and also make predictions. For plotting, the optional arguments such as xvar and label are similar to the Gaussian. We plot against the deviance explained and show the labels.

plot(fit, xvar = "dev", label = TRUE)

Prediction is a little different for logistic from Gaussian, mainly in the option type. “link” and “response” are never equivalent and “class” is only available for logistic regression. In summary, * “link” gives the linear predictors

  • “response” gives the fitted probabilities

  • “class” produces the class label corresponding to the maximum probability.

  • “coefficients” computes the coefficients at values of s

  • “nonzero” retuns a list of the indices of the nonzero coefficients for each value of s.

For “binomial” models, results (“link”, “response”, “coefficients”, “nonzero”) are returned only for the class corresponding to the second level of the factor response.

In the following example, we make prediction of the class labels at \(\lambda = 0.05, 0.01\).

predict(fit, newx = x[1:5,], type = "class", s = c(0.05, 0.01))
##      1   2  
## [1,] "0" "0"
## [2,] "1" "1"
## [3,] "1" "1"
## [4,] "0" "0"
## [5,] "1" "1"

For logistic regression, cv.glmnet has similar arguments and usage as Gaussian. nfolds, weights, lambda, parallel are all available to users. There are some differences in type.measure: “deviance” and “mse” do not both mean squared loss and “class” is enabled. Hence, * “mse” uses squared loss.

  • “deviance” uses actual deviance.

  • “mae” uses mean absolute error.

  • “class” gives misclassification error.

  • “auc” (for two-class logistic regression ONLY) gives area under the ROC curve.

For example,

cvfit = cv.glmnet(x, y, family = "binomial", type.measure = "class")

It uses misclassification error as the criterion for 10-fold cross-validation.

We plot the object and show the optimal values of \(\lambda\).

plot(cvfit)

cvfit$lambda.min
## [1] 0.0147554
cvfit$lambda.1se
## [1] 0.02578548

coef and predict are simliar to the Gaussian case and we omit the details. We review by some examples.

coef(cvfit, s = "lambda.min")
## 31 x 1 sparse Matrix of class "dgCMatrix"
##                       1
## (Intercept)  0.24371065
## V1           0.06897051
## V2           0.66252343
## V3          -0.54275157
## V4          -1.13692797
## V5          -0.19143183
## V6          -0.95852340
## V7           .         
## V8          -0.56528880
## V9           0.77454157
## V10         -1.45079395
## V11         -0.04363484
## V12         -0.06893736
## V13          .         
## V14          .         
## V15          .         
## V16          0.36685293
## V17          .         
## V18         -0.04013948
## V19          .         
## V20          .         
## V21          .         
## V22          0.20882114
## V23          0.34014021
## V24          .         
## V25          0.66310204
## V26         -0.33695819
## V27         -0.10570477
## V28          0.24317817
## V29         -0.22445233
## V30          0.11091002

As mentioned previously, the results returned here are only for the second level of the factor response.

predict(cvfit, newx = x[1:10,], s = "lambda.min", type = "class")
##       1  
##  [1,] "0"
##  [2,] "1"
##  [3,] "1"
##  [4,] "0"
##  [5,] "1"
##  [6,] "0"
##  [7,] "0"
##  [8,] "0"
##  [9,] "1"
## [10,] "1"

Like other GLMs, glmnet allows for an “offset”. This is a fixed vector of N numbers that is added into the linear predictor. For example, you may have fitted some other logistic regression using other variables (and data), and now you want to see if the present variables can add anything. So you use the predicted logit from the other model as an offset in.

Multinomial Models

For the multinomial model, suppose the response variable has \(K\) levels \({\cal G}=\{1,2,\ldots,K\}\). Here we model \[\mbox{Pr}(G=k|X=x)=\frac{e^{\beta_{0k}+\beta_k^Tx}}{\sum_{\ell=1}^Ke^{\beta_{0\ell}+\beta_\ell^Tx}}.\]

Let \({Y}\) be the \(N \times K\) indicator response matrix, with elements \(y_{i\ell} = I(g_i=\ell)\). Then the elastic-net penalized negative log-likelihood function becomes \[ \ell(\{\beta_{0k},\beta_{k}\}_1^K) = -\left[\frac{1}{N} \sum_{i=1}^N \Big(\sum_{k=1}^Ky_{il} (\beta_{0k} + x_i^T \beta_k)- \log \big(\sum_{k=1}^K e^{\beta_{0k}+x_i^T \beta_k}\big)\Big)\right] +\lambda \left[ (1-\alpha)||\beta||_F^2/2 + \alpha\sum_{j=1}^p||\beta_j||_q\right]. \] Here we really abuse notation! \(\beta\) is a \(p\times K\) matrix of coefficients. \(\beta_k\) refers to the kth column (for outcome category k), and \(\beta_j\) the jth row (vector of K coefficients for variable j). The last penalty term is \(||\beta_j||_q\), we have two options for q: \(q\in \{1,2\}\). When q=1, this is a lasso penalty on each of the parameters. When q=2, this is a grouped-lasso penalty on all the K coefficients for a particular variables, which makes them all be zero or nonzero together.

The standard Newton algorithm can be tedious here. Instead, we use a so-called partial Newton algorithm by making a partial quadratic approximation to the log-likelihood, allowing only \((\beta_{0k}, \beta_k)\) to vary for a single class at a time. For each value of \(\lambda\), we first cycle over all classes indexed by \(k\), computing each time a partial quadratic approximation about the parameters of the current class. Then the inner procedure is almost the same as for the binomial case. This is the case for lasso (q=1). When q=2, we use a different approach, which we wont dwell on here.

For the multinomial case, the usage is similar to logistic regression, and we mainly illustrate by examples and address any differences. We load a set of generated data.

data(MultinomialExample)

The optional arguments in glmnet for multinomial logistic regression are mostly similar to binomial regression except for a few cases.

The response variable can be a nc >= 2 level factor, or a nc-column matrix of counts or proportions. Internally glmnet will make the rows of this matrix sum to 1, and absorb the total mass into the weight for that observation.

offset should be a nobs x nc matrix if there is one.

A special option for multinomial regression is type.multinomial, which allows the usage of a grouped lasso penalty if type.multinomial = "grouped". This will ensure that the multinomial coefficients for a variable are all in or out together, just like for the multi-response Gaussian.

fit = glmnet(x, y, family = "multinomial", type.multinomial = "grouped")

We plot the resulting object “fit”.

plot(fit, xvar = "lambda", label = TRUE, type.coef = "2norm")

The options are xvar, label and type.coef, in addition to other ordinary graphical parameters.

xvar and label are the same as other families while type.coef is only for multinomial regression and multiresponse Gaussian model. It can produce a figure of coefficients for each response variable if type.coef = "coef" or a figure showing the \(\ell_2\)-norm in one figure if type.coef = "2norm"

We can also do cross-validation and plot the returned object.

cvfit=cv.glmnet(x, y, family="multinomial", type.multinomial = "grouped", parallel = TRUE)
## Warning: executing %dopar% sequentially: no parallel backend registered
plot(cvfit)

Note that although type.multinomial is not a typical argument in cv.glmnet, in fact any argument that can be passed to glmnet is valid in the argument list of cv.glmnet. We also use parallel computing to accelerate the calculation.

Users may wish to predict at the optimally selected \(\lambda\):

predict(cvfit, newx = x[1:10,], s = "lambda.min", type = "class")
##       1  
##  [1,] "3"
##  [2,] "2"
##  [3,] "2"
##  [4,] "1"
##  [5,] "1"
##  [6,] "3"
##  [7,] "3"
##  [8,] "1"
##  [9,] "1"
## [10,] "2"

Back to Top

Poisson Models

Poisson regression is used to model count data under the assumption of Poisson error, or otherwise non-negative data where the mean and variance are proportional. Like the Gaussian and binomial model, the Poisson is a member of the exponential family of distributions. We usually model its positive mean on the log scale: \(\log \mu(x) = \beta_0+\beta' x\).
The log-likelihood for observations \(\{x_i,y_i\}_1^N\) is given my \[ l(\beta|X, Y) = \sum_{i=1}^N (y_i (\beta_0+\beta' x_i) - e^{\beta_0+\beta^Tx_i}. \] As before, we optimize the penalized log-lielihood: \[ \min_{\beta_0,\beta} -\frac1N l(\beta|X, Y) + \lambda \left((1-\alpha) \sum_{i=1}^N \beta_i^2/2) +\alpha \sum_{i=1}^N |\beta_i|\right). \]

Glmnet uses an outer Newton loop, and an inner weighted least-squares loop (as in logistic regression) to optimize this criterion.

First, we load a pre-generated set of Poisson data.

data(PoissonExample)

We apply the function glmnet with the "poisson" option.

fit = glmnet(x, y, family = "poisson")

The optional input arguments of glmnet for "poisson" family are similar to those for others.

offset is a useful argument particularly in Poisson models.

When dealing with rate data in Poisson models, the counts collected are often based on different exposures, such as length of time observed, area and years. A poisson rate \(\mu(x)\) is relative to a unit exposure time, so if an observation \(y_i\) was exposed for \(E_i\) units of time, then the expected count would be \(E_i\mu(x)\), and the log mean would be \(\log(E_i)+\log(\mu(x)\). In a case like this, we would supply an offset \(\log(E_i)\) for each observation. Hence offset is a vector of length nobs that is included in the linear predictor. Other families can also use options, typically for different reasons.

(Warning: if offset is supplied in glmnet, offsets must also also be supplied to predict to make reasonable predictions.)

Again, we plot the coefficients to have a first sense of the result.

plot(fit)

Like before, we can extract the coefficients and make predictions at certain \(\lambda\)’s by using coef and predict respectively. The optional input arguments are similar to those for other families. In function predict, the option type, which is the type of prediction required, has its own specialties for Poisson family. That is, * “link” (default) gives the linear predictors like others * “response” gives the fitted mean * “coefficients” computes the coefficients at the requested values for s, which can also be realized by coef function * “nonzero” returns a a list of the indices of the nonzero coefficients for each value of s.

For example, we can do as follows.

coef(fit, s = 1)
## 21 x 1 sparse Matrix of class "dgCMatrix"
##                       1
## (Intercept)  0.61123371
## V1           0.45819758
## V2          -0.77060709
## V3           1.34015128
## V4           0.04350500
## V5          -0.20325967
## V6           .         
## V7           .         
## V8           .         
## V9           .         
## V10          .         
## V11          .         
## V12          0.01816309
## V13          .         
## V14          .         
## V15          .         
## V16          .         
## V17          .         
## V18          .         
## V19          .         
## V20          .
predict(fit, newx = x[1:5,], type = "response", s = c(0.1,1))
##               1          2
## [1,]  2.4944232  4.4263365
## [2,] 10.3513120 11.0586174
## [3,]  0.1179704  0.1781626
## [4,]  0.9713412  1.6828778
## [5,]  1.1133472  1.9934537

We may also use cross-validation to find the optimal \(\lambda\)’s and thus make inferences.

cvfit = cv.glmnet(x, y, family = "poisson")

Options are almost the same as the Gaussian family except that for type.measure, * “deviance” (default) gives the deviance * “mse” stands for mean squared error * “mae” is for mean absolute error.

We can plot the cv.glmnet object.

plot(cvfit)

We can also show the optimal \(\lambda\)’s and the corresponding coefficients.

opt.lam = c(cvfit$lambda.min, cvfit$lambda.1se)
coef(cvfit, s = opt.lam)
## 21 x 2 sparse Matrix of class "dgCMatrix"
##                        1            2
## (Intercept)  0.031262578  0.185696196
## V1           0.619053001  0.575373801
## V2          -0.984550161 -0.932121975
## V3           1.525234026  1.470567302
## V4           0.231590890  0.196923579
## V5          -0.336659414 -0.304694503
## V6           0.001025945  .          
## V7          -0.012829626  .          
## V8           .            .          
## V9           .            .          
## V10          0.015983078  .          
## V11          .            .          
## V12          0.030866986  0.025850171
## V13         -0.027970571  .          
## V14          0.032750270  .          
## V15         -0.005932709  .          
## V16          0.017505507  .          
## V17          .            .          
## V18          0.004026211  .          
## V19         -0.033579041  .          
## V20          0.012048941  0.009929548

The predict method is similar and we do not repeat it here.

Back to Top

Cox Models

The Cox proportional hazards model is commonly used for the study of the relationship beteween predictor variables and survival time. In the usual survival analysis framework, we have data of the form \((y_1, x_1, \delta_1), \ldots, (y_n, x_n, \delta_n)\) where \(y_i\), the observed time, is a time of failure if \(\delta_i\) is 1 or right-censoring if \(\delta_i\) is 0. We also let \(t_1 < t_2 < \ldots < t_m\) be the increasing list of unique failure times, and \(j(i)\) denote the index of the observation failing at time \(t_i\).

The Cox model assumes a semi-parametric form for the hazard \[ h_i(t) = h_0(t) e^{x_i^T \beta}, \] where \(h_i(t)\) is the hazard for patient \(i\) at time \(t\), \(h_0(t)\) is a shared baseline hazard, and \(\beta\) is a fixed, length \(p\) vector. In the classic setting \(n \geq p\), inference is made via the partial likelihood \[ L(\beta) = \prod_{i=1}^m \frac{e^{x_{j(i)}^T \beta}}{\sum_{j \in R_i} e^{x_j^T \beta}}, \] where \(R_i\) is the set of indices \(j\) with \(y_j \geq t_i\) (those at risk at time \(t_i\)).

Note there is no intercept in the Cox mode (its built into the baseline hazard, and like it, would cancel in the partial likelihood.)

We penalize the negative log of the partial likelihood, just like the other models, with an elastic-net penalty.

We use a pre-generated set of sample data and response. Users can load their own data and follow a similar procedure. In this case \(x\) must be an \(n\times p\) matrix of covariate values - each row corresponds to a patient and each column a covariate. \(y\) is an \(n \times 2\) matrix, with a column “time” of failure/censoring times, and “status” a 0/1 indicator, with 1 meaning the time is a failure time, and zero a censoring time.

data(CoxExample)
y[1:5,]
##            time status
## [1,] 1.76877757      1
## [2,] 0.54528404      1
## [3,] 0.04485918      0
## [4,] 0.85032298      0
## [5,] 0.61488426      1

The Surv function in the package survival can create such a matrix. Note, however, that the coxph and related linear models can handle interval and other fors of censoring, while glmnet can only handle right censoring in its present form.

We apply the glmnet function to compute the solution path under default settings.

fit = glmnet(x, y, family = "cox")

All the standard options are available such as alpha, weights, nlambda and standardize. Their usage is similar as in the Gaussian case and we omit the details here. Users can also refer to the help file help(glmnet).

We can plot the coefficients.

plot(fit)

As before, we can extract the coefficients at certain values of \(\lambda\).

coef(fit, s = 0.05)
## 30 x 1 sparse Matrix of class "dgCMatrix"
##               1
## V1   0.37693638
## V2  -0.09547797
## V3  -0.13595972
## V4   0.09814146
## V5  -0.11437545
## V6  -0.38898545
## V7   0.24291400
## V8   0.03647596
## V9   0.34739813
## V10  0.03865115
## V11  .         
## V12  .         
## V13  .         
## V14  .         
## V15  .         
## V16  .         
## V17  .         
## V18  .         
## V19  .         
## V20  .         
## V21  .         
## V22  .         
## V23  .         
## V24  .         
## V25  .         
## V26  .         
## V27  .         
## V28  .         
## V29  .         
## V30  .

Since the Cox Model is not commonly used for prediction, we do not give an illustrative example on prediction. If needed, users can refer to the help file by typing help(predict.glmnet).

Also, the function cv.glmnet can be used to compute \(k\)-fold cross-validation for the Cox model. The usage is similar to that for other families except for two main differences.

One is that type.measure only supports “deviance”(also default), which gives the partial-likelihood.

The other is in the option grouped. grouped = TRUE obtains the CV partial likelihood for the Kth fold by subtraction; by subtracting the log partial likelihood evaluated on the full dataset from that evaluated on the on the (K-1)/K dataset. This makes more efficient use of risk sets. With grouped=FALSE the log partial likelihood is computed only on the Kth fold, which is only reasonable if each fold has a large number of observations.

cvfit = cv.glmnet(x, y, family = "cox")

Once fit, we can view the optimal \(\lambda\) value and a cross validated error plot to help evaluate our model.

plot(cvfit)

As previously, the left vertical line in our plot shows us where the CV-error curve hits its minimum. The right vertical line shows us the most regularized model with CV-error within 1 standard deviation of the minimum. We also extract such optimal \(\lambda\)’s.

cvfit$lambda.min
## [1] 0.01594373
cvfit$lambda.1se
## [1] 0.04868986

We can check the active covariates in our model and see their coefficients.

coef.min = coef(cvfit, s = "lambda.min")
active.min = which(coef.min != 0)
index.min = coef.min[active.min]
index.min
##  [1]  0.491297030 -0.174600537 -0.218648771  0.175112406 -0.186673099
##  [6] -0.490250398  0.335197365  0.091586519  0.450169329  0.115921793
## [11]  0.017594799 -0.018364649 -0.002805776 -0.001422613 -0.023429230
## [16]  0.001687662 -0.008236046
coef.min
## 30 x 1 sparse Matrix of class "dgCMatrix"
##                1
## V1   0.491297030
## V2  -0.174600537
## V3  -0.218648771
## V4   0.175112406
## V5  -0.186673099
## V6  -0.490250398
## V7   0.335197365
## V8   0.091586519
## V9   0.450169329
## V10  0.115921793
## V11  .          
## V12  .          
## V13  0.017594799
## V14  .          
## V15  .          
## V16  .          
## V17 -0.018364649
## V18  .          
## V19  .          
## V20  .          
## V21 -0.002805776
## V22 -0.001422613
## V23  .          
## V24  .          
## V25 -0.023429230
## V26  .          
## V27  0.001687662
## V28  .          
## V29  .          
## V30 -0.008236046

Back to Top

Sparse Matrices

Our package supports sparse input matrices, which allow efficient storage and operations of large matrices but with only a few nonzero entries. It is available for all families except for the cox family. The usage of sparse matrices (inherit from class "sparseMatrix" as in package Matrix) in glmnet is the same as if a regular matrix is provided.

We load a set of sample data created beforehand.

data(SparseExample)

It loads x, a 100*20 sparse input matrix and y, the response vector.

class(x)
## [1] "dgCMatrix"
## attr(,"package")
## [1] "Matrix"

Users can create a sparse matrix with the function sparseMatrix by providing the locations and values of the nonzero entries. Alternatively, Matrix function can also be used to contruct a sparse matrix by setting sparse = TRUE, but this defeats the purpose somewhat.

We can fit the model the same way as before.

fit = glmnet(x, y)

We also do the cross-validation and plot the resulting object.

cvfit = cv.glmnet(x, y)
plot(cvfit)

The usage of other functions are similar and we do not expand here.

Note that sparse matrices can also be used for newx, the new input matrix in the predict function. For example,

i = sample(1:5, size = 25, replace = TRUE)
j = sample(1:20, size = 25, replace = TRUE)
x = rnorm(25)
nx = sparseMatrix(i = i, j = j, x = x, dims = c(5, 20))
predict(cvfit, newx = nx, s = "lambda.min")
##               1
## [1,]  0.3825586
## [2,] -0.2172428
## [3,] -1.6621635
## [4,] -0.4174700
## [5,] -1.3940989

Back to Top

Appendix 1: Internal Parameters

Our package has a set of internal parameters which control some aspects of the computation of the path. The factory default settings are expected to serve in most cases, and users do not need to make changes unless there are special requirements.

There are several parameters that users can change:

fdev - minimum fractional change in deviance for stopping path; factory default = 1.0e-5

devmax - maximum fraction of explained deviance for stopping path; factory default = 0.999

  • eps - minimum value of lambda.min.ratio (see glmnet); factory default= 1.0e-6

  • big - large floating point number; factory default = 9.9e35. Inf in definition of upper.limit is set to big

  • mnlam - minimum number of path points (lambda values) allowed; factory default = 5

  • pmin - minimum null probability for any class; factory default = 1.0e-5

  • exmx - maximum allowed exponent; factory default = 250.0

  • prec - convergence threshold for multi-response bounds adjustment solution; factory default = 1.0e-10

  • mxit - maximum iterations for multiresponse bounds adjustment solution; factory default = 100

  • factory - If TRUE, reset all the parameters to the factory default; default is FALSE

We illustrate the usage by an example. Note that any changes made hold for the duration of the R session, or unless they are changed by the user with a subsequent call to glmnet.control.

data(QuickStartExample)
fit = glmnet(x, y)
print(fit)
## 
## Call:  glmnet(x = x, y = y) 
## 
##       Df    %Dev   Lambda
##  [1,]  0 0.00000 1.631000
##  [2,]  2 0.05528 1.486000
##  [3,]  2 0.14590 1.354000
##  [4,]  2 0.22110 1.234000
##  [5,]  2 0.28360 1.124000
##  [6,]  2 0.33540 1.024000
##  [7,]  4 0.39040 0.933200
##  [8,]  5 0.45600 0.850300
##  [9,]  5 0.51540 0.774700
## [10,]  6 0.57350 0.705900
## [11,]  6 0.62550 0.643200
## [12,]  6 0.66870 0.586100
## [13,]  6 0.70460 0.534000
## [14,]  6 0.73440 0.486600
## [15,]  7 0.76210 0.443300
## [16,]  7 0.78570 0.404000
## [17,]  7 0.80530 0.368100
## [18,]  7 0.82150 0.335400
## [19,]  7 0.83500 0.305600
## [20,]  7 0.84620 0.278400
## [21,]  7 0.85550 0.253700
## [22,]  7 0.86330 0.231200
## [23,]  8 0.87060 0.210600
## [24,]  8 0.87690 0.191900
## [25,]  8 0.88210 0.174900
## [26,]  8 0.88650 0.159300
## [27,]  8 0.89010 0.145200
## [28,]  8 0.89310 0.132300
## [29,]  8 0.89560 0.120500
## [30,]  8 0.89760 0.109800
## [31,]  9 0.89940 0.100100
## [32,]  9 0.90100 0.091170
## [33,]  9 0.90230 0.083070
## [34,]  9 0.90340 0.075690
## [35,] 10 0.90430 0.068970
## [36,] 11 0.90530 0.062840
## [37,] 11 0.90620 0.057260
## [38,] 12 0.90700 0.052170
## [39,] 15 0.90780 0.047540
## [40,] 16 0.90860 0.043310
## [41,] 16 0.90930 0.039470
## [42,] 16 0.90980 0.035960
## [43,] 17 0.91030 0.032770
## [44,] 17 0.91070 0.029850
## [45,] 18 0.91110 0.027200
## [46,] 18 0.91140 0.024790
## [47,] 19 0.91170 0.022580
## [48,] 19 0.91200 0.020580
## [49,] 19 0.91220 0.018750
## [50,] 19 0.91240 0.017080
## [51,] 19 0.91250 0.015570
## [52,] 19 0.91260 0.014180
## [53,] 19 0.91270 0.012920
## [54,] 19 0.91280 0.011780
## [55,] 19 0.91290 0.010730
## [56,] 19 0.91290 0.009776
## [57,] 19 0.91300 0.008908
## [58,] 19 0.91300 0.008116
## [59,] 19 0.91310 0.007395
## [60,] 19 0.91310 0.006738
## [61,] 19 0.91310 0.006140
## [62,] 20 0.91310 0.005594
## [63,] 20 0.91310 0.005097
## [64,] 20 0.91310 0.004644
## [65,] 20 0.91320 0.004232
## [66,] 20 0.91320 0.003856
## [67,] 20 0.91320 0.003513

We can change the minimum fractional change in deviance for stopping path and compare the results.

glmnet.control(fdev = 0)
fit = glmnet(x, y)
print(fit)
## 
## Call:  glmnet(x = x, y = y) 
## 
##        Df    %Dev    Lambda
##   [1,]  0 0.00000 1.6310000
##   [2,]  2 0.05528 1.4860000
##   [3,]  2 0.14590 1.3540000
##   [4,]  2 0.22110 1.2340000
##   [5,]  2 0.28360 1.1240000
##   [6,]  2 0.33540 1.0240000
##   [7,]  4 0.39040 0.9332000
##   [8,]  5 0.45600 0.8503000
##   [9,]  5 0.51540 0.7747000
##  [10,]  6 0.57350 0.7059000
##  [11,]  6 0.62550 0.6432000
##  [12,]  6 0.66870 0.5861000
##  [13,]  6 0.70460 0.5340000
##  [14,]  6 0.73440 0.4866000
##  [15,]  7 0.76210 0.4433000
##  [16,]  7 0.78570 0.4040000
##  [17,]  7 0.80530 0.3681000
##  [18,]  7 0.82150 0.3354000
##  [19,]  7 0.83500 0.3056000
##  [20,]  7 0.84620 0.2784000
##  [21,]  7 0.85550 0.2537000
##  [22,]  7 0.86330 0.2312000
##  [23,]  8 0.87060 0.2106000
##  [24,]  8 0.87690 0.1919000
##  [25,]  8 0.88210 0.1749000
##  [26,]  8 0.88650 0.1593000
##  [27,]  8 0.89010 0.1452000
##  [28,]  8 0.89310 0.1323000
##  [29,]  8 0.89560 0.1205000
##  [30,]  8 0.89760 0.1098000
##  [31,]  9 0.89940 0.1001000
##  [32,]  9 0.90100 0.0911700
##  [33,]  9 0.90230 0.0830700
##  [34,]  9 0.90340 0.0756900
##  [35,] 10 0.90430 0.0689700
##  [36,] 11 0.90530 0.0628400
##  [37,] 11 0.90620 0.0572600
##  [38,] 12 0.90700 0.0521700
##  [39,] 15 0.90780 0.0475400
##  [40,] 16 0.90860 0.0433100
##  [41,] 16 0.90930 0.0394700
##  [42,] 16 0.90980 0.0359600
##  [43,] 17 0.91030 0.0327700
##  [44,] 17 0.91070 0.0298500
##  [45,] 18 0.91110 0.0272000
##  [46,] 18 0.91140 0.0247900
##  [47,] 19 0.91170 0.0225800
##  [48,] 19 0.91200 0.0205800
##  [49,] 19 0.91220 0.0187500
##  [50,] 19 0.91240 0.0170800
##  [51,] 19 0.91250 0.0155700
##  [52,] 19 0.91260 0.0141800
##  [53,] 19 0.91270 0.0129200
##  [54,] 19 0.91280 0.0117800
##  [55,] 19 0.91290 0.0107300
##  [56,] 19 0.91290 0.0097760
##  [57,] 19 0.91300 0.0089080
##  [58,] 19 0.91300 0.0081160
##  [59,] 19 0.91310 0.0073950
##  [60,] 19 0.91310 0.0067380
##  [61,] 19 0.91310 0.0061400
##  [62,] 20 0.91310 0.0055940
##  [63,] 20 0.91310 0.0050970
##  [64,] 20 0.91310 0.0046440
##  [65,] 20 0.91320 0.0042320
##  [66,] 20 0.91320 0.0038560
##  [67,] 20 0.91320 0.0035130
##  [68,] 20 0.91320 0.0032010
##  [69,] 20 0.91320 0.0029170
##  [70,] 20 0.91320 0.0026580
##  [71,] 20 0.91320 0.0024220
##  [72,] 20 0.91320 0.0022060
##  [73,] 20 0.91320 0.0020100
##  [74,] 20 0.91320 0.0018320
##  [75,] 20 0.91320 0.0016690
##  [76,] 20 0.91320 0.0015210
##  [77,] 20 0.91320 0.0013860
##  [78,] 20 0.91320 0.0012630
##  [79,] 20 0.91320 0.0011500
##  [80,] 20 0.91320 0.0010480
##  [81,] 20 0.91320 0.0009551
##  [82,] 20 0.91320 0.0008703
##  [83,] 20 0.91320 0.0007930
##  [84,] 20 0.91320 0.0007225
##  [85,] 20 0.91320 0.0006583
##  [86,] 20 0.91320 0.0005999
##  [87,] 20 0.91320 0.0005466
##  [88,] 20 0.91320 0.0004980
##  [89,] 20 0.91320 0.0004538
##  [90,] 20 0.91320 0.0004135
##  [91,] 20 0.91320 0.0003767
##  [92,] 20 0.91320 0.0003433
##  [93,] 20 0.91320 0.0003128
##  [94,] 20 0.91320 0.0002850
##  [95,] 20 0.91320 0.0002597
##  [96,] 20 0.91320 0.0002366
##  [97,] 20 0.91320 0.0002156
##  [98,] 20 0.91320 0.0001964
##  [99,] 20 0.91320 0.0001790
## [100,] 20 0.91320 0.0001631

We set fdev = 0 to continue all along the path, even without much change. The length of the sequence becomes 100, which is the default of nlambda.

Users can also reset to the default settings.

glmnet.control(factory = TRUE)

The current settings are obtained as follows.

glmnet.control()
## $fdev
## [1] 1e-05
## 
## $eps
## [1] 1e-06
## 
## $big
## [1] 9.9e+35
## 
## $mnlam
## [1] 5
## 
## $devmax
## [1] 0.999
## 
## $pmin
## [1] 1e-09
## 
## $exmx
## [1] 250
## 
## $prec
## [1] 1e-10
## 
## $mxit
## [1] 100

Back to Top

Appendix 2: Comparison with Other Packages

Some people may want to use glmnet to solve the Lasso or elastic-net problem at a single \(\lambda\). We compare here the solution by glmnet with other packages (such as CVX), and also as an illustration of parameter settings in this situation.

Warning: Though such problems can be solved by glmnet, it is not recommended and is not the spirit of the package. glmnet fits the entire solution path for Lasso or elastic-net problems efficiently with various techniques such as warm start. Those advantages will disappear if the \(\lambda\) sequence is forced to be only one value.

Nevertheless, we still illustrate with a typical example in linear model in the following for the purpose of comparison. Given \(X, Y\) and \(\lambda_0 > 0\), we want to find \(\beta\) such that \[ \min_{\beta} ||Y - X\beta||_2^2 + \lambda_0 ||\beta||_1, \] where, say, \(\lambda_0 = 8\).

We first solve using glmnet. Notice that there is no intercept term in the objective function, and the columns of \(X\) are not necessarily standardized. Corresponding parameters have to be set to make it work correctly. In addition, there is a \(1/(2n)\) factor before the quadratic term by default, we need to adjust \(\lambda\) accordingly. For the purpose of comparison, the thresh option is specified to be 1e-20. However, this is not necessary in many practical applications.

fit = glmnet(x, y, intercept = F, standardize = F, lambda = 8/(2*dim(x)[1]), thresh = 1e-20)

We then extract the coefficients (with no intercept).

beta_glmnet = as.matrix(predict(fit, type = "coefficients")[-1,])

In linear model as here this approach worked because we were using squared error loss, but with any nonlinear family, it will probably fail. The reason is we are not using step length optimization, and so rely on very good warm starts to put us in the quadratic region of the loss function.

Alternatively, a more stable and strongly recommended way to perform this task is to first fit the entire Lasso or elastic-net path without specifying lambda, but then provide the requested \(\lambda_0\) to predict function to extract the corresponding coefficients. In fact, if \(\lambda_0\) is not in the \(\lambda\) sequence generated by glmnet, the path will be refitted along a new \(\lambda\) sequence that includes the requested value \(\lambda_0\) and the old sequence, and the coefficients will be returned at \(\lambda_0\) based on the new fit. Remember to set exact = TRUE in predict function to get the exact solution. Otherwise, it will be approximated by linear interpolation.

fit = glmnet(x, y, intercept = F, standardize = F, thresh = 1e-20)
beta_glmnet = as.matrix(predict(fit, s = 8/(2*dim(x)[1]), type = "coefficients", exact = T)[-1,])

We also use CVX, a general convex optimization solver, to solve this specific Lasso problem. Users could also call CVX from R using the CVXfromR package and solve the problem as follows.

library(CVXfromR)
setup.dir = "change/this/to/your/cvx/directory"
n = dim(x)[1]; p = dim(x)[2]
cvxcode = paste("variables beta(p)",
                "minimize(square_pos(norm(y - x * beta, 2)) + lambda * norm(beta, 1))",
                sep = ";")
Lasso = CallCVX(cvxcode, const.var = list(p = p, x = x, y = y, lambda = 8), opt.var.names = "beta", setup.dir = setup.dir, matlab.call = "change/this/to/path/to/matlab")
beta_CVX = Lasso$beta

For convenience here, the results were saved in CVXResult.RData, and we simply load in the results.

data(CVXResults)

In addition, we use lars to solve the same problem.

require(lars)
fit_lars = lars(x, y, type = "lasso", intercept = F, normalize = F)
beta_lars = predict(fit_lars, s = 8/2, type = "coefficients", mode = "lambda")$coefficients

The results are listed below up to 6 decimal digits (due to convergence thresholds).

cmp = round(cbind(beta_glmnet, beta_lars, beta_CVX), digits = 6)
colnames(cmp) = c("beta_glmnet", "beta_lars", "beta_CVX")
cmp
##     beta_glmnet beta_lars  beta_CVX
## V1     1.389118  1.389118  1.389118
## V2     0.007991  0.007991  0.007991
## V3     0.731234  0.731234  0.731234
## V4     0.031119  0.031119  0.031119
## V5    -0.866793 -0.866793 -0.866793
## V6     0.564867  0.564867  0.564867
## V7     0.069678  0.069678  0.069678
## V8     0.358346  0.358346  0.358346
## V9     0.000000  0.000000  0.000000
## V10    0.070565  0.070565  0.070565
## V11    0.173464  0.173464  0.173464
## V12   -0.027472 -0.027472 -0.027472
## V13   -0.017960 -0.017960 -0.017960
## V14   -1.138053 -1.138053 -1.138053
## V15   -0.070990 -0.070990 -0.070990
## V16    0.000000  0.000000  0.000000
## V17    0.000000  0.000000  0.000000
## V18    0.000000  0.000000  0.000000
## V19    0.000000  0.000000  0.000000
## V20   -1.097528 -1.097528 -1.097528

Back to Top

References

Jerome Friedman, Trevor Hastie and Rob Tibshirani. (2008).
Regularization Paths for Generalized Linear Models via Coordinate Descent
Journal of Statistical Software, Vol. 33(1), 1-22 Feb 2010.

Noah Simon, Jerome Friedman, Trevor Hastie and Rob Tibshirani. (2011).
Regularization Paths for Cox’s Proportional Hazards Model via Coordinate Descent
Journal of Statistical Software, Vol. 39(5) 1-13.

Robert Tibshirani, Jacob Bien, Jerome Friedman, Trevor Hastie, Noah Simon, Jonathan Taylor, Ryan J. Tibshirani. (2010).
Strong Rules for Discarding Predictors in Lasso-type Problems
Journal of the Royal Statistical Society: Series B (Statistical Methodology), 74(2), 245-266.

Noah Simon, Jerome Friedman and Trevor Hastie (2013).
A Blockwise Descent Algorithm for Group-penalized Multiresponse and Multinomial Regression
(in arXiv, submitted)

glmnet/vignettes/VignetteExample.rdata0000644000176200001440000117620111433617376017711 0ustar liggesusers\x\؁ajiv8 6M04 33339fYe3f4#4b,SzMđf=gZk}%7M;7n;{Bn;>_ۤo؝O#OxϝOݙ{^m6Lֲ yY:fCVu- ㎹JG)>vW>'G6Iwr~gI<: ΗݵLCbuHW=7[㿷H5sߟ3UKʸolva_W)i[=>ծ%ܴ]:oږ$[WyV}zk2ۍRsO\ _C5oSzmp֒$ՒL}V v³|U٫Hse,>isաO>xYsxD:X#e%!˯둁u9QS|^/}͓P֥ILԷN}BwMB?Yh_}q;GUh'}e8ϻ:轝v>wΗR?I$-iM#gsU=|~Z鳳Q"!46=TyUmg.|Y[ls|~]W~J='|L*/ZW}8]ҿ?7@]U0[>'O~MR/j|. ~v7o~/kxNfviI^j/C;&.{ $m=r6`$ל?޽_kٌ{i/(}§.F:xKӤZ-Wr)c;}vy6^v?fwE^ׯKoVw曆9_xHk^̻~g^#3L=t v?Ӎ'}sa}E>ȴl$>N2׺?}>ar7{͌=ǽBڮ͏2Pe8ҩ2ޗ Ɔ#do'sʝM|fOoRX;JxH[7[ZnDph ^y:%n4wNuqsNnq?/zttvzV\92P{I@\~}Aۉct}K{tx.C˯"6NYa H ]Y޿/zG&?--k)G/L~K}Ǽg$-wdsV^^;p|_C{K\~yoJRx/2˰ԗ<huizSܰR{<~ޖQiwOzSbm=1u$esށLBS;|H}9jZ$셑?KV\NN|uٓ4J;~'.+TR/9Gߟv^D%sG:&ܟa//e4.NTܹzR (=IzէTPV\5i7yy{Z])} Q?'!_۷_$t濖;uwJ)*q嗉۸|Ӹ.2~fyYƹ*۶T VgȰ;o>y\Y?S5Gd'\~^dk ~lK~1N19EqY4FR:䤓DyuqOz/"~ 6:ʽs/m#itG>sa qg YR}P!t;W:Υt.e+i{lã3ܓ~|EjOn9l\] ~Q*9bރ pnIv4ΩT#.fWHyՉ2}ruaz"N~~8PGF^1Y]ظREz)Ǐw.,j]ѯѺޫƮ*U1u/0/s/K<Eës"fe{ Z}8h,_Z޵޻ !ej%#ݩ*cOI-մ m^!QyOw\Pד7~B#(<=U2D %GYM)R3kD1,m!uV{qΗRhҗ6WSEWZv #oL=Yq;_|a>u'#cK#(O>vN?:w{I˻N}Qv]c/ TcэsJ{?hrAœ'\^͚wgJ' /Au7/ѩɀ:,WdS7lu5Z~t2`u SJtW-Hx$pZ=?T' ~N \]+付wQ^83)#~y4SOnբ%}^XEj=Ї _'T]wuĈco;\F;ݟoԑw_)k;A~%~6e %wes;v[=G+3*}qyQe&bW: u!ې}":@B%]^h8de6\[szt&seģU/^C/[x/z:=_)tE]^jN^k>u2 [&}L:z?-&F=gm?)GCjp~c%2D_sP/&pt >~Vk뻔>\7Qo%^K=g=i/H{֑?cySFGZe^cy۩{._KAhtDͺ9_$#i^snsߥ}.󞬏n= .ԕ5ԛ^97k@izoޗ=햬}15!-KRVQ4 I_z0ꀄڞ1[z]_-yM?m;.l5ixtRYyvv8|CG<}E{{t{u:awH a U2A{\" u|4:AMBıu"w4}˗Yyo휟A&~o~ny0_zMt*I~7J_=|Ĺi(=@F@hh緾CpZpv1#ieMQW~h6߱|T[R]NnO'Cj>m~?sc76~LWCzh5k<}^@򆣽̫V=:j]SՓgk]ߓ;޻+wV,u7sGtn8Y~kj8Wģz7 חh7:$m_W&4LH.33J|?hӷ)uZ 7=nvMKo{$qY6+{o?UBL{֎vW|oc{i"/'F7D\QoZ=MWZqy,C5[󳺵+wI.N.qm#Xdg<0%D@]oO:򬴻B[_p j]j6*W?I;mm_Hhku3@)_."~xyUJ/EwN%I.å?b\*y:>t84PG\'N O o:vpirE{\ޑQ58v-uzaWMO˦uZQxYYvFܹ-䕍~R6 2:[bZx_e_m!;OEV I׏ }Mm+ר!e|#6ytq}#k'e?q+z iU GIl؊~~) _@l%:LOp{sO >}ַf~N?q1*yhj$ i;'"8~> /xhåe8H<𨘫S4tAzA׺:3%xai5t't}t8Aҝw?fɒD'Og36G* ;/4FZ>Z/gq 9|(p)YӷZռwC"+],yQn v.Gsby՝&J~ƽo@E{ P nLd8EwZIpg% >Lf+0ׄF]$KcIsE)>Uʒ{_&^འ?ǨB[U#<K"ܟLp~^J:>mqDϒpX?MHNkuH{cNRxM+M=oz^t;VwO4(Fp.9UU~t'&Ћ:~]b/Р/% _ݳ1]RF/s^2r9]Mvŧ[-/Ԣm{Y Y>ߕN{zvu&_NԤ5Ή芙^zWt/+_ׅSR~~Li潤_YO=%wɏE5|Q|v٠vϽH֌\t&yQ?-?+}ze:] )}Fi&~ͣ2!}veL W2Ӛآ1nZ~̦4÷;hyՍÔww ʟWh|czڣC::f2ٗ#>#1Nrc|_RUmӇ]tK;+d׭wMB4ab_ G ˗e{Kd V^AC~/b?A,.]&ύz<4H<;YBV|9V|X"Y~b^.|NϤSƝ@s!\óQ1wP_-m:}@;N)r!w8Ϩu_r3VK;ђKͅ_ k'|Z'$J<,;;Ksѣϗ??*zV7 yjŏmù"ԉIB)uf7:[-1f[Ty/Kpꙻ<4=? ̣f~[v8IzhϜ~=sM^x~[ŝw7j!yǒL4w=_|H~XJI'ooVЌsW=Rvה/EG<7oW :yY,^YsGk~L{6ϑfp7&S9{*uz%`s#%9/՗\~”#tAk;PY &^Fs|= E_nBIJ2Z{xYtW 0Oz;%AxB+^Zy~f熦x>5μOM@$ԉr=j-~`Vwy,8TgRV LOÛ'A?Z1)ⲿ~tbN'>ԋLRŜ[;|!sLsͳ Wh"xz>"Sn:?ޗa{4¼_Brڄp$jzFW-w yrbRܷtpϚw%t-?Yŀ{NR\ZݲBB3|]crsI.uU/OjV3B7O+{ū\Տv|-v2lt 1cj]He5<8mu* ?~B~i,Azir)#j;|:XBG0~>ί ]"sL3U;'ݜ 9O+sfo}txĘ:)o%iǭ^{g@fך[姞]{E"^{ۯ__|.G-vN&=$ ŜD'hY/ituѥ<*CQ.2^AR S;]D[kOKG"Ec_uRo]7ZYcq΅ϑ,cYtbx.O*mL_f`|g>?l_@i###:| uzC0~k=pEAt]V'F#s}V/~^4d}RWr/[= S/&.GTFϥe&߅%בs5Cc7= 3rxII`W|pЌ-uZ|}KZ{vp)7(4psma~TR;gkD >2Iu^{+}[N#.Rh)uA6>ٮ֤{otR=;skxOk'c砯_Uk}o/a 3{B}~z$\WKMq:k]~Qok~k-8O2_vRώ7fEi9vUR Xx:4>9_BkdOTzCG6ygD'۲&04 &f wt>: D؂.6֟o0sծnO+%q/t4%?J[|-΃עv|3BXA\D&;2~$G4p I+:4HѵJ5,ˇ+^wo4{J^^BG_z֩Oj[Kc.Oh\$e1W:J jD7a5H>O &{K_z뙡7O)UV{.άwyN_i\q()"|)9p,oju.~}Ffp*x_ 4:퀫&/s#ueO2_ nioYr?O|Rj>RL2vaL)@7C1%:+q>Es+DqvG%9iK |'7sJlsӟj 4zyv4xnIV11oU_ W582꺇ǵ-*kgVmZG.}r|!8{-q|q_x|v7}>EU 排sm9HFp39%/O!6aE;ѝ$B?*|o\?\1:^B\ Kx_tvw OCWXAow)GtKZ} w:1Z aL(zeX1?|thŎӨK;q?Z-FIk?;{'pȫ h]v 6I/Z5N]ouk'dՊ]֣gS_%"y->,A+sQ*z4|M;?aI7xdnM\zĨ,!ezĚ_4ʐ,8r%&v^Pu|Tp:}rNS /sgtѧU[̼ɯޡOÀ3̷佛O8eGCo[Z|%V_}Sm(69 2?S1wOדVt>!t_\^'+m6v۵/|>WL=3#Nt[Й U .}-XhnKwqIjKբh.:=')-BX]1^nqYRQ+36\@'?*|zdH 9)}sW[463}A5u}\щ2[ ,) 27N\uxS/hчn@OӊB[}m y:dk;`uǘ?[!>fEB [_~|+^4p.N7sеj85ۜK__ިi/8'8S ~y᧶k}(^ˡ_^jiÛ5uUtyY]/Obd!|t߬wr5TnZ hb 75E{l!o!ez87gl?ꔽ韵7#/5?"b 董-[#G\ t;.F98k ]@'~%c<^}+сЯK{y/wsc:^K85AHOͥgMm4a>_V _ b~mumFd8jõJ۩yI(8:mWn!^l oe}p$|Rw݋$NǪg4:Q@Ic_4{/I朦vѣ8>)a5j+-'Z o~Щh:f9Wy\Rpftab'Os+A#( pgDđ2݌/ "-q_k 8ׅK$P'!ޭ%.-a;8.f\YM#ex"dg<>>Wms $9z]=GG#1JUnP@5x%FnQ^c߿>ջݯ`%F_H],6/VM;h:<<KӾFf~sފëquϘߕ'0?ߟܙXL;=z`5>JSc)y,ϋ2_?^>_3#nh%syY̷|O6 ?&Kz高o pe%Es]#&|3=1:rgs킟nG&Ԁ{MĹ ;=Rxtg.J\b2q̇~gƜm.~8͑X_]_j8xvp%|N|׊Ji<=1>2ʜ_j-+DgpqpC*y̙ku |X:?T-vz! Ț9 Х8Ώ_I7?;>$@KCM?uL%Ay7UWWm,ia$懊_paLa|@<1wc26̽_F_P+8-Ym>1nד8n$~}>C|pӒp?W%jC58QVP_ W!\}.]Ә^>gHr鏒 }z|h}G?7d>H4[5q⭱[fh_(f %+_ܤͯ:7N|6pz,U1%VN7GɦQusip1!| }&l@7{*' ˛A?Μ\.Ng`6P_TuH8: 3,dk1jm:\FJ|!߱= _Rfޠ ^KVpgt,NsZi~̛i\ p4_ gn|LyY񙲾|_>Pn< 9 vzlY>!+QQS.Isn{Z<ET1o#hӥ܇礳7W \B?D6 ^J?|%d9ϳ8Z|FӖ]) Q~](s(/_>}ˊwXWfgfcVg}@=Y?q蓪ѫ_5s̏xT dCp1]`Gq3{#;{Vͼna=a|C|~@ݟlj7#xB~g(|Ns7"!3Nx~y~=HC+] 2iWc:5J%5MI#n/OHsEGKg!~W8^9Y O:s{؀oճKSR+Nf'h ~]i {Rѭe6^uOQʝc=v81S3>2k)JL݄hz|kOj'L߰14.߯ѯ'!`,[FNRV0e/Q)-rͫjus_ ?{k ؏k^)d۷N}❓"V9w2pѿyNl>Œ ^^8?SFt#v`SwN _k!kj?Nx~pעی!^~wЛDjٻM?b8B5{$<͵j>QGl^p S3Ы˞aC !z{N: <ހS2Ͼ:.F`tԝa>w1{=0qUai?~.yt1gֻyb먗B2QD_ߛ1np#dowv`7e_ppG'2Msj{W_9j8t+akO>і/ N}蹟,[[-#''p2%ߌi`_n+~̫jkSrj2ޜ{-O=sYH羶7V@oFsBfp,߾Ry3?<@ έހ47s*:m6xӥQIWNma횱]k18y_z9%O/]O+in8}^~>ty޳`?| d/|~/m42_IL}{֗kH;B럭ps'ؿJl2xm oߢ~|A;=μ_Py}l9^5$MlI:NӕNmVmFo3~.z؇+5NyI=FFkh/34/o|̇|j1Y˟5t)ZC=_jS~i9%e+zHmkG= _.b}N,޷<0_ Qd_KR>TPGGAӏ4 x9d5_@wF@_ }k fE/S9 /ļ ԁ?sq%YokˮkfԚ˦6ܹJb>6A/m̯}g ,Oh _p+˭m=+F$K^~ۥ9@*%9^iG/frǯ}g9e^\b7ǮK_s6SсOq_ojKdM8Pr-ǿ))b8 4:_sWȺKV0ap%%8O &3>?|C;sϷOc>37NI7U|ӟi3y t5{s/g @S`l )g@oy/?WQ/絲9\B|G<̏ھzŬRj ]&$f+d"%uNU_7[7)K?eE_evKm$诃B7/_3wؾVl.+<1?u“oj%n':NYV7 ޙhˉ^_)WG}ֿ0S?^.tƶx3N7[ُ ̉䢫d-q=$/sy;0?7&eWb>􂋬mqt?}gm^At]+M/=32y, kkKm?)R(Vt.KPk)5 nre\iU?x{5}?wUo}-qsY㘷^t}Y޶yu\1I77Y_os4~usfO瘏$ǬFdžf0gf{G'%."ws蕖;~Jfx9s&9B礶w=ʇ헷~/ܓlU3y:__u\(D%y/ J?\깩rO597j?#3#˭̠a~Ojg_yJGcskd y`ϭDku*"0`zR=o-=᭒:n˒v}ٷ$.n 阬ϩqso/Y~4:Bz)lJolo>c /۞:vq谧Rid51'X_> h}|K譴!3`ߋc gZjُnHs˖]x5/k|>cBOS9׍5mKg'rೖ‹{9wjs^o/j?-ih5ԏ5z17-G;H<V|_{: s^'jlAWE3Dш޻UDO,q|qHa8sca!p4j_8p>Ov~}jۏ{EW.8sdП؞ Wï :E\؇"m%<q.|1zm5Yk:{l_3{%jPKH_͡rzRڷC>Qcć?yJu-O-v}ot.{Z#<]A_Y_,t+ \px mCdn.GZ-)x8}~dR8gY-e%J_2H}oTmijTT#༴<=z[h k8Z/ =.ns>V_X\~ᠮ!y<L\k9?0DW2Tj{MCھMXoW]@Gw/5= 3o"9~뾞Ӿѱ~4=gp-9ld<7 : [g~~|m$OMbu}`q&lӁKe g jCEG3Dz=:@~g!k!Ĺjfnm|LgQty|/GMv2718n [QD~˨sӠ .b2ߩyN/csk5{d͗9m*pFsc\|J𝳺n.r=>,J]Ax7|},+\}旘m=}YE/9nt3ԅOO`@D.B )'\߭'> }'{Eg*Vg[mn?rni` 0v8D"-إ\ ؞I4A]x*~"!|+mN}ly/5{|nz,۾jtc/ 90{0l_|+|q"W|~j>/{cÏ=4c#OLւ 8~EHe2e?Zó_@~GoU3l6ḓ ~RŜX+u2 0KͿe( gi0]ޣO91ar+d>} nnFX~d!~cpy]f|v8n:?>0?}/~,8g/8V3VYyF4S|li_Nx Cn PU3fn;_&w>y|r7{ .bxڏmO9du5k-jQHeOS>v_:pAe&O~OtIܼ$zwkgwVjѫO>C#V3}I|XMc}xq|Fil|4>+8gӟ_P d^ =@\:E[r?NGط;SS1B҈_w=ZRK:|X1~.ZcI)b;+/mIK҄{榛eL:_>;;q`o˧3 1_EgLDOĜżq˔oXJ5:YW4_\${/-UGJ07^@<2\ǩc[[J<%<(yAY[WwYޯ40_i~@'jsim%aC(-U6 +k~l0z< ~/襐9r樳AWjDGQh|\#q s`kǪgc^9 /e!xa73l/YKA-24栻N#_2A2iՋq'3xWd6:f72~eǹx)$~?1 k%Fb^ͷWr&v,(8orxu8 [Gg3YLެJ9'm$EmgDo\fnT^˼c9Z#,Mo: 8Ë,b>}#a?W:cJ33_߽:FQt=Mۃ[EsyGpsNkщI;7O4}}E.Oܢ( S[{ |gqgĭ&Mqv8gHm㓭k!~^Z_m?gBw7D>s׈~ZLvx>mN<.?jBϥYeP7k<ܟZt Rs=ͬus?ֵ̡nܞ1SDd]Kܞ _*~8^~Oz)v|ںr)p__$z+=K?Ң)W\ؤ -^]~te_2o!]ԭ!t'뙿\%uJzB7"U>̟_G[#8_^,*4gO4_ã㧫muԓS0~sL'l~]پ?'Cǒ^Rι Ycsr{&A܄V ̳Βb|LWXVgWL~>W\ĵ1fX[7Mq8؞!;H5q(o|/{M1WrӻϾ_7+I1V16yaWYjwNO^{?x.Aס;27yFv%.Ir[ -IjI-kg} {V,&'k~A:iFsy6[Ligzlׂ4GeKTPǘwНC)PWIJ58g W/ ~@ {V-s5SYo t]Rx .~^`p{;yEm{[Q))EM7UtKoͿ|޶W{I0do۩c kv/nNZ1eOзƨ#=NWݦw'y5uaGT›ۊ TzW÷?HQ5U$ՠ邷lq)Ae!ۯAewSmOL;~7{GZsq@YK战3btTߘ_#u]N @Vta+4߆OKԓi1h 'pB$g֑:eѓf{iX|4G?y_;Avl$'~vymD7y]V}(EQ`D+"H'HtnM{2Nٞ-7s]?#vg~>[O}'{x}+?oSQ3zt#pRT]?~= Iy)Q%MIΛ$w䎘+YYF.w?dzKG{x_-'ξ\ϹW >/ şTl9OvM $/Ãy!8Y+r1ԁ7#Y=ڋ18=*J";'i>>Sѧ/d9v3.r9-7\um_LA='=Y,=K>DWIᇵsz󽏳7:i)zh LkmGbz ,!jhjddBU|?[hpCװZ^0{xg{}}ÞR89v&ř7AjϋHx!Rj{v8){In_=^b/cx.<{!w>>cAQzW)+ =9y롧JbE|ۇL'7%~1NoGgΜa虢oqp})AG_хNK!:=Vy+8I<u.뙰4!p-s<@Fɧyr/4Ik=}?UI2]ss+NE*Oy4IpIz`=m?OC*-22~9~=s9߱kr5 pKzvU=f\Nrbz,casO|Ng`|%RqZ Z>5}U6.| tb9">`&WG=舭zv[%;VෘidHa/ey> қW4\y3ky:-i'|+rvm _p{A /xq>΅m2% fL}ȃ6K^m2\^Ӌا:c`yIK=Pl_We]9<=}x_wˉ}G{)üK/{b㩒',U{8gVFr}>Zk}{z?ۿ@Nw9/{m;8K-ŞҍN9Fk9X!e8xNiୋ"G&5 ! }^DRsJctpiשn;z|GA3rt=x>^-km$pV|)_Ag:3o;QtWK񳷷X38}?_p8-1[N'I M$CW\u|\ m5Cgme<3?ǭWmG~|x$yOw^p6]+/;WsE!Gr,] 7|>Ô mw粛{n!};nI-z6tZ^.3xU; );#7ͷ7i9AYt&J}Hͽ>gƙWA/\^Vyw;e=m>:N:= \@_}U{.:-ȉ0}jx_<'  }yP%sQesU΂D 2mB??=F1'c dq=::F/0c?.c8\|/+SY?͟ϞQΏ"xK9Sr/~|#/q'8s]G}YkR~Yb5ocrxDWC*tQr֒K G* ]ݓeoWd͓S|1o d3=IEL$4 gI 禧oז<|;f~>PɣK=/o% \O}ɱID V O|a9dѧEIھ'|ZĿF۳NN/Z|YK^Ӂrl!F o}  >;%_xͿXYO}bz5WSX,/b&R^9d=̫Y9Ζn:7wM7D#>;ox,W&ȹQzhsUYo{[^ӷHs'&,z̛noBxQp=e/!K-7x) Χar{!M2h3YdC@~SFXOb%W'K GJ߰t3ga~nf|~9l^p~՗9%|%m5j=胓-=0缬Go^ >)>E'Z},?z}4NDk &ND3 /8<}w糼)@t;yl3>F|!{E/&Agjl{ d˹Pzu"zC'Aϴ|%|1҅߃|Aw'|_ܰd _bJГ$> g;ѯ};?!Ə鳱^ V,mwwAOY/\ZO5{0i=z#xQ/J斗'zv랪EW huֽn.xOTO_!>I)_$MsY^鿽}1 py8*7?nB׎O%k6r2産Y>>?h9:nϞufG .`x/8z _j>rwNJ޸Y("蘌Jꘋ=K3yo};U+gO9mo)<6Ig9A fpErO5LYF ޯ~QtU5E |v=xٻܛГwJ9|s3Dt2-VS ?*<~GE|/yT-o ~)iyY^dGhC pRͿ~k/Q6[hnrVx:9kF>Y   y:?}Yj.m|p LI7cޢWV H">"t~W\3ClåctoѯnGi-S3^FV?sLL.-':Fw˦؟z3dy7o!J>c-X'{g >3wog6?8Z|絊f]H?hT+/BZgr7sӧ%k߹OS|vp^\pB=?ݶ= r( t=R|?y09hs8zw's^ܐ} "?4vxٯ7 OG}6z=F Q"d@ևDw]Bq~! xs^[_}tQò_gzM'.a}tAr{裔(nro|Ev|?i|)ιV8Y'M8\q!>#g߇еF!?\ǕH鱲fɠC{b)u'"|p*n7 4|h~h?|8~rrZξǞR8BS{ey|]t} K1W× NgMi^~"/e7|:ri֑OZRG\4?6%]DzX.[XS>OJ;%yYj̷1~!9̼ZZ2~rTNoJo-s 2+|ٌ^7͓8=}~fثv Z~2=^y |([ѷIm>}zPMW!L1Vr.w0e'='+=wž_ggqQW47E1H\^Lm WXw=.2l9'6<['!'ar^ ;p_/Jߖg̳Wu9+Oɐjz z7d[e8ͽG?09 oy&cWf}I8j4<|c95ߎ̍κGw{YV?f|&X/@]Zdwxێ^ c2+E>N)+C?Ƚ|>2e}!>xJ0g}Fplz4Es?kWyCrK#:N׋ r c6ߡi~~\]>7x'C"r59n˻wwnEǼ\GU\LWڏ9a֡GϹ3+@yS_hBf~qP?ыbjSBNF&;*m̷;zEՃ7 f/$n=7um0<z+|X"w\*EO+/ =~Mtz7Jc=Y>>˓3C퇷l5[gK8P#S=(9at%}$yswǁwlؑuiܙS,_%tQƯc9MWtzIj;wGЍ]a=;=Mo5u y=y/18߯4Uo F聑?atY.ƹm9dgR| iy`OJ;sl=xU܊1\1}"/zKS¦'Pc+!tSK*I{%[ȭW#a-ojfvOz"f 3Ok79Rq4{w EnQWt#`59P<:9]^Ρ49}(ȥ /apW:Ž\3jtc=ܽ>|[#(GN~:7m_LOqs|C֓En8vбoF7vs39ߨp+h{ay2A4Kޮ<Е[C߂ ?F61D+ms L $_G9jQ{sI>q?o-aop~dýѩ(uXEn5ɽ^c\qs1zI3Հ_n; @OФ%"|{$q\2~')^p4s$OZN+8%&oڃ"n\=RG6Z{5 ;/>[C1Cч'Yo*)p-{}w]"_rwt/U˷y{i?[6J|>C7C_/x5.;?y&)Lly ?\) t^t)Ez[^(8Wҝgzpj) Iܟ)rvoƇo:D.n#rqp ˭.p_/'E o#k<:{ŕ2l7:蜭9y^N=B/f"_=/O2G ~?󦫷C=Zr~s`+Ҍ|Wz>K;מ-E75*t );/#+%ιo>/-wRߏ h˻t y/>TO3ܶ? {S?|]L߭]C4Oyޭ]]34Mg Attƃ0Ï//67\UYpSw]kת_E_~\5GuH?Hi'Ԥc,VJ~g׷^q/ސS܀*@׊u;~<4COpJ w=J;X(9?gmuq?(=eybwMNv/uևP _7`}މ ~ˆ79-_- Wc>G2O>zqaޕ :&p{{*éjۂz_觢W¾qQ2|MikA^]A0z&,/B_o5CĶ',x |c.;!gNqi o3G o&tTX1S}W򅍒GB$t'aΑYu pew+[򯘾O܋'i|gOx 7z.8:Ehs}!ߢvkL/_ Gԑ[ B{t .Β+Պ3ix#vur_i\ɇdQ7nD!aߟ>Vw#OӆpNx ;7o* "=z^ ro,;H*9>[L/n<=bu{4Om?'"%[9m䯶ZE]}%Z5vө9H 2>>J>:/FKEs3c/h"8)y3/7HӪhaWUBp^L:OG.wl1߾[^9~Z6OV j~xR8E緳əσ?v9.9iIαI ~f'%~xPwU͇¿o~88||{A~Kݼ u;G-? ejL|6G`H<_[ O3gqU/Yj}~Wp٬C7-OP9 oid乔2iv3*ip! ϕj<.8x {f1*>2s| A%G69+f^Aiz;/p޽vs ;%w>LKc}v+LMCr9/Ua盟u;=,s:g=VA'Wyz< F#zx&+w+- D?9 9d'o u]i?{; ѧ8{?Y\]tG oWcX%nߞ7Ѵ+?=WK=W?|sCJ(AZ, &:-:ƞCϹ>wvE 9=]s^{Bx svϐUi90t>o?h?|c+1t3- }3ѹ܂:DbEZIΉW?z ̑P?ޠIr- CN?Gq_[> Sk|⇗ZG.Gj-]}5HFt%ٿQm}DarnFL?%䭵cOVݭg_s?".{_9dgCmޞ΄4<$e͗%W~/|$ʜ:m? ~fɫձ\rorϝnw {G0N /Ϛh'_Or|>|a|ʦKǾs>z=9=^ޓlH߻[Gɜ{>RwʺgIy-@fϏ^Fk{ٓO9&>@(_RT?:8?>-?'edo&ڞec6ĞUFy 8{Q h~ E-9k?}Vxk]얜5],qk)YsIo;J](ޫ; ~{wj!2򫿘rtuDD)RV[s^E9p~GL¿/~h}r)?Ir3p)LL0K%8C?CüOC O l"&J=үI>19i~}Myˡ0'oй| ~w2޻=7|>Ƿ\.SY'uWǯyN[#㷜aQgt/Ϸ,e'Nv'sшkGOyN#%^F$4qrHlMv{r44+I?n/%/~1b?~]nxz=Oe>d6ϸC7Շ_Bs^-߹/{Ak:(k5Ln|c-7CȰ?9>??:G}z#=gWڇ߳k׽/J;w~Y-J:t (!ݭCQM~t[v1f9|qminb>2֑GDy}71kˎI7ol+kf󍟕 a|] =v\Qk$ޏ8xe/lW8v1Ob}5%&'#4pЙӡH9^},.Np$TU;MQi޳jyz=={>xR;ofˍk7|_ ]F?vtsWV _K+AfatK:bne>_s=۴cE 8ޑSYvpKcK?WsqQ3+[ѕ\;,k>If/}^4M'"pǁ-KtOX.#8w>Yvq}?75| O Bg-rEf诋5n3|7s>8u9Ven,xe-gWGK/Ԁˍ㊟.*sI =l+>kRb UU96}z #Los~;&ߖNgˋ3|9XLb-3ڌ>{ ?Yqw5 v}Cބ"oJE>L8"SG\zrD~}cdo#gxeckd>ߎtvMz/ߟ]s\6%Ei4zP}}~p0|1:A\*n#ˑ1|A),G;^E ֛(2MhݦoAǡ-,T wWI+9 4yNu9;T 6Q_E-@ï#zp؏-o7K~R;o~}Չ7 A++\OCQy庣z-!2]i9tjn8H+jyQ^|!gߔdϞrtؗm>%" e֣#wg .sij{G7|P͸ӣrc;νrKwWӛANjHG#KGGy[yxt3|gxOx喆=73`2;KdNȠO\J?c#sFx8?Xnn^ ⧶L/?B3)KckWg>zDg>9}z9iY/o<ǛI'_w~m-=ں}]%w?N vg5]v~$<|y\jϢ \e}|z 5ͳ;Xbynxjy1^{MyˏlAHO0]x>%c}7ng*)t1~ta^U+J*I~.aa/8x%EUNGNC c?"<# 4: d|os{_cw,~t}Mǎ0h{{xً<'uoV?w.{a% /#/xy[Nn[2zkw~m ~r߳W6n3|g|{F<-[t憺O]7PG?kӥ'/0G<ځ>l:ER翻g]6q~^)女}?͊gӯν#NXoJL2/㏖ȟ3`O<|,c^޹w|ߕA] ~+%/z97-t]Xt.|dm $x<>$ :<8ToˣmL_EϏtx' gYS]E Aτj>Rh~wC>mxi+J~e/|"zWMp\s=F_ l9M|n kL?\N3-6籌{>X,sT>9uinxv漝>x=[>WM_:+R/S3{rޥ/En|.U@QN %Ϗn[V~ *#F| Oğ6z&;$=r6҃_@xLdGBބG֗da%sӍ#~3_. n[/UtSf$NӣGG ryr+#^~^ɂ,̼ӄt)-z^ͭ 8s#6t" lyޥ6Λ(:,s|{f̻PBXO}\T%?~sx0W ;ww0JWFρ^P72 nш pEkcثo9|y.?Dv\ j,>J?}ֻW0Ǻ\{ϭ6ϼSc^[,~ 3CVܷ;3ѹW\YvˆRӾ玼j~߷Y'ѥ6r=,L>09oMsg~[/\;^ |bjzlKJ?7 fRpFz>\fa2=H=}ϣob r[jy$s@F^֣^PʙJo+0\513^ ?76cМ5k콆W{9H>|:^{4j"}ck>A4TJ-)ptii~ogN<3\}=m'e/gdD1}FypwE9bFOWj]ٰd<ߙ1 .|rNŻGnЭg5C{{{ku8&:iy/y7he^|rw|_/' >ezGU׎^>#Iöz" =77#}gΥ'_"ɫ{7ԧxv'^uu/2lK 1OG^k\ <91rVsByRexWEsȶk}8?S?=L~NU7|zPG!Y_B=n{#Ky@o,Йjz2:)ʃ*y Zs.XR<~h=wO\L&*/!֋̼%/Ob^c M؋f|#:<rwA=.loӎyH~.\|l}fH\JIgc:x8br]X>{)q,t] w Q%~`w#d9t_e:I8a3|?rs|Qr9e'T>aY~V=y/>4ɐAJ}F>)SsNPSJ}Û1朋ˁˇ{nn/|䣉Vu{V/y*,//{ ;HȗEey!pv56Hjkݻ:ľ<mD?Ĺ >]dߟ@'(=r$or O/WH'L{roJ}w74@8ld~{>;sGLDSr/__i!L%Z~}G])!]蔬GK=jdH3ە\s+/2p9W+^|"IA%j]l75ny2sG~8B_={ϷCgCgn軽ןȋ:>q s<*nͽݣٞ-Z۾W^_K)[_M}0m Ƌ>+J#V+3o0S ~4Gr?&fs>[gob9y\[KՆں>)M9]ua^t/GN>^m0oɫ9mE'2I,Z ziuO*[_3} -Kg0{|Fȧ|Xg˳}/2pnf\{1tyxaK];vpCW5Z|W15W3MF/ I\70vZ']5S w"E>7^6//k/ [{=$lB!h1s[+mFKNK=>i't!crGz[9rϤ= K=UNOR} zaNrnP1S9[MflOI}cܓ,?e΋\x:t|6*澸˕,2_}LWlt'WgᗵxBNLlۏFs} po1g c;؃KZ:j>K.,citH)^;Ÿ"k6:Yg Mgq{3tclt<9ߊЇn27:nۓ_ë+wky-RG'_C 3 қ2_Go3_MkGdyx|ۓ7ADŽNH?ѩO .R39% _sx]|_y,>B.Yy)tW^yi^Οs:D^K'y#kIO_'9r:Ni: iɟ'Mea?ւ.r/4{=\?xjJks+!tE>r'ϦoXR >@OM6ό_`߯O1=_([ynpLms_n]rsxrf7][*g$!$ג#˹D*m7a $x5~G(RC_!2y5g=%{7G^ᗨ?32 'ǿG_>쁷z ro Q_~_uo?L(qzя }teܳ >ȆͱQpv2@-jUfe Q5ZW?ڟJ_^jz3ZS#Cnd2sG+>wI7uͼ0*ʤ* AϊV/tv<wa[s/\T1%xR$+\ _ax?s>JU>W&rZ,F#r$o߯zxΞ!.kz>x?_; /_|+l8xpa|T~/wgpg,g,˽}341?ta?仗(~@. <БGe(#OrֳT_1O_qiƿf~i>pbnK,w~ZRWEj /0{FӉeWˠΣƗWi= k'~ew~Ε~`o{rm1O/-gE?a8LdecHΣ{h1z E ENK s68]{; m9y4<^q-?yn+;EB~ #߾$?\tocZnޯy~`kӊYzѪ.Vz߮[O}(Y~nwy I|qwޔz4CNM`?A_UbOӲ\{w?q%۾y#s'ik~r[,vDd~b<~;-'m=<7i0 eMu9dKz{,ImG~n!~ͱEq#щ{_8z5|OI .K?{//Kq5G- t 9nعm h-{1y3bx| ]]!kg[_)K//12K+=.O~xS+J״WKꛪ35~KrbB]|pGFq`f҆u'wKw:yC>w<{w=|e l) jS'U_Em}sk;RtI=I?.4͹<@kW+72/9juPׁkԎ?,~ ~kmgs3ߴj=<-Cj3ay{օT;`?|8l&>OrL*!>]|ya/|_[gֺc]\x ^W)b=wmD_,Ɨ޿ǓsN=Hp:p)t7J~(JP)=./rt7j+co52INu?}_pkO'Ws>H?%gaRzGy)w gU|o>?fe 9<;PF؅?v]TEA׿4;=&WmlW)O xa_zZ ~btCM)q488?RZO~B|7?90{Kr94ks@ ُ~w&>;R`[7t||,pz[靦+=LNoZw@vУ!0&ϖhy1=5}1g|egH&O7{~zK;9jM$ ڌ>w3zmZJd W"zs'xhMu<罽ϝ?(>Br"sKo?;A I{u(oži}B+IQ_"I-ww9rf?HnA^|q~Wܹ.x +nyKLc}ƫn!_޻ɪDOswGnn@Vx}-w>*bn%R"Eqr.R%"76C[NBp74<ގ y}~<ŸWzDc.wA=$Ͼ|hS;- r * ?_hv^V9YURum;/OZ& .!Oy/F^3sO8{~d!mF r%|D 9o|?kcL%/R,wob^~[>t9?B&+{7'4oS;?~{}7ɘn ;Ի#"kn<.͖He8INם=/ܓI">ǘ0᫳r4y1s^exktDz/OoBjy~A;">}'f!p&rGWCv6=/.zl2>tNAǧ վoq5vZЗNAxϑw9P>Vw:9 r?Ls/#ηtt>h9|x '{_,i^i W0>_'zN.o{BK[ތ^xʜ\#^t@U4M⧯T{.t+ȳ:ߕ -ˏSAp v2_ y9r7ό~lLJ]dG'!nCYϜU~-y#ȼ0 ϛ7Mɐo%[ɩM㯉Y|pskmL\-(ҍ2Ȟ<ȼ3@U~1S][%Ʒ/?8A{KG94K;t9 Ou~B<$E[QpJq~߯9N ec﯈o4zh_]RMmt%}܀"Yg ʃ?/]Bm_9Bzl++WVywzԞVWOľkjx@ôJ{x1Ei%}r鷖kឫo0CKU&'rLG;7IVb'v:iCG?o&-Z^$cNGQWF^^-"Nf;_G3Y|v!rx;۬s3|Cze#x]z~=(;9O+¿g,z^z$W?a}Y"ڈw">{Y e0}CW-6&iAc'{.~&t|jx rS$aur$μizhN>O-J}^"׽ gp>/QH;|Ȁ?97E#_oA݉__^x:}ɟϰ/ȅ?F.UNGI"f(fy/ JM>1i/pNOsC-w߂s5syt6WicހN*/kp ;N&9ɧM7>qH>]TqUt2?~0y⽋\]-9뽮s/c|OJ2xYl3Z|~g<}ECnf@'9z sՄ+h\2~ ~p*:vGL+Sߛ89^}9'jmdy gc{z6=媇9#H'Or<wO{e^ jdqͬ$<-?ޮ ?5Ν#/J]|PWat{o~z GL T"Jņ/[V JUK ^d)Nz~z:X*99)Y|im~ c=>J_˩wXg A}ob_u' , s^zuYK MхH\

j=J$F/'!kΗxI=#䵜>9؏/m'9x,~#l/$@ =Glf9|?܏̏5xx#x<e>Yý uŷ'up%};VOrDF\VHJroDQP|_e^~}-fߘ.~x$~3ՙ7%y>&[KYY&Ozjx7~p%k}s?ڇ>&AC g' ǞYg=Xj"Gp, D_,1''95ᩞoȼ x2|z 5>OMW=b:J=?L?'sDA]}WS߮~ӻѿ-G@b37LOngAzv!v s[>,%uy8 'e"W½C4{Px?('9w99RSK_d޵i7w㞅Bv/FsG#k|~l%z~or5tC/Y*>\ϟ⽑GVz-7y*毯~Px׼JO5}B 0IF7{j!CѰ{^ܨ2?:*=tsFwMk~uW\_ԩWG{6b1o7+'gx?xoroe=2;t xS}V\Ir73z89n*zA~K[^L>uғo{\"ү*.~HVH ws9 RF? ?f Z7Y:9也@ CNU%=ן? Ûc{Y]|A9}O1ƒxpG's9שA~0}b??Bҟ`s9:u>G89 X/9K^;=o1"J8x/xa|b:"mO2n_]ˁ?`7xz`}ѭX@G>;#}%E-E7_)#?n?ϼusZKKju3.b%'دxp5 N+mftIA!ۛ-O|u'=80p/ e(}I:_4Sl Y~Ax:)71}O<z`ȣWkB>wP|J{d8MǛ38'Cy!27^ܹ.Ku= 2d=^~seLj}gN,pSgG)Np}r(|= KDŽ:P7>*{At inbyĽ´y^=W|%?|rͼ'1,! >>'3֫0pXsᐗ&+qzӑSr~/?yq~j_w?W?X3rMDW=skKކ cHoQ1|2 r s,{B|a=Ü'ש sw!x:k0|1>O&'.N^M2W{ ?0`DѫIs1STp+ӫO$gF~/Z@gN=~յ:~7Cnt\*I데^MG_)ᳮ;s8߳sߌNq}b =Y,ĵCo_qX_N%_{nwk}|8ߘXO|!3 |`}UCٳܷ'$\_p=5?]ğNbϕs;e y?-4t.<|5gNoy!rجC>)T$%9g.d'co5E\;JfNoϽ`yu!}q ep:4#)[rG\60OOÓizJi>s4Ôs|}{6{mtA397.`|Qˠ\'s]|@iP?z ,H\o|F/Nܵd2c_-5:]olOqN{=B^YTs ~Q~WwRgwrZnʆ.Iz8gq@_'%6Ӕ[vhJ>o%Y-&!+q\d4-50 $HެVk8oFݎ~&\B,I6:Ngΐkg3Oz>X>j§TAWsx04 J|m֗D^0%Go*W(B_,xρyB?:=Qk?EW8{|398:3iSvKLC9sz=.{>}!I\7/fy{rG6[4Y-s߯}ϹK?Y4]փN9>{~/Sc /ߛ`r(9eZ1ȯ0}yG$7q~}Of[dy᜺̫dc'x?v \@sZ/:Aw~xz%y3y?5 ۓOߵ tg9?q?׸0k+`Iws[6ArM?aϱ Is"& 6RCDK f09"Ge} nap&tIZ$yd/sS9?>i>fɗ&w ȅQ'8̗_FY˩ ;+L?.}{Ǭ+f1K?e~~ۙOӥf+;#/D~{}F[&Wc> /{+Ⳳa_3N.gN<~? 9|9zc(o*3wNr<3r!k.k_Z Z_M5z1sr"X|iq| qtUpӉOzD2{7bR'>\N|ַG4B}ܫ?2L/DIX[s <~8|p5 |z_i Wa[֫g}+㹕>îLob+:2Ky}7/\V3|Y>CLWjRTg ɏ"󃢗~I|yƇD޺6Bޅ%z#je؃@'Do?7-CWyfJYuA~!x+˛)CBrW|:Gd~.ok^ڶOh9$~s|GOJ#M—p$M&TFw>][-r:^|OXn 4gCzJߨ`q]@Xķk[$LKf:+Ι.Jv"WRS̱|ٛ4ρ)f\ښ ,Kpig;f1Ln%:+ 7nEp<:\;,yrFm{#?K"8XMS^} 3$KHˎ_<ٓ9$t;q:.=\mZUy–9%Yrkܶ䧥̏Ys“i\>B|iSU:I-"azVǛ|>>qI*¿yJ=/' [H cVG3{5Zssbbމ[ʛյu}un'=cyEFb>d{M'`N{=A $AgE==BnEzay޹y ~1W7y9^4X>2M06 [yr:NA\Vz*Ea苔V9[6xfȉɺ Wܽ4\ e5 u0yp̊+w;j/5/_ss7Y rn׃e gy]Nbo 9pr?\]g{`Nx _[b 9 m'?A"u5߼劥8<&ͽfQq^?|^ oh46 ;qi9PTFtuݻ /yO)Z}ʐ{Fɇ '2GZz;9m#y=r,J>BX\VYOVrl,r&U#oL1/d= >oc8#TVOo~#we~r%'7[/Ǻy^O˱<;Of<Ǐc t\Da/>uS -iIOC^@?A&xn6K C>Fqp&$m㻓}WqtS=̩1s~%Lf} x}5DM3*yѳ]tW ok 2ȼG^] їE?{~6vyd|##J>oz_'~{{508n ]֙#;MWkwpS&,{>n!J(:"$9Oa8\.")iss}p"xI\gyOn`LO-d2{KyσO,N>U\n(ssZng-Oa>E×gg<]75=x(-Z< *x928: Oe} 5N7S4=DJ|gS&ݍ?b sbX~oet]%!nu:vCO8JlY'io ce DŽNG129y{dD[sf~ ## pD { WXm倀~s=Un8~w;?f/ܳk礕ϑ^j|c!恓z3)J<)=?\Is'~(9/Annϻ@_ϻx-;ͣW0GSO >K}| &2ac=O OB(2ȽFndЉuJZ΍>] om%_O>ti>9Gw(>̐2CD$sUaW>N^ ~[Bˇ;QxYvVBG&t\nV?s V~枤ޥœGJ^N`<}80|?N2\0>1}C^y'_xxbQK oIX >|#vL'_G^ !6N s )>op44>I6Ӳ)spGnKC1}<-@C? y^& g_0_se}w3=y^'G؇sC:~wL_K/>o<Џ_ 3bxHU^D%|:)|ˇK#y#:7ZMK;\?]oգ_e~)pM4 .6}_@v ozLIm%Ø>܊ &g\7eNb+Ȁ/K3.LNUs,Gx0I3y ,@6Q=?j>&O3̍ ׏'w>#Ý3y=۶wrG0^}5;~Cݯs2`yO^7v8to1# rv[i=>og.$a96p<'{W;g$1s3Z2'~prD$WU)~\kmG {ekL82f8?YnQۂ㣤7@^nUODAe0޹[onP[W 2 y o٣C/K ~}~ٗ^"ECt_HK=}63KR=W䞍/=V濢_󽖯<)f׋$n>bn߅W2?}ݬ0<0.7ȣ=E^|~wxۻ)KE2^tXN smOWk!|rc'QxFW}N> `NpoΡg)ل^w\ p{-MB:.DE/zM-I Zo#o\}mKpɱf#"M1>FyLNuF9(~XN7:!3vxMD_rmQ9q}!9 7|6(YuCZa.ǧn{;wV!5HG$:D \/>󿽲x ſ60/}Lp<~?KOVpgy֧-7vuq[rSeвM}{!>_&e^:3^9{1>9W]{Z[Nz~rT,ZhjsH$Kts:P-n i*'dJM>F?| ]ۦLjioYV%#ǔJ'YUЏ />Cr@5yoQ ѥ>~vo| ij3nx~Y-jx Nܩu:_ߥ/ߎ_k>s^@Y^{QˑG9&'h>#G[=^?l+NITr|߳:?ק,k>%žk ^|B{SCףwPcWm-4+Ğޯ S'KOuo~G9r U|{5Oϭ/Ϯn_tžNƟJ_d} &uͳXN6t3#odv t;y|˚?j}ZbH1gYKy&=(o>]2 vgs*}EW^|>Mټ>1{y~ՋO+y/6tY^D񺦫4^qtrj>v][({q~xr nuhP^)x@I;ǭWW iynsǻ |1|Io˹BoWs) Nݎ.~ބizSv5^372xI' !q]~>9\Ex33< /Y~NWcAyb]Eot'y!9%{4.{0fO>¹V{_s^5O_'El9l-?O2_X ϯs$?a [&+i]^kwf~̛u6rmFvx9=ᵟ2zx<_.{6S2YO7prqp6ܟq~>\_年F1"8p#ۘ[-_~^Wjۚs'F>2i~]}|9|kF7?(ɹTEG7"oCG'@hxv?8z0'w>5Nn!ut(9|)r-׭%WY >O%,4]Gmڽ}^{+;g>.~_ZF#v)&ת2ϓ'1K?D?q2:}c'8~K5QaTH}^oi\l^+!U{5_/I;Z~A&[H/ȐՍM6޿I)*?g!>ߍ5q[4Gn-eCɉ'ZG<\y^a|:O`YBBJ;v3ܣ:SVwn{[##肂ܯg{w@)7/O2צ,|0G8,OD?=2_񋙯) @~$)kh)S,CWbW`D%k9gzͯ$r 8罷wLK9M2O'Ǻ0z ]''X&Z{uHeyϙtsN8ZκxZ0=C{ s9.~ `O>tb: @!~<1.kde_tm?I/[f".$Է/yxce]VDi/,!T tp{2Xn~{pW')~垛/S/wt 8iטӓj3"Ix-O-oӽw <@|SZ=sx˟b>-&b;w9dm['~:>ax{OO_W^`n~?z`{l~=B~aǿyroO~]z^q6FU\ p6><:yƝMo3}zMYj38W%O~ƭ莭'mCdy5%N-?j`աraDuǘ@dy3 Z11w3OF;r?tBo{v-w,ۊHwe8<4:M!~? 3ӦIz¥\ݪ oM{G=pߎ7_ViwK`/|fxg~^1|ڿH o9kЄ&wf!]6oz';/xev>_NCޞA`LعVŷ~[|K%$Þ:_-2b8%-jz9I—> .{&_>˵AXt?,;}y6^,ùꇿqQ ̷BXArc̹ 4LE|a'|xk<ona'+ώw׸0}W}4<}Y244|?wrlw~}gUG_1eO ï΋1C87|υ9O>!Mx1~=musX:%-m,8!]S%ODW<?wh>)5O4.k἖q,gыϸD%Y˙́gxEi ?E=t5W/> u z:F5M7zfM䇶G'e{~>Ϝ'CUS63B`R>ԇ7J't55Y wiFnWc̣NEpEE["܃hxgyl"{ȿ~o9:ȜMy_6ǧ ?DG>^sK÷?-en<u3p2/~Ӄg0!?Q:CǖDO}gO)px'냔)t p2E[;z>̟Tg):M=ws<уc!d|ख#v~䲄_[>r}#hs LE U;)^͟#{ Ŗ1n^ #˱Ƚh=Y3Q(XZ_f%NTt΂C> :QJC&)|Rw_*ʜw:> $ h:a眆mF0N.p tؿħ6';oy/oɱppÇA?{I|7'}tmƎwKszxn$_4~^^ԟ߾a)tsΰs`93z[ O!?[xSYti[ q+(9SO?RAg;K~:db:j'3%/^N6[@'Ȼ܁g6AGWG{.oDvy&/f{Y3^&Eh1q!"GMz/6sJK嬃_?>d?Rg6%~^ໍ˨9tN֫93ks':% }Q@w;|E+Βg~|ŷ+a%4_jAt* |:n:gAi.qjࠏy4!t3|c>:JֹA$xoyUtl7=6䞯5 y >}Qοg }YRRI0W4ɛ/y÷W%t{}Ha49k9~i(Fߞ0^3Ds^ >_/XB_`y4z2$z}{u^wy\nE+ BQ=R1vG_8={|{.vv(anӭ|Oo͖~V?"?cڿl /׿6:Β88sWOzݝߏO!e?~|C[{qp'ZNp|yy9C~ep,>Eq1{p9uU<\g_ӯng3y8Ge(|zOdˡީA|w[W]jVx9^K^/2V$s-NZ_W?HruXG[[oS莌?O^ =AKt'x3a: a?ntJO68{6mW3{U/ν/G/$ W˼D>yEd.?&v8/[3.C-[NsE'w9 | odo~=/ yix*HdIzߘkfLJN ;˧-'g '9wW_y?7s6?5?+/)wO=$׈»wvSwhR9r>̻/"x3#/<C߻M5uwAF=-ݿu]Ze~[v;woxT~z[%AZ=ϛp'/WL9Lny`o&r+y Gy<]nעꕠe-DQtvm?SLwEm}X;^'wAk9U2 hl?/zOĎ߿k'%|8O>(.TTȃ |Sg~>ۿYSap>-a贏8\UH녏?ny^y}榓? 6t3owN6kc<$缝u;?zcqĬWľ~z[~/O}-wt%޺xig<"@6{w]1P>:gNf{ph{l]׿CfkDxOȹ>x]94R9<8N;-1"o/,/:?rHe.z$sOT# 1tQ $w-_𹿓$9jYw>^'b- eI2e"u􏧾6 qA@'FgK;ɏ5 /ߦwoj y~> ߓS~{=B_i~EO9a)v1OۓM'oz5ȹY7UToemaO/g_o=6ϞeK[';x,i),{g)4KM |F:\GKZ=tkιnzBϋKG<؟岜PӞ^e:Gŗ|m'>"N? >"3v~vk[?$tC%pi:naV O:6pn[?hEE9z0ָ_vs뜦'<;H>AܬL=cJ4@ zf=qeeytl1 zztqN}Lc|_|0Mfyxav{fɷxN3ߦ];|I~>x_v 3?|L&d9d8bg@L_z̒sſfP9l,#7./?xIs~u:i }5k?do=pq:Yu!gcW{P"g\-у#̾PCD1Ws.COo\W$gq |<Ě-V݄faZD/kIia%!U#g YRO9}>t|J$out '^0^pk<]?Qt}=襖y/<)ZڞT`̲ɋ/*x JnC X>Qz%z)dD9~uC?zKܯIzl(>r튛4s׊ @r8|O37]R;>.3zѓȣ92%y\PW|W݇嬘nԼfeϠWͰCy(a%*s6J;ƇNl3{ 'ezwHލ̗ fEp"yq)Eg1=.O ֧KδVϒ˲k5U| " rd}mG1f=y.I8Wk DUAw)#Ƴl_+qU-GAG'z2!tGkrs,^aף#UXNpk *~N9\q<>Fsq/Q| AE3"E6+z*%s7 LzQp>U yg)r ({T8r,oЉ"xs< 89OK$>@G5^O#.26)-g04x\ b3Ϙ&g9Ep|-~ދĊz vCj9rdz ^wx6l%C<ΠqϛN^>]/ "s]=}֋s{(_|G3쥦?t=^u je|~<ˏf~1އQ9=OW&7W%.O\f~/~̇^1k^'DޏV[}·!Tiۧ{g?m 7>ERfw3 H>s}G>K#u ӱYrGxOC[.s^/ð0czAWɞAK'X}m yއ#\Ru k=}S._C>{QFW'3;ω/-pK2>z_υ׶\#)CǗ?[N;je" \ ߯ }xͻ޲u['3ʁO/c9!eYq=a~=D_oPJ?s߫U\ {~,1CN3ܜnqxx+d2]\!6\c?|t9YGlF/=D_x9t>z'+OE(_+2|4yyR?"{fz yOcLr9~\*=OՌ~DIشRT"]4gK7N?>E'Y|)?ld/h|rO1' II3̗ggcɑ"z(>γ.=序:\3D޴g/;+>C{EMcIM1gլ<~}qCz]zv9!sFk{>YIr9wGO/B'7vo% ?T/vnWJ >rh}몯]%?Z_ e ~VLT'{Ne ']|y3|YS{F}#>={s}"S cIIWiz;k?Bt-'bᔤ6 ?mrkC|~ pn` D(9hp_7CHZa(:A)_+řA_sz?dl \Έd}q?y 4M1VǏ'g 7Ow{eofL%' z|Oa|,yR{mc/,|Ar2<]΢&^4&~ts2]ˀ K0u=s!rK3h}/Xp9BD0<$n ?ܼ(}Xșyj]#Fߖs3WU/놻?4=32ߑjgF/˲Lga^3L/cy( z~r?S21 gz(١#Sdy-ίϋd6[>(zt_g3GGމ>P{w A9ey:B= s^//~d kL~)n*^Q3淉>1rT3/7{zz|B,%7u39l?LoQ4{jI,E>Gk z8y%zjWH\rx xpBުm4,FRG H'bP7:Ȝc>p)WO |HR&W.лƟWrAOCKx{Tc G"yP=nof 9d'"?[Y 7f,8O[!OHLn-Ʌr n7|Rg7GRG|o!tS>Sf>ox=瘳3hp(>`M_Eu}}lxn]?77><ݻWqOzz"s$Gnaޱ|Ƈhs>[UL"|۞77yj|i7'(//^uS S:,N't_[1 /O_\ojm^4[<z*a3wDM"yps%Xᔹey0ߕzzjDɬN=D?W!<#_߾$z=8\Dޙg֧py`$=)<:A.|Qmc_/|TJXs+zsmTč_\v42>Y|֗GzyԆ{n| U-<:2"|S]>y:N_`OHp?XBeȉ*HpϦ}m@j:"<(|ZM‹ɹZ{?fygt%y[A&ߖ){逥y[b/3Nh=[ܤSuHn8 Oέhc3 ?թǟB|:H>f=v9q hQf嚳~u˃9y 3%9Ї`_Z3?%7T6ςJ>qtb_t{d͝w <ٯܘc/Ins_X~qH\[>'mAϡ3R{Zoq SIz<ϝ"-G! =O~D6~JN6Eϴa}$t:ӆ|-U 4w ȩO]$_v|0_i!'xk]BObM\9y!^t{%pu~|73ஃ5Z Bh7LЇP=?t.e0c[Oy痜[~|t^˿}X_z~]v::<kQ篔>$:cs+m9O"Ge*rhõvxN@yke iHo 9tyoQS s%]%&s\ޑlXjyd >GHס>J, ?i?.~ ]N`y$6GEY8?,Ͽd91%Ao-r.w=߬_&qpk < ^_/ +3d}aܷsd:9Qq%zgoe=2A9 ď79=3y}~H|/Beg^?~a{l0~ ~r9{ j\!O$|G ߨmZZ/yXJ {yKk}y3yLf2ԧЗ],Fܽ&;4.ecP!,z$|*2BBO݀笯?,|pۣϜ';ns?9p)G$W&?$e?zq7kw5]@{-M~ OF*yz/pjyO[hZ~oS=i/R/[O|k~fɓ>Qa6'7Zaq;bJW_2G ~I%a>< _\}:~tS _?¹l9="DߣwSb==O }0z`snk?(Xnɂ4_z(/J VA9QۼjS?Z|ҳ9wHl)K$;D~Y=Y9b {P p+?ozI 9<,\wr4Lg|_]>b%=9CEuGd:Nz~0z!nALnf09\Aǿy?5s}&M<4ʂ?ws=5%0'Gm1>pܲ3{L?1ی_5,Pz;s< ӄSqA󝂧,`=l:~FWd1Z?'m>1G^ ˯V.?~NIgÏ!d}[-be7z9)O5߃4AWދV8Gt }\.>Iw?hC̕AuCboz8K?tAG䊨$4(RŀФJHH˦m˶l63;egu9s9g{6gr?/ ٝ9羿TE0,{}K(sM}6.|/ nfΫ-(Tkqc*бd_8>8x8>0Ok+x 5ʼ 0ι_:Oo8{zV7w,Q|Y(f2v _/ ZO^1wK(>8xox#|_bGZNz׊\0\TB-x<~*zet͐sNoO,\]}sk;#W/Jo7`^+\nW%+q z*|$@{lKv>w?]Y:G}f޽D9!{.>ןtmQE73:۹O3mMNVDc>_ԂN^[>|9Z:RskwۄW8/ɑ&w3{˸xz| oz1}y>cd*?*z] ޝ^:c~%%͏z#!9ng=oy}q; /x?±œ8f/+USoWt.EO,?8~1'g^?8xG^3UWh=sy]0{:v?{6P?'1ny;/?#ϕ~,+0/+E EI1r6y+Y*r^?7ָsDZѵN,zq|$+}=̷[Ǚ_O2̍5p蒾 ".1p*{i>cx35I,{Ճc?[ٹ/l7Erwʹt)IKO|~Z^H`l:=)yދ)|3D9u%\}f.W7?㥗|qkŢ=q7OY #AK-:^O\'>i xhOS_B 2{-{&s 5pngUX,?K՘->2Rg[&w.+A\;#лsw5= n?ɧt5꽐o( NVg_*~MpW,~f~a%nk-+_ta~+x7e5re=}E~}f=8. sY,c +OxNz^{ܛL'7+.p(/~a#Vq{ԭ̜G$]˦y/*Α"<|P1NqN=1>;Wȑ;[Çޔ$'o[=\mlq?˗pE25 M|t,HS/8sa_m"7;^]MPA$wDgYo[[(=>=7}qյﳂdp|d~Ne{.Z=5۸t< |[I,]S_'r&l׺?78d u0Gs8{KNmo0t_9~:<ca}3%hʰgTϏ n rb LgWSwGr-} ䷐C%rrvϓg=?/}yow=3 '͟a~;Z&ߌ>sq)?u70ר9q?~-!Tk[8 o*#N>ɮ༴9-#qP\ t7/џcOg'ѓ{W7z&ͯwc9߼:Nz|T)U=՗:<8\㞍W ۞`GE9GIU|AGY Nsm9tׂyעvk/O]$~OrMp)p_,V>(sNS7y5iȒ+8auUG9T}ιVBߚRn"褋<{8{ԲU"=헯{bs(>ȥƘo}\*o9HO4Q~( ߻*%eFc? zsbKbm*ȕDCsW%лؔ`;\3p 7OfW\hO{n î_XqDVMܳ[ΐb2l:,RΡTlPu#'gn,'c/8r-_T 'SB1DySK1:}Q@o*< f۽0,{ hw}Q$q.V.xSjAnut 1ёχM?U1zԾ|j}GY1z 䅆W?Ww_y""y-Q9Σ6YpZ9/9gO諷i('yZfˤg=lJyM |~y(:t(y'9\.;3gxe~:6>(>6tSip_۱5_7/d/|ٟӃҟUt%]j%΃<|lŏEC yrJ"8%xZG%;wެ@gM&zY ǂ9g2'xsɑ3pKY~$N4+d e 3/qK/qK_4u/3%f=z1ZC徒 OωG' 7^m_6~xH}>r; 3Gϖ- <I->:zN,ltv+:WKƏC!NK-0o̳ 2:t VbHȾu'7;| sᕜwAW<@Oɷ Ek©s.9fޣ?}ܩ[HD q}4]nJo3#0'29uS)g3ޠFY>>x&g[Sxa^cQ$|y@0EuĻc˷ tCa(q|zNN*sU<:Sb'҇^CwO9';9 #}0{h\#Gf|<9|1;3oUw}j^y'I=O{6ϠSfܴyp}>^_fnWYaϺ8FЕz`]%NEW':;.<~^aS8>p=@ܗ5 U((">"^+;F8/'A(\( 7 @?Ko!_=9W8{t],9u9Qo<{_q/S&c׼[v~{-8l"s"'L^ ȳc:L[3.E>2ly^Ι{9A. wK[}:0~; oRmc~~j=>.UVzn}qmS:F?9P@GNwqD<ľ.>iX7y/-۟W"8mRR‡;T|o_b}](~k7o_$=Q~U8ZѝչU.MzN"o[/~lR~Oqec,Ϧا5zZ;OEyjSo7_|{74']xC)m@#;ܩcL8˷[<.2z:Hyoዛ!7wKRNg:۟}*+ur!"/~"7kUy[>O+_HMQ`roO8z #cϮ[_Jp&O^d_< xY{z_q3} ^ry6J+<=O%{k[|>ZyEzJWɗV?r}~/tSr!m9><Ϩ?}.|@9t.С7+}_B5pT=[^H?Xǩ3'zp+G>T t@5%ϏϏ87=_:5:J~˓cP,d=|Nx(U+/Ez*&~,1,y@ } =yҏ a+fL.䠪"ޓwadSB{=E|&1|;1OrߴKJ,M?i9zؼHΩ|ǟrCܓ- Bit }tƟR6BnSYN~SyN)^6}~s}U6(+~S/둎S=Q>c܏;"7;"uCۅnn_]%m7oYmM| Qn M7|C%sS_tN鱷ql\Mzl 9 W'Vы7̣sHu9yBMzR2Z?28[/E}t&+||yɚISr px{ecPEٓާ6;7>Yžu岮h/"AϚrɗAtHO.^Uo| V~7e|HU+ߨz5r: nN//FY/ȩ6 x=^o!Wz>_JaRѧ8%\ tE*|r\>>{e|U޷U㜇3Jg+m5 X)9ک3_+̀tY7&>^9t'꿈Bn "o_u|<< 6~{L?7< ~𧫼y=~ξ Y?/۞=A"`C=3 ?*wҳwϦʦ9Ύ:'W9W i)g2?=ٿ}?0vG Wӟ77^ wٷw; Tycu*^#|͘|jU3wIm Ut%G+_x=;Ng+8ི1x:{v7}6R{q|G[r}_4ߧtGd#\@WLg+[nۗ~w_]1|)-^^s6J|5">8Wo>vCOQhosj9^Ћ7g4gPO1#}s/'1|zrn]Q/H3y?}!^W{Ǵ+:8R u7 > o)\>v9 O&0nqcAσO3)^IQG3f*{TKo$_,cAcp%sWQ+/0GW8'L =$_*\;-|9Wmw}<G{ K"5rp9܌,Х"g$&2:rD,M^sFg/+rUxiJc{8C s_W.о(rO.ýBcu:f蹍\ļ6ϮJU|Co5o>Yl;8URj>)hMΗ<;>8z z,p$g.RH=k48szC#7ҖFc>rsz?œzAx?=E f}u)|-mp͹v4OG}fd3艴zzNs(Hoe <6yaZWPxDV|=|)W.rC1 ? O+W'[I_kɡ;¾_Eo "^cΨ'߯k'_DU#ϣ:>JWU,]I%/ccP N~T\m[%  ~2So%>*{٤`3>ZGf9έU_Az myCKcED}KR"OjT.M}v=L <ϗSl~a>OVzE~ pw&v |q_|_^. o_eEti1BG3+ʫj$Z[5w0y m9߆˓6oVй _ R;Wg*΋r~oZB}[t~~bsqS<y"z?[ ~/Mʹ' sQT{$p y7qphT՜_ʿi?7Щo^e>gI- ?E/{~NS}ǚ'-?U]z8HyN=`q/']ɉ~g^s3z#H'dY* ݠ?r9uM{AHNIGvh{߫cK༲ yEywPzwzA<"m|rmX=[o>$T=A(xqϱwD?ʃn;sKA>CuQt YeQ||~ ?"|E7𭨧L<2=G^E\4ӿh&%u 8N~\}\J.tr̃v\6xY:A _rNp20DpC"Ͻc>ˏi+7 c):A|sjn4xZ!9Gr{Sal^>Fn$8֑琳go>^2P}Y`,=q._|:MK6J1~ y_:9G/7AaS ~g応 CQ^|{4x<9jo!g/)y73w ߨsHz鋱;Ѓ_IsWEhF'y~|,Nq]ѝV9g&ćgk* U~͑-rRۧytp:z>9fx:%p ~l MqphG?_;({U}g>ӣ8?硹J$|=pY|tmwdzw> OEOF+/`\}qYz9oѫQ9INʭ))pX>m^WU>S|aϒ^.*~D4 t59|J>2}YCU^BE8"r'w/X})_qzS>yxtޢH=bo@ 柂?k: ~"]g[j+POE}SkOV^F}|8{\Ep:> <~*o.wyG郰>;F7_&]%{sof9>酷->R? =MߎɢuY@Hy $gJτ9(: ׾s>žZt mk1r0c] >;яy*\8!xD+9%GG!^g'yK4}R# }'opV#ҕXoyM<38X(i\(W(>$qPml@'z}a'{(gȋމ?\ O.I=!m׸ГMKr:B<"#K?9{={/x|aҶ#Y D9 z?Xr!NAn̳*a{sin:$7 {n{7v2En'7ǣJ譪/~xQ9ro~xȃ>΄o)8ogOU/al=^W yurIooYTupI?zBC\ q=IKzTmL<lz.SOME6Mk^: DaOmǏ)^ <688B{;ĸ 8@[A*_2ˏ_YD}@_j? ly߳.g8͞T :), xrG*{]aGz5<{3n>G{Z{@U 4~tq|MC OT6( sB('gģ/z䇂-|(?|{.D/(8e:9?ȫYrS{×z>Y4 rL|=q#qgg^o!dxԣ^3ͼ'h;n}9a,r\Ԓ˧1:geQss_#2G~y\a/9 AQ\k+=>7f_{UIƛ0ǩr{^[_s#8:pZG}$ԗ +I_+9*o+s5Dt/45jpo]sWwSo3D#:ykس7CЏ"Ga 4~;1m ':ޛSk s68GqO!^ 쳖} Z p4߶`o~c܋؛e(oϣ Å{{O.l~ܤ_B]9<_U wɒ&U{?Aүmc񃫶 Nγi'_@qL|HÇ~q%蒔_a>@U×0FĪ4_w~@_=,N `yO$ |[ =*><~>Wm QB%O/~T2wf; tl^ '}vaKA7:>9>u;+i;{w æasA>q'?.j zߊvsN9t%xj窏N2K|tgNot)88@W Y]x>V}iI;7؇F799?9Po0>??@yizQΥEyx*G~ :ix1[a]!@7j5@i%cH̻7ѷ 2' sK^_yIe\On}y:t5pjr&o9_IAxX<.|:|ކ/-77%o蕶09\F?_&zSWstfϧȹ=^f掓ܯRدsOs FG-ogq"m|YWl Mk&?J'Ya(I=?9Ar/lq"|,r>Nw|5teλ z^?Wc\sm3GB)x$K/^m;|FcSͷ69cFeɉnûe]/ .rvԯ O_U:$Y9+3>6He\4<{9ow^@|XITЭ.M)_<Fb'%.ZzfyW^66>*ɹW^'ǔz.OV~kjul_Бҫo\W;t,ŋ!-{X{9[&OU.D}^fxN:*p˞ãEG3;?n_u|_moi]]O?gѻL9fV O#^nMѷ,_xo)xZ}_anGcYt3,d?{7{x|,{SrM?<\ub/$E>Q1$;#VIrc]BwW N! F{7n7? u <8U7Ig5v#& {Q/r{<0uk{eyarN|x>rS+g,#y5O/1duG j MZ] |=> 'Xz1gٯoEVq@8ssxD3?>G^^Ec1&ǔ} EypL ߌNO[T/_S<+ f ?Ʌ 8@9_Cut }uzVpiuVwyVow?}Gm =?p#7_yV r?=8,{z 3y=wL<๓6aLC0C=C#c/]yVA:A噛žm *<8s-ywF^d~;+g~k 9F}\ϫ;{Нio7///|6џ.i޽ɀ<}pPoK9= 6x| _5Sge%b~N][V4z1;S7HN%¼E'd9WsaN8՘w_|XW8oIe(UtEO=$gѩ%'c6rYw<[|R*E[?o?jKZyZ=(s}5|h<"w2Wς_\F^w{f{_);ɁP~3~p13hyL}6 >p=c}<{~=u~宁Vx;y 3ti?C:i8lU(_Hu@7ደ aVޏ'Ni1Os] WϣGX<W7I.yW=cc< +"Oɂ# _>=~8[?5RoC'--y{&=PY \)rt˲:4q\z]Xp]a=x~%El )E"[vQ.(CR?='i2W r}~: My>5x2cc1ר 3璅@W_FyNMz0~7-#|N.rf>&x_caNFf !9Ȝeߚ!Gz y%Izsgk54MyAO:O?|ryV~Fϑ'хk/ӫ73tfe3÷w^Q^G>'PW7}k 窰o|}Zڢ[$oR$t^W>yaphIͼG]}xK?¹!4eSO˺> 73O,Gw=_.0>rS9? _x+,<,z*z6z'[3x_'^Sc9|-AN+_A| }jp? G'Rrෳ" -5Cлz3o2&IwQ&ga9'5N _Cn:2'{so'~]Cc_Fjܧ}5UCO㣂 \8ky [N+#`.]#%z!WpܟS||:XF~yrTCFU W{{Qq|gxvG.2y:rx/ÊqPUѧ#^/ <%ȳ Oɡ1wIQH;k,݈>N_AGg߷|=2a-0wGeno2ʿ |l?#*xP#~t_f=]:00'g$N$-/韚,^dl.rms6k__~[EϤK9밯TSU򇽌+ü9KOrjstMzaQ+~]?~IY ^_M9S#C 'gܛWȑR>o_C_3ѹni><;k9a<&8N=RyѶ^g=߼j=AL0ߦΤ މ/+!{~\=l=V13 o(;?f^= 5 K軦W_|i6{Y|2m Mr: ;HC+Vx_{=OުOЖOh; cV_Wa^·{m(g9CnUA=6yr5GWSvntUrlycW*,.ރ!tt1Y?TN4YΏ9p%=^Y'[CFrvYVz1nEyħ^9;CAȱϡ?y|^zٗVVɿTn;سc%<(\ΓerZ]u; ho(:&@cDm+55r5$0I9-!("|`|?!4nx*~*sun~vhp+O=kr]>65xZ˶ 8p_zF'o54OK?7 cwp~+gGNr~0ʹ?u=c-+!7RNVO9ʉsa'oN:x['k̻ E{&QqpI5t?g{CrԿ (zyOU::9ZJ'a#4+myp~xl8ГZ5l?~1˽&^4OzZxy|rn;>*f?ɞ:OAL3 ue{J/D..75ɡ;C?HjxTH;>ۺw6噡[aΕ'ꏞ+=>_ĕ?b67z|#c?v_֘o0>muGfmboX]C/h_N}s7O>^>q/齿鯼%{O g>LƫUUJG[ԏTOrnui}-C!CEjs?6ŧчȟ U:XMOSWٛ,{O|;z5jM}o\ħ]WnN -~4S>)|sξ| {ec-[sKΜuw ߏϡnzyq"~G59ߕξlD]ߒ< ^wnrSߠG\Џ KWJu>sqbr38C#e^Ds~3c:}6 \stv0xN=Ir;5_hU^#w Ɏ\']U=Ev2SQ~ßyʷUuɟNߖVRKa Hu|}ߜ+>6Ry \Z[3҉{/F?ity϶'z}N>a~^ޯ ky%-s_9[KNm7~9(*3eRO~*z5:~pC<mo\\=E> :I?s_ONK_!ҧE#mrW/(}q`eN-NʂɷsU>0Gnpy 6^*̟)<z9l?sQloRf/[a*VT ~Ź?L@]q!*³u1&t)_; 7# #ΧzKUW:lst6@Ow5QFUBBSC^+USoϢgw>y'Ԇ[̩-rz+'U!/%sJ~+k-iJ2Oww$GV:Ty ~,sY|AU&yt֏ޡKli{~L1P?9OY=r &ϻ%-)x\# ]:CCav9$sd/2;k8ηs!K.=CV,1/W(ߠ' 9Ip&zƜU:XU)Òro:`0CnMN_r=g/{.*sT>W(8dsXp@A2+(ז'N0O"yL%co[uy nHx z/6oMG`kqOAWzޤin3#n׽ϑ~K/?{}Fpէ6 3NzymtgҴoß/F^rM;u9q|,S+v '|gv+OA6~)<%ya{?ɷNNOU=:">HsN kΛI2t [v܏.hs߉B; ?<9+AON[(!W?z/{磯ex#A'yoaͤGڇuV}"->8.|g3K/W&z7鱴$l>+cjl^e-i#Ae/'^< בwT|ŮO(zWNr˜cuK胲)3yZc^"- ȮbGN{M̛uթ?Z91uy96B"y&]nt=K%r]~)?򥷽u[/JxX|"kM~% wrA>oO*C!c{4H;{e᝻u7ɼ߾Ip 5";+\?鹲)Wmw< ^̞kW:U;]/^?;gw>q݈B$X^/JOS^`ߟW09dg-aJ0s+Woip"d C瘛Aus> Q>>4yty~z#>\zix9ϥOc\J3L:-ާ\0=CQp*S 9g6$oYSo;|Qָ΀sl>;gOT|zWKFWWG_;箰Fpap8=E^PL1Sg;vpzی*,rw'^-S7<8W ߯ZŬWntq^Ore$=Ixo{y`^Ypznl:.,o%7[..p$3n]GKJg0%ܹn|Wz J/U{*9J_iɡ_V:{`uaw{|ss>嫁:Þgu*e.^L;>֯?j3<G}{ɥW?9enwkH~?zoO\.'&ps;-p;^zǵ<({} 4 Nӑ.'V; x-|5 SAogg?>g\ô"%G#t"=%9B^+V2y)>D3e"w5| asw O7X^=|Лꏪ;?N~yfuףw} S#azWy^}l«tc5@S{zlm@mtW|OmWdW$F |cߥsG~z=oC*OYsH ]:AK Pe(~E]̹9F_%B/ky~3> r797ԋJi[g /V%(.k暂'v!'|EZυ~ SɯQ&t}[ >ʷHנ\&T85S x̟ζq???!ww |o_}/Ip{gIpN%_WȱXln|=JMc0Ǽ8FO.X|n;8`Kk?xe~C>|2Ͱ%OMSBw#':n6?ost\}'·PM=72}/Gy_:9|Eބymt1|̝<_% _C_>e:yC ~>>_N,|mu_0W}>Qp~JM^ 68ȍPq${ւGi% 9%๾Ϧʿ3稉!>MFs6o?a߻L~ >W_ >|prk*?ab{Sz:L^&a;|O9>Ğ`?nVacd~9 _΂+Ch֮-NpW4/P>} }jin_n~#ו<6eGнѳȷϤQ2eMqztSUpw] Zy~|mot1O_}On~e^zt_o%B֒r9 +y5:(lqUp4^)tAGfЛ+i1z3N,>TzT}߉`7b\`9 N|*U]lI'ѥɗ55hzmN1xQ(^typA~O+I[ig]"^yxso~2bL2WK7dO8YǞyW*9y7o&P L9E_WЉ! \~D/ _A?oGW!ܟ|os; ^{vuMt7 #8y} ̾{#xH|;yNC)+ǎ}&J|u>t-'>g?ۮ Hks|>:l5|Gg:#oL^ >9%O/IeVOzӗ>CSEߡ#cW^>H8=CmG?}~'s>~d9t r'EJ>]=K1{-z倂y&{+ZF~(~_k}%~| "G/3N^? 3&kUGY/-$:osEF y\-Y#X}! Ͻ܊5Fh}ܻ}_q*dogU&T _}"O{mW[[F8/rYx 8O٧軕K^| g4{6an{3*_q_ ,]LKGX^z&8: %/.P}aC^ n1'fa ~M_S>wy [8 y\V^=D=#-{\2ݦI ɳ灹{R SO)to%)+~m i|<$S%ph9=o~(=C> ~$sn9?Μt ?i|QM-ȉ<ǯQ pzSl z4GJ#ϐQ aL}y/@nnqkO_ pVK3'k΀+W)sʜ?N _D/2'VCܛVD d t{! M_ p]bz$+܏_Tm;{sn3rM܍#cΚH9A(8s|53|6̞bKs﫢Ӧx8iS@g`?Uo -Fz&Inoow~w?h#gS"nU>t9BGه(j ^ |[Oit; z*.16y?e0g]tȗ6羫} 4zM\|_}%/q' Uz8KϲCOE HQk("z0 !$H!fkl>sz9Loے<ŋ9y>'>{${8xP*<zv}<9>P}ezc^|]Bq,yoK_`$bǣuރW z)ͥu}9C9Oy=`5ǃN)w]{"~ o3_X ]y<8ɹS.\B=q|.3ܣ&~hN#=QImGGkYՆɉ#cK͓˹B],S=Vg% G/ߣzA'V^Sc-rl?POQn4~^6yS5ztc{7 .tUW Nw9׼K[UOrhW&-sl9$GxnCS')&|Gk ݋ sa$ 4}}{\xHOWU,_#ߑFG?kC8ȵTt!y|2oOt2?ӛIrMSa,z41򬔏@rH3*\ >9o2EOF5ҏk.I_=̑@遨sn&ᣍ/POEw"oWٗOQ7? ;Հt%7H㻒>gsbNN*?7GxYj{?͝V ޳3~?9VKmM5xjk}_$%Vn4z|FN9`]_U5 s(wPJX xIoT^)—h15e/EiImGg7;z> <9>v.£;>d-C?͞U:C|6K>AQ_euz.^ē'uv?OSϲgjA>VGg綈/r^~M9td-rYԿ| }[~߷?`-ٿ$W`B+SGM}?d| _NJss=%߁s\8 gNdF9wgS=<+sa%7M3sYc^D֘'%?y|Ur8d~Yg߫WRRvs|L郣 ˿l9ѧ[fqp|w=>AU<fpN4}8ͣSsƋ ѝ{"> )G }Շ7_5U}w]]\yEn'_hVB}ǧ۸s8zfK,G_$<_<?]rt~bq奿v;~;;H~N'!w[Bor[}{4]<p/Kck #W{|\/?˿7׀K93ix8fOT^C+g?pWoMqLc>nuR"x~|* pY13?N8 K/JoEs~Ms/o؀|ʕ/F04x A rm|SG/+ιt U|q t>OsI^S+»^h=f~5 hUg ^GCvؗ].O'ǮJWQ~C'*9|ʥo[O7|6}}~n+4}§{¾Z c}|d93'ا?S ,Nbr:]gޮnOEA,tYp1>矒_R)xz 8eM_ O:9utꝭ߁B~8u|);6(T=&UN=ù#*?!m%rIz"zԟ8&,z >5WsVi'3ϟ&^.Ž?>cc]-\ZÞRx "zo2Ϣ~O '.>X-ap$pH۷l~2r"k"+$y 9ݵ@/щ*O|QI>W^7bn O>-t08:_G@"`{]d\x s'uF+ߊ0~rz6AWOp'=Kƀ3 ΍z(k4i$N{g7jS={Ü z,Nn~|8*鱎(_^!üuk?Y*|>|rs'P|7s044w˿f~M|W~l<-<~%oeK}ρO ~<"oCNdV A}JݱT㷳ew] s'.rCznE/Bޱe1sl;7rTCߛc~tC|#s!Ew݀ӷc~PyI\ges빛/C~誚h _RB7|oឍ`G˦'ϒgUFW1O=)W=I|+]7>?\ߋ.<^eOķ ns?x -7/hW}Nze~1<6ߛ r091p5pa|yz䗖mos ^;k+bK7yryXKKF˧љIZwGoڥHe.rLs͟9Hh{}|4υ蟕䓠+):|lVtVOz5r>/\ϧp"x6krmϹOϝ9ވ|N;s-ty${Y^:=<džI9qvoc <l{ż2=/0)Ę;O_pE 5 _#ǂy4g{{μɃ2^l{~DrЁ)/kmz<|!ڥPzbi|{(8P78*K]|>ywg_Uϸ)}9;ޣԇꡞ_4<>e?׫N1)@~H|FЋsֆ?-˷o  G?OF~^@gO1E. Jip<|)tX$B޺Up(EmExk_7T.{b^9Msc:-Ao_?$ O[94WGΣ>[=SdW/Z<ȡgÏQ> ~Ņ >/7|&?G}l;{9OzD>j}^ț;K.5)>O'_ymwrK=BT\d+߼Mn y ׉\^3yg7 4{m#~@upq_kX%#>3lZ=8$˕̧;kτ%z3c{l=o|!'//y',Vg/<*\]FOocMљFv[EQ'E=(:UCrymٳQ|?Kdyx?I_2?Bg?O.*G(|;xz r}?x]r}yϖ@ja;?lm񑏀*wHs|= w_nJ}M -F^_௾}%'9> ^C[E=Y7?/MNfzz-o¿S|Zk>OnԗŜ^#w9sNOP8㽶?J>._VΫ^C]^P,pnmGUo0?,Jn%>aK8gc.kcG)6 ߢJNSΐ7;G6w/9:G=\¿'mԭ=Hk=)RmD=)L{)w`ݦ0L3#&~=k~s\s5O.]Jr4 ~zb#6>qV9&k$77}sЙ<oyq2Anp2xutrށ@q}5ŷ^z _?Ǽu?9O>W*>'wÖa?RѶKȿU[]:zmܧ=f7tim S֟?dQxEk{o;ɓ%<9埦ܔ"私N,.~rjW˒`MKգС̡i׋=rdmwyVEOMVI|"o0|d e|=oQ5xkrDB3n>9k`.l)sӑw odY ?,'[Ƕ}e9tLVkţϕ=!.}>ɻ^ut]yjgU\^{[}x[LH?_>Ij{gJcS}(+'{U)V-zy9˽yoG o5ĞpC. =6t@ 1iT~Ћ!a[;3=Б_8v^s̡MC:Ne(J l ~4v?5V s˅;nOCQzytٛy!oF']Etd r TI>\<8&xo+E⋼ϑU)><>qS gɻrn7MtN1?{}ssS赊"V*]+sRqpt=V>~~#_ePx>h|o~߯ ۝]Y%゚9D=!K-PfWL)?:r뙃R:CUt~Ut f!-aϼO.:?o7ջj:CωzD.aO1  t18\Ծx|<ɿ%/xO*wP0r9% G~s]+ / 3+^E%:y{j3΂NDcwEnVp";Wn|MՠO5oAp:{|/Hq5r}|8*}b97VE_?H4*rc_cOh9HУEr- _^S/XC8}<~,O?yc: ?>0~dž~WAKZGg\>n9~WyyiS;t﯁_ɍ'g$Q .LY|~~:ɞg^r~OCB0I9CybµHӼUr>7 \`~*X xz_e?:|ZKb/aO=~;{nk)]yVǦSR.@JjQm=IϘ@sI=eW>;/~s푂uyͥ#ϰ[b|sqƿįl9`'WVxxSMU]:*J.7PUr7`?3Dn=JׇNFfPTSԋ5Gl px?|zeOot=C>$} Ԋy'[PrrgrN;<ڛaU0s\=h0}N>3i#Zz M+O["=>Nc=JWઞ^'! Qf~>ῶ՛Q+'OLfz?wG m:|~O~>٭<׺='gvX}8_d+,}66xE1r@c{~ȝ=5[_W=Xێ3=s ߟY!?؁Z=Qm˯=ãP}D3pgIK<~ho'Jhp "`>[6=(jފ@/U/|g(@9%7=y%L1˰ه{eЛ=<+_?}n۴5wWR}v._kX}nwO<%t'ftfQ}'l~]{z3|P{ms>ܬȾp={~{]ρOȥ '߄ߝhEkߛ}缝?z%e;5ΆP>K~kg^/\ Vf.n_P6c_GiE2ge)k+֕mg;39LNfm[g t/O>But!įlE;~E/ȓs7[ERe^+Kϗ9G1Y,o9s1KѶSl~\=U :@w<_[Q8yW)_>S^'=vQxz&dU: %| =}ex6|h7g=A7pn O{v z{U2ΰotE|܏[7&z l>qzʷK_e?E^ WYq?UY?sr${8gD8{ Ckypֽ<1>ϓ.@ *^^j\s1|x[jJ|"7qhC.oc]_B}t)J60  bw1g-m\Ώa^<˽{5Cu~}O'7s)/^zao Nm M[@F ]=?g?/9)k;<>~Ňx'WG/zѹyq <^F8^|KI__<)=j>c̿zV8_e?e5c+>zt/z}ɧ/iȞ ~u VkxmAUxsGݼq\|cg}^e0&tD&'g% nF/q_Ix#ofS9Nϒ[3o;l ~ȾJjock‡LLkqz}zJάI#s_>5O"zF[rTJ>Tm])kboG0Kcⓔh"{"csuџMt2x|=6/GyOü4p+'W4?!w"@<8y7s>7&|o;1 _0/ayo3Y+\}DUt۹{i[|6npYx#ti+'u~QE{$^>ʜΟyuJ6JH֔Gn1Iѽ?B\o2_2_D9|+^i}y5Gg58Q(ۮugJ.S8ǷJ@曘S̤բ?Կ@l1a*{:4WG2:)b3)M/\~B}xv{Q]}m&~ (~ErH)=_ݥU3rv]w&9z _fo#ʇ|K|q]͞??=Z'21{ɍJ'Z$\n ϱѿeu~~);,A.3ɹ?KvFsHS—cTa5"ŏkC:~>ʷ{a~Qri|T48@7`U߫nj0wegNO y 6FAzFӕB^Yݼ|Փ5nT:ppvj?=s79"dž9=^^* |4?OY zC[F)Qzߊo{7>n?S6r>n >o<$} mt;{8Ʌw<Ȝ)i̼{(9wkB|G|S' $3lBW:\u.^V'>̹ԏN:za0ߪ /i|m)A8-{\3Ҏǽ3,|*Vw}.*)ҋJ8'e/cJn c~ Sn|?c|{0M >C32IcKq} g W?|MI=9ޱ~f=\)K.a7_|X2_ޚl+J9薣Pl1<c/|!a;}}j;s{T8=sz<|?lV_q({9^4>(?3ﶈ0!GgɫěR ~:8zo$Ms,A>:$qH}F/p*z@gojU}#5Wg䋍_gyѻ"GnWtU.Dך{?J>6v_D'yt#y"/9{x\3X!9Ξ^wf o󶅾Te K}ң,{o#>N/t>&^&}6\D9 2kn~ĸ" ze_lEoR>:U¾r_<;K7o?_Е;N0s5{<#%p 4K:?zE~~}n\7xM"3ERü}n,xsϧo{G8ׄ[}yzQꘅc8^.?Q6r&%й+Ω#kQAy'p\G^~?Ez`ݙ'7ΜQk3ʛ\p UMOq^-Tfϝ0= Ykzo])ҳ^nܦYxk9wU?!tPI/ G{(?zϢr#5oF߮w!w{Shy2Is:9*-5A?u?8O9b/{q'}_sܔDcl8O~iT!'"4{ԧ-R%_@!Q$yYY~'x>s3>cU:'۔okg\E>*F_3/V}m/)*Gh:2})E/|'n$xft彦g5ɛ]}Bרp(&hBPL/9)߾Ov[9ѝ'WN6lInD|[=/c~)|?g/_=셼 g Jv/7g՟+? ̄ב3C|L^h Vx"Jpq+D'ҙ := |*y ?yWocѷ G|}x= oW->Ls^C/&Qܦc0?gCXns|P9\}>zm^ \?3K"{VorX7^;{^{4˔[\! 4spJiW$KG74_īҵp_V8x\C'x.'lW3qş{_0f'UΑ3>y{W/&'q=.猪%Ȧ=Ņ7.yx|WCR?&o.︂ 'ٿVf=" yI~GG:zgqe&K4+igO9Ic$oyt]G;t%{>Nsaq|GR3G͓̀ l!['b+ϰGh'mD|9'o;{3~עӖ&g+[ˢOlr/1CiSytF!fЯ3R?)4cB|'Mb?=X7? |z W/F>_?ss_9&y5s>.?q N~ :G¿*֍Wc̓ 82ܫ/W {/:7Mq8ie%ػkEo+;]'R{a8W[Kϑgb 9)0*x,KD?(9­UCA7|&?`+仉or=}01oJ;бX(r8>>j㧝W0<Ce`A$z& .g0/|qMI?Gޥo׿a﫷upxBNBty!_=s4.sh w\(8z__<;7|2 :I4^<3oa;ɟ#G|Fٓb Dr{[̑1w ?GȣOO M&Kb1p ~Qk, [9ymWΙCq;GUlU'Vk]O~#>^|IV~M5T8_RQltas‹ũG^^O2W?_.IG]:;~[!QA/)o^pq-qt>?cqVAO~+ wճ<C ߨ{)j|28r+({ ,_. _?k q yY:sJ7vWܯw@/zGAQ_<# Ϣ9s )Oת9tw+yoW}i| 3+|w(߻ncN/R s~da=h^z)%Gw|AڻЕDdkչQ@_S̭OUЍ3tCYP}]Os ,=Q@}|E> xOk^|394 KJw0e2{]usA9Og딟BOxwrF9?UzdA:G~yn9N?f.弒%NN s\Es0 ͯ|<=k-pan%wo-ooWO(s"~xϥmǷ<½'Sy uǷϡ ~GS%*D38q3|6DnЃi3#QqG}9F_f}u4ރY/8~q.˙SJd{?Uӛ')xE,н8wzȹHn`Q~Zo1'eOWN·WSߘWs8 ^ >W1?MzcAJWvrǘGHD 9> NO,z͜LqgS>Xs.p 4erٙc (e۰yt [ʿ~2C܃&F؉opxe]zŏc>l/l>EZJyUupqS3Vl^61s =f|nkdGG־ -s,>rAq;ASo>Pf"ߖ'Z}\栍_ȁۗJOム!b.I.ϣ; :sZ^[Bm tCDckQ|,&-~,Az׸F9H(R¿}7 .<9x&ߣ)||osq-˜#_h'z᱇x_ɛůR>o}߅^F| "zrxS=[yAx%>u+Г'g^q-P7yڶ0/}<^&768o jԳ.=h}{E9ȃA}g^ ,ƅZþ77|5OH};{BujAy5Ws t%1ϸz"藶GEί}cv<QK/Iaxq`$3\O_| tuFY^D%g-'ȫ4wKsn0C1e9g_.N~(ʤO!gF=_a>r*}UyKC WaWRµ_trCP=W' { @8}f~_u}z5*FXux&| p\]?=6|S}?W?r?|+M/Ȧ礹ȂW(_)p-UUPHAuLKn깧/GG+?Iz94昿Ec)My{= .:&8YCydC̝>;ҷwym&`t^YGx/+ɕEe*\ɟF~=JOYmx<׭Jo #t6!ys՛ 9/+*`T\cw+F?Ϣs16iSeI^+/2V.:I'9+Mt)?ɇզУ~A 7p] o̞BOzmIglB K\hN<(7(v]o/ 2 n`GJ,|sd6a !]ypsx쏻J^Ff }N}~os^د*ub 9ʣ9g.. sߟ@=|Muu 떘S_U_y^#'>|&+Iԋ t󷕷{Uy@rkO?yMbu޻it!: 0s7೺|U8?Vo.5t]y1mW ~w9 -pTxX&_l!# c M/iI\/9GBS~?t!^%)/Goȵh= |'3ߧ72I'p=)2qܻf2W 89ch+Y\J: {K;K|뼿_!In>6SN( ϵt~zsI<=<90DQ an{}>4??l;DV}Q$n-:յG_WDtʚrХOa-tMteޗvg|i 1etc>O:y, s5+X@ssܓWmUk|/ǹ'O'[=DrW$r q]G.%yzxߟx1䟋=/ '?aBS?oYO_=pJø^ݤ?ߒ#a =]{s |uUMW8`Lf̼#=E;+x9~ޖg/{;=^4{y,Ӟ?a#/qޡ(4J/ygիv^t~^%/A"W|JRA'g*gK>_yyO2uzIM>68~d}dѭs8[Im̕]|>8} WW-aC8.鶕}YyS!g>:]'n{,)zz䜻sΡ7i|$usK߽}Y%az %qΛ8D.YW*.bt}CoVwG M?Oy)~g ק 4#)Dp9kTm!nK߫. ~a~a3q9e_λgoߙ!gs ~w1X~8f%x$K}[:Ɯ4NnZQ.sOÕ҅/[/XB7\ſZe9<_fUm3R.dO\=>f;ocns6:r-/|% cHC=Ⱦ1G_JE:'^EN)k' (o<̃|ɀ7#f3崘[+_=n/\F^ΡSL''X/d9(EO a |5pqP=Nx/-wcM+U{2gzlBťSj ߁>\8=y̢|g!7]y^z1f$љ1wwb/4+Go#诜< ]߆Ž߳M+=GOdzKF?EOc.|{e}:2}~~V<AG5j򆯼o׷3QcLs}fM^p 饷}qy{#Oj- e~?ʣ,<`gpۘz]W舔:QEyM]=t֥;Sk1nkwLJ~`ޒS)·9= +߄~gi%,K\[ΦJotQOpnȱSnp<|@W>L@ע*}ޫzKfpϒf=D6u}Xy޺e9]O>c W5G)χ۰sr %Me!>rs*x $hTsIg~Ѽ8}]soEA qo\W-~rq.p-|zivzeos-s_bsS9|)"pnO`8ϟ͖ʹ罥W:ه8zk+蠇.R=A<_TWk2V5.k er-/^Yz40K)b|!t{f</9X}Īji:k#Eߙ`?Aet exǃ9k~9d$x?Aޱ|^2'UfѭБᏅ텯}I{S?أ;ʽ0U}|K}#9Uzz[U-A>zd}?ӗa{$yn,t \gO|t=/ʍo8HO _ƾH.#уaU8}]9}.+oϡ;,5c'[-\XN'Kɟz(JFy_o;A>errXD9uY)|kEk[$E9>9\ñM~!?e}M~Ǭ+BgGAc'ia~RLo,s{Nn^z -?.-r|r_s(;}XUo>&9w,KaQNtU I|c<։>ޛ|~mΡ,ft֟/_oS|{YYc/OBh仟|Ie;?yG~3k̩fWΨ rF_]EqK)N5X| STa3_?˞57n~'ZCgO)/:gl)GXz8/h{1Oz &=s|Y{2?n'Άvϩ ;~ԫ3Y}t7CǠ߯m r?~"ᇰhXF>uy;|ǼyOѡO'9xbkGzѓ~Nگ) Y~7G/zwG[_|Rr ?}\Q8s5~jߋQ}Y|}ýqs(9Q9t}y<в#n|빯^շ-C١+WFzco|S7CJM{/+ի'Kw_@j;lo;C/ Q9lBy9dy|O /yyPsWﳟ{-t<,88[` G)O6_Ov}VQ|:i΃>#-9ܧГk/"~ʞecA ?'9utb'~ -0篃SW;V >USP<}wzIzPEϻ1stw'\Y7 \ގK7=:;'V.ϓgR#, rG< xo/cl9BjG?{ 1GOgSrz9GWȣ`NVޞ{* ㍂gbno> qsM{*s]\z_} ^P=}B4-WYόF*Sy>S7J*TK9y>z^x(;+3;2|WfTBg]Z܃Sml_gڜC|H~+y^{4|ysBVVxOYV]:GU^z\]"c+,gyj;ΒKϢckGyPaUon`.z2;suUT@>Vlȉ Dʣ+"қtvf=ٜ^fJf&kz6wy7gGd澯_MCaIuWr{fy{ۄn .o ܖ9Gx'DW N#e/'Hz).×fy|#H?%0 ~V`ޘM2.#AY$Ƿ _y/KS> zy %+u3WpMp{L~ Z]_t3bNSk Oڧ;OOƘMg(/=c/&!O>> Yd=6q" cD'3B!̗t\{e s=ezh$~ny7A߆[slOOȕ-#N_r|9?b_+ecMÛxɽe35 _ b{ =-b{Ξ[F,w>1rY>%SGq3NրudFr-$MOBJs ȑ?b ?NJQt&9!pm3ku]?S&z/ƽwFP0quX5Fh7I`ϛY9=*apWsZGc^Ьz^18y$O5 2 ? .F8,{,>4[ _`~B/ P[{{Sx,4uB})w]sɿ4CKۿu3x=̻ܻ3+p<F'_S;?Wj-&gGAx%/fܟsenm{V WO49퓼?üg"nY="G`S]wе]i98N<5pEA=^@w8˩19hx.roCw_q.G5 e%|;y 2[?~ 8^g[c=LesW?5 zGOZ\߇\m1ޕ:C|)n+81kϧ꿷'MF?? ^-YWr;Vu%xUo{87w": 3}}IKʿ[CnƷl;s_aij[~V-<ɕ7'!Ksy==Quw4?s0%zcH/-s1i*E'U|+w6ߐ[.W=1ǼȞ5z]A1dG]<ߥ {}^UW9q2|U/M-<j}υN_2ŗ%H]n6roaToF/~Fp'oyacs(yi >AYt2JvyBOۍ|NVхdУNW'B1t7t0O{#_^Ї^նs#pHu^Q k>6|%~-H53rq|ItIECTrCI䖘nm{o𓱷/B9ýjz^y sGo| t2 r5Ğ1ze8e QycvzZC Sțaӵ?e~>.y*PC-6.~&|UtJf֗EOc\W߰~h?:zp^h#9o9v^tH3;b|4*5 >r9VSp1WsK#6>tp!s~]fn2vx-x -1|t|{1Zw{ܡ,{X1rpq^ J ~-\> ns󺙞 ԋ;Qz];9# qY~Fνڅ؇zCK$@ևX+>r}obo~=x"^c{9,E6vOٹ:y|d?uOG7\bc%BB8:CtMSsW> ]4CXlܷp?aGWWw8p dיgޯIny4 svt՞Vsϲۄ^ܥ01[ꔇ'Ǿg}mnLRnz$Z:vm|~#J$zx υyLgp֜ekG{KKЗ{ryO ~z 1]y7G<~߹~VTq:,Ds|&=:Dlfq{[9-jÿzyW"E-K&>ɴ_Eg5Ǽw2W3wL|rc!X>u :Cw_&p߲Ǩ>V;07O𳧮BM/f|Kv{߄'/#;%foc{S;xMSBR3~@gO#B<ǜﱜ.k[|f׿=]d< pk9sD[zMo~9WH 7$~tsN,?StYzC^x9,DⅯ0'iW2v?ӌ_6l|mA'a|~>W륭~e7%}R^9:o,Wƃ٪Uf8YNd,Y3N7X`]maC,gEoW܈s;MZ.KEG瞕! IVxeE</e}'NXFțs&|J^?ˁk$g|)vl_I+%^tKk8B+m 'jϐ놋[άŃ/{n^b $sۣM/wK{?|~LЫAr9M8kpߎj^w+cܗ~^͡7_>}[4^ǽb/wzuÜK:C}wyZ{:w}ȍ0Us.d%9OMz\>s;_IG;p߃I/xe3w+^wZ֞v垟\ci({O׽^=$juҿڇvKЛ?׾=EYzK Zn;|Wŏ_UW1؏ļp}{zoOvs4V^Y>⇯}B΅r߭=[^g|?A3?vwУg9oR9Cy;=|w:4/pΓ'4:[;.L9^,[OM~="?Kh$rC^n}e[Ror^’% 26z?;o/Zu|?Lԩ#ۯhPȽ4xܱ7;dm9]zOi6؏r`LzZ"K}5У>?vs ["O^/\sw(!tg;w˩ӿ <'61o}$P9?(7/y:ȭ ;%4 ͞[ozj^<מ"-o鳻gV7}OmÇ׎omO$A_a禕.7#^{ֺ rd2۷8>8z yWix$ϥᱭߊK8礛߇r̟<5[.Mj+5ëO59>x}{!#yO =b9Gx2 m.y>je!_=1 9~A|P7-F'Jֆ?KT=LeL%z=ZsKI-aat>CوSrlEgf1- w1UCYnI|kd?Gb8 9MI=)!h!2pQ7=P@H࿻?ws?M["|r, 0Su7\>w(Z sׇ鉚W7 >Y&}eLkC$y^sOu'9K|6IA4;l? H%_*qM.g{gu\ϩ/oy+k8n 71\*SIww@k6A՞.r6r3t|O/h tʽŇ^_\8(:&MO“^kA V{QN-p);S Qf'gkeI/"B 4~h} ay;Aαx5-9OK÷o9|$|{u_ͱCXCh"+xgR͇Z>4y9/kޙsy>iK7}ܸ_k[.#Aic胢{h+zmY&|Yakɝ?ګy@?y*'uQpX|H|9@"\8D́C֧s|~\EoZY߰ޑOR/#Et=bEMХYF'gO$b \pd_vޏ&tiZrHrws?0y_x\<^rI=l%U$aZftks^Ο?S#'a|`wo^-! |ܑOi^صևYx?74h{:| i[e:%=|%ۿ76E?/or '^k?x=д=gE|fwZ'b7];E9ser꬏>5@/=e|g+ys甏ܒ%J6vo[E=~-|yo3!G1\=Wԥu3-?juKFz58 eI>NpVӜwWb?gm&g?m[C`h0}a̗צyx9s\rgV`~O9j@Bbx911{43Wٳl^^/ ħ`} ڼ_oBT`5~!9?^˹Ibe[Ö+??|wZΗrOn4^kU{}k~Pç;UK Y?Zazvj9y\ui+%7sKNegω?=C[c7܅8(xjϲ ^y|_vnDGe#Ֆ{|28Mߢo"Lz {̅1]%BW=- }[ѩVbG H¼Q;'4oyLXI?**Ϣ32}=y2^=ΟT\'@79 ~;o$ƾ76~tZ虵=V>k5ǡ6f~tyScp Q-Ou0lAZ8|&rScIzt?܆:<ދ$Od}jH ّef,.=fG7CFW|{9CgO>(U¯r_,>C Q4|k?y$z&#⓸ܥykSfۭ\k;Qb*w/0>zoط ܿQS!̷>x\:l܂Q03_BNt/ܙ\ h9^9c环A!هac÷ruDWr~")t]aΓ9{vU9srz ϼjpbףI>?z{"> ^];Wgh NO-,h@7dOt/}g >(KR|eiw=_a}2պ:4<.!16~?xf @|/ h6Isd>vȰ<{xo7d*הǧ/A_%;/x}x'r-J!w7pt|u{v$'#z(zl)>q{#.S;+R)K%r'E`|Z8k26e>J7M^%l/I>@ \?~nm؁w4-eicٯEO )vPVH#ӤS{oLcM%v >rx;} ̯KL~vds`8w:?Qs39=CMM;翯z9F2}'nSY_kzuɡO㇪/_6x_2pУv9o{xYd &CYѧpb5y?`>2D2?\xx; R|C5.rTptǦ&qsö2?~ g-y>ވOketE?Ns|e^)qz zIu>z>isr$}$|(8y5  /s*)ʠ7 bcq{/qczy=v֨3cIx!pݵ,ぬH1۳kL?X~(rߘ2dr5$z_yU{~v|7s~O~usf+~|!1z[wkz>~ <_ C) qu MǁFM׫m ODnyd+/]֣'^%e;wj5A>zzL<{\عgQ`N'H1a_"}{?20KY+Gze> 㳏N琵^H=ts-}z< ^ӽ)]yB6_597Tu< 4x5x{^7—2ߒ۫q<~*u烤,c_sğ<ۚsN㿇9 =o9>[4w~g{)\V.4hS:ļlh{]^w pqu7:>N>ݮ[N](x֎:U/%xtx)៷mN s4ڲղýcڌ?c)՞k\$+ <89M{xKദh9pgb^ji[D\\Wս:|osP']{[]vx˄t糼c 4ý o$QӋg!_׽(t2>g(ɣ5M}R7܎n%ϴm8ys5ЪQ_.9o/TYb__ 5rL%!_IDC } NbѧWI;ao~P[I=}4e}pg-\I~~_*[>V~Z.0q|>&ϭ5wM\0xi׽wxC'P',tO-v,G&ޟD_YkoOK:/wϏ0LO,x{5oYn_ÅϖA<<nҿr9EZ9${X>ɶ]Gz"V|K5ǐǶv.7UUdnz㧼EύQKYIU5?yLI?r4/y7Kb5/lZ?|O|)_Ud0~rA_& =kP4#sR tS|Z` ˸9q'+w^g(Z?>-WJ%oVZ W~%c9>~'x5A> ^t1(5g)9i7%YΩJZ᫏I|ᢒgO;~:N7FoMxUf#\/|)s.'[JETzOU/׼r9y 4899~3֫=G9NxO)o?Krh#LI(>}ƹ&߭WO1 9|8?aZ/K+2|8: zῴj5*2̹0Ogt9^<ڪ}y_9Gs6ɹa!r]Gy i&:^tT?-wS'xϯdxqy\ORUc~=:x!_ړgfpOr/l ?CaId7?[c92>E׿@MWϐ =2_}Kt.}-: `l _rt70- 9/[=L'(ˡ4Mo 99(/t/\rߡ p:_~.%|B- 9!DRspd5ܓ{13/9"6|1|Es.'X薧EGݼ#QxInO%tt}ۯ|8kE\S5Ǣ\h~Hr%C~jR5~Zp=%y_͟قi/ OZBXcd?G];e_| :w> s>F>)p!sW7Ϻۚᕺ/I@/~@1>Ht3#G.rFЗLrOLqoY~Mh e_Ǚ%̏.iܯB+x﵀`?v>j8F7k6zo8 4|2|Wsh 1"99McN1^mgˤK=1|Py>skg=B>;0[pYߘǭgTfgci5JR1O#af齳~qt-^xx$6/*~vZ{n_b} .Ix.Lm_^?q,H.`OXI{{1>{)7pw0ɸ_ͧy?UG<~;w7U(xyyBߢ^ Ѓc=1A壎2OQ_܇߈^j12Nsৱ遏2;޹ixD;B|fI+,QBP'mJ5{VeYao #O|Yyrɯ@^.:<4X)->I-=DaJϸdE{,ga_Sw^hj߿/m6㫯!o$KNT?:5F| ~l#?.#3opQ|CW$xR?yWVs~g\x|sp.IՖ3X`?o%7^8r$n/ 0/<JJ̰oX^O\s{k?N~rx?pJ}?.A#y/ĘK1xd+oR?9HSߏ~~,y(#YqR+)ۧFV&?y"(:rKӆ{~lfɻ${Jk-g&gl9`nSQ)BqkH9>Iv 9|p1cKFkko Cdi -JAocUg, z,8B.<@ zaG'+)i}5oG+Es5=϶Iz +YIէra j1~'zPׯ9Wz͂NZ0z$8k]t8L#i9ޮ/'4w|xqy*NW#tN)29nmM9Hnh':}'l!G^Km "G+fûeщ~EIz* qOw]=It֗Dn,''O)kCl?o|=#1e2kTx̵2WMX_.t491Wupxc8.L\=~EW>SוsR|#.g߃I.Q䆅3=@ʹ<~e:Ezun}̫u7KgW07sn#G^G!|7K,s.1uza?[ dnDp] Xpy2I\b*6/Wՙ^0>:Al jL.\ϩY@c>3~/~-W s<>OB.h>cbN3ߚ/zxV bk-ˍ9¯oJ//\ U5 _: :뇧TOWMv`1Pe\wfI8wgt?:;jZȤ3$ oxgޚGWC>f=/k?z%݅Dmȝ!x>*kOb9az2[Dh{#Ox#9aKëeo4o!g-Wɋz}€is5 0z\mE5 ^>5r^E~sEd1-E酫,%? Y_>7|8i67Zx:zj=d:/t]1$2dPax KnuxEוl?B/bVړެM;߳JǗ{e9\.hӺd~Ou9X<C^ 8\$N >[酏mygK!?}V>- m^Vf9"Vwq%pz)o>'Hm=?'7raj31鲗0ѯlsoXsW|wfW/"?."{籅s\\g,9Nr0Wt:S݄b?-/7UJ-~o=ů9>Iyl7#o&7 m?&W|x#?TMǐ4c~q9 9w0"`Wgx |I,{ɱkgH_ֶszYTUbz_ #?_g$y'@wR\~O_-}蕷 Ͼ#/l}%9=9oʼnESo&^q6![W~g?=oTyoGB$5t;mSz"asJ jq׳ ژjv·7_iz3M?n}|Vsj;792:t:j={0:I4O׷Oy}UuwT4 =  '/9y׎OqmVxft);Jfܓ><< iy{C'9&E-ҳ{|p%x{B\a'8*l9, 7[.C3x}8;ыLy_az(K˧_DڸW46o'Dw"|qtxX){ .wxG3#z1}fmFٻg%^$n~.򝖛^޾76}|f ]L>8~7)Ov/-:gO^!> x%Nt<6֢Qu 2WL'[9sptAGp?[r{_8I@>пnC_?Aw{)\Y÷o?e|bvϽ^ K i=9*چ1MK=^9w評 >zQ2̝CJp?Wnb~FׇYwx~ɠcE7 jJ_fgݕ8#3^X_({`stbr)xߞk_BߑB?ɁO;A?s*fя7[-Xꭿ i{^^mu:̾Ni{l>3NB-#g2n sw0wTૻj$|e}1w$hƇ+{Ӌ(9.ty,NQ晪~t}9r6~q֭w>%}{tδf\co7pH5 y{Qs*-:C - ^yT\@c8*F|g}ೡ9Sew9~Hx3%za07W'+j:,:4 r,8_Mo`y.pWϒa=Mrr3ALw/MI~M^9;\o:Nf }'a=}%~/:l!Zz H_=C,#;Ǫ~ (tN&LO+y!vn˞eN~^VrdyR[U]l|:~I2~/C.Apy\9x>x429HfO یFOa1YPËd؏6-DוLЃ[^8=Ko$}k3ȜkΥ8U9m!/3^#yaѽɅitb+Vo3}۲~>pSBXxVenpk.U{s}!R!/$t=]/)ĤBγ&|x2ts`:z)#g@es}m3>o.!`ޖ:r WZ|GP/a p;=7,*8FbZٟ:9W4=޵p>^IbtpOn;`Nu~=9x6f%AUs_Dw:n'>,!( 7yفŤ㕪Y< Mu3q4n={3 ~5M010=2ˉ.Y`.1b+Yp/%O?<+^q8̢C歡G(7^q}:_7?뫏8b#ƣn0=q? 1F|;y7 OG7F>FȓE7jz{ &ϓ˺\̪ Xbn6cA/;Dמ`|AnFv{=_vk^ g}dXJq73'a;/~ɻ|E60_:M`;d>hybO-w.}Bt?i|,y'klz$~bb$zCGQf1mϥG*[Ewi:8d~ ?l:{yZw5όLw܇~,1vvveǑ\61?܈Ŕ|^xsadߝ'el^o'4NgSM S͗8aDN52O~XW/u8ov+53w\@vƌcr{2G~k;7oi#[zM"|Pi~qd%{E <8Oz..X֐ӝH{ӗ.>'mX.{\=[_Vq~MDj,ͯ~:}4yWU spW< ߠ#' lBb΋rϿ=𺷊oNtVM=]Xѣy{[0?/^<.1n-Ow3(8ovxyYNӚ[vG NӮ~ /anVfN4#;mB|VVRosɚԇe7E(NssTH;96Sw+1=@>7x'-t>t 8V/Wgˑ)eӔii-#w;^!߫94zu-;m&6Osxq92N7 9L҄o-J&vsgӓ {oY G .rc}  m5B2.mB`=F=Lv:n=wwVywnemƿB>Ɉˇa"Wihy͛ _Os1پNN`+㬣` X93Z7Ќ:_lQt |70n7g]W"W޷vmቮ}?w^vūN9C~+>|xqt:??:}hv2CЁI!GnYYg\:\`nzyGg~r]FNIV5ncB!C7Cy}sq9:|(Xԓ>c6~XFSlg_fWVB%d?'kokSÝi:~ ?6GRts]-O-^8fGިs7Hf\5G gáE7?(߳A :J|xɅ50e;| WY:񟐟-yf$>^'&|.r)}j>&vgЩ|gh'H71Ks|ȕKW@Nt$~|Nk)OMɕV_F[y%GgFSn5=5篘+.k=Cߢ7~ܡ*z}Mw !Nϣ&g;Σ`ΐ%$ :9qe R>SOL,=AN+[_7"2[ʠ'>O~s q2!A8ϓ/E{Q}>j |{'rCMBp^C_(E 9E!wALw `; b_H2?e'9:O^ey\sZo_+sz'=`y1Q ħ\@gfުf^ro0GEc[yv oَ=~%LN/8|ܟat#1&x"|%"_;O_iA'U/~/`=+,p>\6/9]4?0b΢WYU^m$'3j>B_9ėC>zm? 9׬wf)w3T] y\2@i),^wɱpIi9pg u@!~|Ws,}0': ,=LG+ǿዷ 99@կЅ0^/yg2<\@Z7_[x]9 1W__%^rCxH08(s_5T ~Ws0 >h^ F-:(z r~^rxt739~3zX@ol!x;)tQ dݶr~<D΀fC!2>vmmj有-7pYtZj}zz~ӊ߱skkVAׇYj/=̽zKw0eSEy|NτɡˮE/W O7݂@休*5]Gf,&|_Ap6I6χ%LyLQ/> YcE[a7>{H(YZ'yb.l!i] Ϝoy_,~"_Y:#ҥ-[+/# pW5)E>8~6vﬠ?!GC זo>+;nDEPbN9;>gi"*W+XrQł 4"E:,[a lM$g{2d&I<}<~^Mf>WUErѬk/Aq{} $~ z̓`cW`}:3n..WZ>VPY `ްx^tK_x ӱf๦!țsn?Ϻ=Dso>;xc{p~pWrԎK⧉1NJγz "p^zs<uAosr:yۂZLC⿵aΙ9F~˹s12>Eoqyd6F.8~Glohlq\F2q./eyr&ЯYc/<,qBCYx,ouz?ws /q3M+SnZWܘ$r>/K\qؽ*yyV>s*=Z]M[<~=9 ntͶ 8L^@ Ϙco<{Ztbn\k_s?gW0Do]ux#?\SnlmA,=:|dWqiׄ: ]ne91}.蹌体d}24n7ntq1=ߣT1'^43rC90n9g5rxeb=0 brMĝsüQ'm{*+ߝI3]b+-=8<yj~hD݂_' f(C[j) s"Υ9)x?>oEN% k$qE{t~W.;eO-4WD_6^sӏ]:jx%}^&u?}?߷wO+K^wj/g"`tm<]9 }gˎoMNL>ޔ28_׸a;:4IBr4 8H5zC K3? |Q+o3$M3qr-2Nx5=941O: ɣ]ۮϱst4ϻ u;:vtvϧrDr~]-ދ fy2n IaG$x_Oߐ1$u606W돢W[-lӋlwi~ZFh_ ֱG?tR |?kp1e<_d#琇9r?όC<>[i+{e/OM_^ŇU76BBu8*8ltsNX/Gy6s6p`}:쟊~Yg/##=oyQҋx=MqzJ5 `}}g"Խ[C'G7l7= ާ`;K[YAT9{{tёu{ygy@q bitA.EP]4Ë͂;pO,_)Mǜ%z.peA$8; X`b61:ㇼ]Wß edW._;rD3<0xJ=1z-]mCo'/k>efHq~x6OM3魦on>G/(qt1 zQutYX5uX!sI7|:s<(i uByy/ԋ&hG^ 8V]3_=^<7sP/0 K> 8q>ZIN7'fm 2ZN~7o>iM?_H^s17X?sU֏YMgB=Gϒb$p ϙ#g8o|'ok1[7s1з;#/j,s8~ ˋ9a\ 9C }{Ȝ'W(ɟo9:/ZCoᾰ\EXW=d;Gx~W>pŝ[&1Ϙ,tt->0F^']y=89/e3ħ#OV|;}6]f=a-iyuh pf~|`ס1O~"<&oėit;/%!t iwځև~9ws.?y;湯'pNLq.귾xrSy|s[#FM&EspEe+zys{ Qp8{xO+_Oux7 =~Mm9ay36ߟvirD 6}\in뷠Зczn쇞[?xNwmrK's:r4.= >*AW4c/Z pt:I';GSuΐ_K?N[NI:M^ӤKM\Wj{O4[J HI9/~#2TN<){_ds:WF}`?U\+{|PvC_R8xe%EݛB>#k&ӱi}μ!9GYS490 NWQb=|Chnȥ4:44`+{}'Nj)Jt[+nxeytA|Ye߯9NL8F;{ًgIrp҃I~uDx?9΁GKς]Sɹ87t/.n;u$du=~DȩA^V<"~'˥gk\x'"y:9u9%+ÜI7Ǘ<.f:GW +0'vŞntKnIpN t]ZQíY^ɋ^tr+Cg0qy=bJ~:{99R$t>wC%Oh6r5?ɓbOvJ4F9e}SGs|!&9oc~rAm|nQp`r@$^C'`<{a P7y^t ߷<ᷲ#?KiIp~'߳^t:3/k'5yփolS l1MG [fе'sk-z$?oZ|kdJ3g-QVzc8gԋ\,܋^AЭK@pQic,aG8po:G9ǭike?9Oswz"1,?i[-1|7๖g!toY˜Lϩ#q${QCO}oK܏%mGVi{yCܛ{țs/t!ޫЎSD+oj|}1 %{$7^OPɷ@,yt^AE<П/{[7^o0-` gVt!nr`D:}n=3I8~=89sd=5c=hNo 1?N}=lb`m{s$?D/N;#_0dѷOK}| 7Kxw%rk5u+O}:e`×ZpVOeI}ސҎ9mEXC=Zw~P݃~m!j,;ryˣTy^8+]aDn>W; OQ->1}#\!rvXo/{Z ~U‡oʃg:ι 9w>|[Z=g.gK<>u&>m4ZOcѸYu/aYt+z-"|R߆6Oc;邇&cc|Ok$o5N4v=mx0>jJ/Z^`$r;x! *HOk|E$>plu[3&|YVr[i g!~|~'{* Kz?߸zW7.(>5G?B%ܾ~zs\ ੓;J,>q-7;_9sHpk3ƾ`9pfgf{8<㢓i|;Yx)J~xuz1$<@C\=#cι,yNiG,"=|S[N0pj6|w<98FW״ 6z44<0/Co<E|zǙ4l >ߌo3=YS#?|9Jo$~G Cw]o ̥,7Ktn9OÏUǸ~etuY>.o$~yKcRfi ~{. 固ɵ) 9z;E5cj&<}אc.񃏙b>>~2I&}솧3%OFG!-F-ր3W6FRKome ̹7;@$| w:\1/OoVz_l^RomE3fcN<-xZ#^t^h=tU|S݌?q~|تko;ҫ>0 Lޓh}k LwOei_KUz3g~y;WIzɁ-A0GY=4xmZ7uS˃8x&Wh9YYx|uk'Wʞ~KCD鉇? =Ι kއf1/3ŜGߑj>KSփd'eWέ6x,~ |ܖh9eț|T҉p|V̧ztoѻq1W[2:AG,E ~|ita.G!.6 TrMӦ_+w^v4C^ހ+ ɱ גS*95|>'uòap|蝵^qp(s֏l9n%gN ;,rwEa8t?xԋgJg <>zJn;IuIc>m?~Cg0Iͯo|_rʼn}.!佱4Ngy|9F[ C':-:Së^Odq^ xro!]gt{_e#$byMC v;y>~<{7@=2{G~6=H[a/B"Aְ,V~w pM2ug O}G6_ct#np : Ma8/ڽօ~q;.:JX <0z0W;%]N^Z2ω'qe'c7a|%z|+jctVmya Av[R~ }.~~͡OFSh{+٬Gu =#߳-/7L97%yyE7:|\ǟ"GZ[t{^ .Yz2:d gqYN)|Dwԁ_U,/qsmKRJD\s[r?~y9y+?yٓK+?OߑsxU}Pp2qz7ZsFH ?qϓMWpˣZw'%Cڷky{gzG.O ?Ǘ\w3x9Ax-;lWD0}.4X&>6`5A Tɱ:Pwk?ۑvrz6h~AzVp[fα8~ݸsU䆴} F67}1s`u;g|I7961ןp+e}5j7랓Ě/CYo$X#\wsi:o(5Nśt_w_:]k7GKù=?(iA^EO~f7_|C7"SGϪ8ݎoN8=2i9+[2?l:Tr z16_xrǴ ܓ{x]?~ڗʩ%YDzRiD^NK5.w$~]cn:t͜p3t:90_e$wtpnr'˜Wtνt/> Gю_(V۵}Pg8m 2̜A8Dދ|3-Eof:q7ȼ)tڏ{EW+K yž#)GT|w>^ӿpNϿAX_l ? jߏÓd#P|cx.3ɧ:p]c,rݓGfNJ>y%uFr9o(AWi?J7hpLr W9%Sd]?o(ϭtyrQJ/άљs$49[+ $䑼ԇ@X:)}ë:HΌL>$iنJeKYƞ+"i|Wy ߓp_-+KS׷:J"91y$?O+Q;-}g]tM#}\|SWqt8#еXM/AUr68zmO*gcEKG%G^&-G?si^t`fϡ/FwZn~i8'U;ѡZX {iγL_#䱴om~nrJ=◐$0Z: 4le= 3V[O?tl-Jݨ8b̻ֆՠǹ0s&FmXWyęct &/s'@mXVV^J(~3?dtY^7'uRm:72]t/#˰w$q DG7'Ooyt^geSv3dxBnuvH7Qm0g@\d 0GW|pJ/s-wi÷2̳g5‡_-n.WϹF޴o=+;W"Fa2TͼmSwY5xO+?||-S-DPͿ݆Cc*s |P/'K5qfc]XE=Eyp&|8Z.*IyCSZ_>%cnjr76Kc9pTgUJ1o92s 룘Fb }Q1qNA"Pvطw<'-hޖ'nyMI<^[}G }IxW~ n2AO4N;fp'ط]4SFO RcapH.k+瞙 o]S(iB?zAttuJ;׶ s5 ܌Z6|4j@7NߗǥgyO:xOyʂZOoeVI뻣't5~rػ[YNwVq^*q~z '5d/{2>z? Ve\`<}_,X|<KD-΂߳= ,W; ˢwrN?w1ntm e5^D|NYAȔ0'k gen 7PܥgFV?N|ޮ _yy7^Lnm'ijG^(n~vl%ϟcO7o!T!yrMI8$45Z-e5_&jcCkyQsA.x(<{LW$NfGGt}9I\y{El#{k|i~zvi]8۾7>?嘫㽊7?_ZdE_Loe}Z2tOT_4I~:oMY!zgt'߮B2w}X^s9qXc|񑫥ujOiz~/ANcx*yw^s9E,IIJ jxj>.ۃ_V@@΢s=LAEOcosg\:cod㻮{K?qxΣjfJu\05]Ym~vRJG9|b}3sy{OGgeftn!1z;SrH%g =@p 'Ƈ{*>Wp'l@w^MLsy^Et3X]//t?~v_~ 4FS\T|yut_s--\6R?9D#^rg;{4}h +ZH5q~x;>T''8H\&& 0?BG'1k3uS<|[?s[rn㞴^4:Mgr#71 }%~D^(k-Hlmf*}3z WntEG2~=x:|~yǿ+ittw#=e:NXrʵ7f9VUF.r"6 S<e>wȕ{۷ yjr՛o7sN:|qo%x^HS2ɒqN$ksM9_} ^h=֯c=N)̧1'=rGo` 9[boZ !pv3+͜ϓRF 4}p ?%ZZyx]_Di} 8<4Q ً/'W[5gS9G_>}fS(~^6gIr^=$OEk{Qoo}2s^| ḿNNM}NK.sa:f-=ui_xz"oy srRlCS{zU4߆~G81>{㟃e|rgSpqx.Е>z,4KNު{|ceΙ%|' ~y9=oԫfAj᫞@ nRlcY^xfc,tϻ+Bȁ⣵&JO{|OΙ>8=82;.\Sfw1k$|_B++>prs?zzv3X^88C=:d}lֳXys+E]N{o%Wxﳞ!xi1,|= r-{wus&%x|MBHn?(FL/i'{"k3~]JEFssëXO.i9Z|N0߯Me}u-jQ44 @ή%̅" 1G+(1DWG]/ßkU}d~a'TÄۮYzY?m(n->OfU;*s<|6>z%Q,W29f}!t_[g+,[Fzd7q.YOkgzFY`7}9o݆S1'Ճosow_Pr!<5g' !tR~Jps\ IcLk"i'npIˇS7}!ٟOr$5G09$+'% ^MsT*]ׂ~w]$8Ng<}췆k5cByS^g搻XG^%c?Q G a$brMɏG\^\Ix2=2G.L vgT7s@|tz8_We%OGBX$z1~{s76Izqx^/S}|q2,{tR+~֖? շs_ۚ3cr"{=zK>vR[x >I2 Mr.sQukxxՏ>悆}柾P?+e'k7|6A?HnדM#;!Mmnx(լs~J5>P$o^k)+^-~jWvëk}#(Bǟ y"v>0g+q:A0H8q ~"qFȗ}+iY'%ݷN-Gi߀3'_ZTOmp)Ez-ؗW/DcHeșOM^iKˏK{C{Mg{ϾB7-E6デ?gs-Wb+c^)ŷ$E.O}G͹D}eOGGB߬sd #9ϝD<5f9M?Maw+3텷$ ^z|/}rF_Ғ͇_T?z>9Z;"YiɥV>qt3sff럻D_kcGU+X?iFLVn~$Q更Or7cϷ;z@eOy=%M[-(:)O|k}s]ȟ xn.zjޓ"y,k6Syӝk|}\u,\Vw:4a/TJ|̱nzRQ^rDRQ{{k}̙/_9/rcj^^F'pkB=0x-g)|:ʞI4)Ottrڞ={e*jO+,y3'B9Z9O[߱s~k9· 9"Erqb~)EyJҷz7Oa/M\;8lggb$ |6\hzEKFyj~|O3IqP3}_'~tޖ絜ez*oWx$})pΏ;W]3:X3O/ '8wVc]X^Fღ)ʃ _?axPN-Mvz=l4b/kI,~OINƒCOsty9Wy#C.BYtw|,@o4XK9cOo4S_s8 g]y'9gk/~?3H%Ch9qmm/!G*@v\[?be5G4Jnu<~ Ok=ۭ~XnOu-཮!׎XfK;p9Fs]Ue񼍠ô<r}Ǡ?:%t}$˾#}h3{gnCG_'F עT䥴Msn,7#L;E* u%o4 oVhP ~r1NNVf~;Nq n}(. @N8MoMr_?8ϻF ڽnNzM7o']MQާ_p,x*zEz$dU?9QrNZq<%-=^ۻo<12ř$bۏ[?J\pe ^ ` r+|q|26x=c<ɇ?0](As-`?,DF;.ZNiuza:@nS+S=~۔cF 8^ y]Dwc9:>r:q|P\/Nmc/F50YC|!|kٌh!:O\OB߶;|7*L}<%ٍބhsǾ. ΅ѭNZ-rd79 ^e[i%*eѹ m~ 6_`%r[/~uq'bL zR_ b/K\[xs/!w*1r&ЉO8SÝ vvcYN8 ]mԵ>,97S˅9F9o3=Ot?sZ#$LJb`n{Cw]1zpa(Q!q馷tBɵ܃f)mGgMGoi51G,\C)^IIͧqrY:c;spIKTpLNketx(>N# |i1t*Lu)<,sg {p[_[q'9feM+ )Eg`>Y <8k·7/ԐWd 㪛FSJV1?T#4%7\yw߉߮ ~ƃ$彪)qy Y~K}0<⋼B܃䶩];ڇ _{%r9jЭ,BO`swpOt]:K܋3}:`(z;I7x;kw 'aY &ۆ}U0a%3?{9_|K3m>o蓭O5N?_jp7_?I8OMNh:sm8|\|ίLGeߪޭu:$C?ZrOz>4N;x6Doa=hMy'M7*[w<6 X4B>y^Dl_ķGe܆Ӳܰ$pyHM0>\na{4|<>0yts.96H>i,qʨ&/s0 K&;W{̀gDWCܛ̃+wqͯ{ҎuA RX.錬"<_>,sSz?k<{I-P䡈n,5.\}֋9;wƐHr [|N7{Ë tA[ r;0s .r+zTrV÷o&&ÇD5_+{/<݈xa3`;#C$ noRd7pN&/w+S5}/]q^a^n N KSeo.`9lQewGxEu?}D ޽P˛ ;~VNG! /&ESYly,%#MCO7_[;me8 Pʭㇾ>ѐ}E7/,ryfV~g>Ч)m:̏uw_| )d?O~kV3|/}d=}|lgqK7k#a'bK׵?\ Sksί~O_n#{}>/yQߖ.-dO-pNe>%s:r߿_i{d >$chyB^o}k߮d^ksH& Na~ۏZNʳ>*-䊪a ϋk|z荦L適y h}b8}I\rXҥY7| O%|r̡<7^s^?Q ȵitI8&_6ȼF$>s۽S7`Y|~r ͑(;_d Crj ߰~ܻKb_hÍGe>Imbcv0vr?K=2wv;?>V;̟y9Ҍ?^ Omk޶e;{Ö3-7zף>[ۊo<~_;:uK[54Ms`={IJ <_}0~s%yKcl߭{0䑩5 -W }دk+ɳQt, |;8 wO>.P>˳"7zGُȋC ߪΆS^MpOx{iC2+ohy;яh??rُo :X>-hs'k t9ʼN=[[ѫ6w/"9\X8W:a^Lpt詏}WHybzi.:zxO:vI׍o9׿7,yoGwF%G t]S#tuK>x_sXh@k]wsrG?'W c]Yr:kߔ1k$\Պ!lm+Yܵ꾧oMWLG]?gDBq)pn_yjr y]Ը/?[-g+Hsވ_v</icC7z%gײs狾9 G9t<6#Q~Oj9\3H?U=SG]W0WI<~y;D$c1x6YM@oo{takkyu so_ު ,?ABߓ/gu}V^/8iyw6:/^w,g~"-z<=[ى|:km+)uB:yN Ge𳛸vK0'_cAro$zOOMOk;֣aR8( 7o\>|L1n ӼwIoRz :_E{/b9Ip#Y@ ߔ=a>7kK Ű/K}6~G61_}vb%gaιrֻ`8;9=̷ LuM;N+9Qc95UgW/9S#8.sN9xɑ/0e?q3F7hy*Gbyr_G7{B%2@$ 1U{X/gNt\}S 42At2pIWrRL8{?:*qAۚ/[^@e>vhM̏Y3L;b^znLd ?W=n5G?Iިgi:G/IBw9k^*!׌%^!"#ce^͈V z)7/V71J%@GeF7#?KxM8: ͐dzr$>I[KY ӛΊ\M˭fMJ.Mxnks$~Qӱ/O~Y|eS`=K׾W%ż>myR[)*znХS?bz O0`=\i+Cr6X#}+CV'9ǘ˓VFKԱ?mf>9OcYdyKiWwgكl*oM4 u%=Sx^ߦyzd9azqFWtozwU|OWvf=A[O9ȳ}yp p7N vw~߃*n˃;XϱX{7nƟy^;cѽL#"7J {5|̀'+LƸOadEḋbFrtn%5FOK_G3 :0Dg%sBϪt2Gɹ&W|WF_?3KIZA >l8i>xz4_%_Bו἟CBd]$|%IRmi%ޓ< 'W)WޗapB+%|_p;xFȷG'bdg?/H\?=HoY?한W;{g7yƹ[-O|Y>u>9T%7ߧ\NrOofyրl=⼶ =e:W~^'},8 ϙ/S'۽7O]_ay_‡I_Q$n1_7dnZ$nk6  ./?(-'\WkoBG0h__ٱ@b? ~ŋ\%%ײ.9%>*xӁב8 eA;1UHϻye@zAϔKn{?8k,j:)y[W;L.=o [E_dе3垩sJ76ԃ[no휗DFU9J1o u=:Q4܅|'Wp) `ha8f>.Nx-M½?D'΋溛Rql(+p, +lǂEQAޖo$vMzO&3L2}Io˟~/wS;Zg{T~ ~ ^wMn<:瞞&G΁WMYxiĿ\}?Wbn zݹ[!˃s_``]+K'!]^x|mY^$xd3v;>J{'Ȓ# 5o}pow}9ƞKϋ#K|<>=h!oQxOĦ/ѫl* .gV|'#/K{ߧ9@6Ξuuft'\8/N>{'j{煙ջG7M5Z{TOq38cI~DK5AKPnk- `6;倫GQ=>Сlm/pCV}^NzV-ܾ쥮a5x e9oۥkgls)F]uѯ'wU՗/Л'֒_2|JFGs-&ǭoϞo[< +C@S୏smѩIm+g^ Xy!RGY^'_Gc.x=wmck/%Ǽ~>n/t0sZj'wԧP`~g0[|Sw@/YZRPK|T?^,y^k7[I{r'#5DE% ;/ y^e ѣ[%M1Owa.zhwWt;O_4N˜ A@j"ku/!Vegr|~c{M^߫hʳg6ᩑ~|){拞S,M,|]~qx߬?|@՗k^s}%z0z8}p8F svSZ62/r_tZbݷ.t 6wNz9kp'ot;3O.x3{g?Cp>ݏKx}V#W-l®ȼ9%/F_9R{!j¹ĆWN[ΰNh/p1߳>nqg7soQ·Ёa뻦uqmom;aJKcw=KXG.z{Ļ2?9VLK*nFﮥлL/7 R.WVgEϽ>=qoo}nʻ\E fyS:tWKl-z(ٓ-ܳuZ|/7w0==<8{3B,gM9YO|%zY63m㓛ƅyW=|i ZP:3#SẀ[\i{ХѳًunSv ]>5*Q6`Q)mJߥoIa6N}Hgu2}QdC/SIpg}椇t7epsZ|q-=I?9ka;za.,$N,奒iE~.vsϗFHw] 9oӌ 7LiQYXSt_Z7%팋>qAkG7GK$'Kqه;S|nҡ3%l'ϙKO <(x|G`<=f~8:?Ou^yw=9_.x!Z!IM>GAk#E|c?^{W?i'{ΨIv<. ss5,E{ۏw^rlKKͱ~O{ouM1έ| A:Nػ0ԦY&:g͕y.{;~}]si3L?rh<Wwȵ=i 2<#M5(WΩ_Qf{9m+8yp[~~w]n-y}sEK _rã.?E/s̝^7B`勵\p.0ڀ?[zVN}tRC>+Z˸cR=?::t>j ɠGT>>[;WyU<^bm_Mc{At4 w䛥oc9=$]mѶ_C,:KW[ xLrD~f<άʹd.f8Pynyn^>zv:M~056Ͽܠ^`M{{^#57]&=9gnǻlAUr^\g|ȫsC/I'9).rb!8ZQߋ oG~ߢi13ދύp_>b ntK W }ɕ~S8駯[Qҭ@'xսms϶{>E~՚w?d/~n+_<|owM^bkKܫ䄹({n둬nc h곋ХG'La6Oݎ,Oa>+|wn~J^(S-WX\^G^ (o4y U96rfk_WH~\s;2KiEi!oq Ҏ~l'e#:،r̂S?37_gi? ҋޅF']k _QPiuF黒_1}}&NytUهV>,,{{j-Ugv/X⚿qN-x}vxM[#woUz5:WGG(Î`,XoDS#7au}Y@ k(^13WNճ0z#u2ox?32 ~$U}Cd[}όCmO|;]ȅtrn"_U>n"9 ir'o<8U= ~ sf R`!h.G884aazTOZ_dNp)x{6U>2#vq"xZt5 ', 'iբ: %ōw 3RM3(x}OC>l# Q Uc(gXsW=zޝO[a}s#?j_uOEw; QWys#wrnMwrxO~^˚~NS{ X0ym|ZCZOi𪮷mY9 /.rmq.v .p=|AAė_ssV|0U%rFf1,W3/ 1g ?si?!-O<8{SCg󔁇 w=LޖɑkdVw|!,Q߆?Ф+[gK>e}zc_yx\8z)5Oj㜖^.պsp+9DaUcF<S{QN6t-胻ʡ}b!AoXN?} d g|Qy*q*G6ɽ{R9ޱ`tCO- ۘK3/7R$oG$EM},nsSܫW|b9ku g.` SP)2NEjg~ܯy_#Ģ|.Tڗ~O{x˂-!֦wsfS0{zí>d8r?+̗A$eʹƷ^\mHU#n} g^w41_dmzxf>}>ls_-oM)͜iާA?u~7f=yith}-^x" җ|xM'?ᩔ7A0~ kRg\M1o \71w St#g@Stfai~!|)) ЫIiy;Em r )=e;>#3'עofo͡+|{~*apf5P-|Z/|i/GLepz|Sԓ=qKйRNM˫#o@~<<,ryDߗ޻\1Me׸Xu0cZ)Po wY{LO>2lۉփ+we|9ʥVa ީ/W>AEGey#.YqYI>[RQatA98]({{b1 s>O%?O]GbgM]}N8.CǟΖ[NL;:ҷ[b4;/q^@~Z[7y-?Cg~0 "W~k,hׇY\27܋B^`7n9^j_H亮{927 Z'F|O`^yur{SKR⧸L=/0rUw䡉 >j[ {l`+g[AZI֧>~:srL %?L/L:򾢾 {{W|mw.N.#]*WxJyKWOEJ-W&s]- ,iGW/y;r|]WK@Ys{xҜ_˔sR =&׺e\j;~vSA[Ͽ\xf :4 زo=ȝ_Г!w =M3sg| 0xc7"84i=t*Myɟ>g-y;|2^-Ëѹ*ZyYtóu[9pNrG'3$V}|.>Dϒ6r "Ͽ]:6i<W# OԇqB+>9\:Ax/u3|k=U0O 3wƍ [s\ƧZԃCq)˜zsܟ{\RϘ '-$X.1>Uyk|z;~KlKj4q?[7b΃ar;>G3o`n>9s?x9]!rQ1oЗk 'ȅNV*i{se/(9+7Fʑc{vY|tr<,Y|hx+-͢3onGf}w3 r"nK;r融rSynBoDs(9$^>gﶍ&R,GɅ@f;g FUE6Q晣 g\kRV=];|y#7 Z'a{RN r8G^>w 'Dy슯fJkiia 'ɭ8.kpQV;/V{諛6~ytƔU?sq#_6y U<6.iz:Stn}ydR <伺Qzk $y[b9 <|^Oö,x|(cx&?"=tt+sd9׮|}ݸ_V_P~U{J[JSʓu7q-·/F¿뤃=1| fɋx"zFnx-@H'e=Q{@u]=BKO'C>?3P~:]wpoZ/z(y׸QdZkւ8cƖȳ5,c|ȅ k;yP?kqp:w+\n[ <p)7ʍkyxv; 5?sz痯{1?#mqx6p"]OU-=(L6PVOdȳȠ'w8zs9FB6Dnk> xJ.g879^(<[r/S}Uw҇wUjf!Y?#O`S %GDE_trYS]7GjʝLGO5Ƕ^s x z 鍲UlZ{ .n{>˜!4 Ne+IWXO]s#90=47?]%{%gq<>x c1rC_=ot=Hj~[, O9ϖ^;}ܸHQV1;X?p򱌾!'r}|:WȂ孿}!-gVx5un}^n @|2lE]7TNr珠XO|9?~y,i S:]O|aoochO+*4|h,7m$sr2ƾAtG}pw{WZ<|XP,ᆹOg_W<7^^foigع'~OS{񫞼^X_p7=j;wt3zZ!:|7 /J*uEg :!p(ވvf$!Q]"=GI(M*d/N0$'FҜKS}G C/zzwa8B_1F1>yao!E5^zU~ys +TŘk_vXfWfO&#GsNғ^D4Oo9fpL#WԿ7V7oB<_y:Aϔc ;<؏] 2ހVswӄ9w:S"|ȁO4UO+=e~oSöʷO߸gM+w (#a]ws߮goTα@QZgus]~n>C0$9z.. FI =L7~}Y9xv{Frs%;j _RSCup\ݷ8xO}?&gIJ!\7)>- ԕu6&4>m OzRK<(D>(F{B}IS+99texrwW[Bzʜ%,|n(}+6?;v;/]r|*ittלAwC. /3: Ǖy)Wbm܉$K)ߦ_J=7nE׷梁 W$oJ~Շ >Y|1.W9C#x{}Eϖ>.9E ?1BNs1p϶"b9rjN0nƧyvo:}kea_W>N?aY`m;ß rool |4yBZqKB=b|Q}-,,|کP9+س*}3-ü:yP?ᣜ>C~ e/9o#~v3KF`t+zGerc::/B容qQ7+l;e9'@*Ҹ8~]b_)9y9-(vz V .MNdş ^/! ޘ<=ϕ^3[3|)ޚb^G?ڃ4DWu.n%߻zhyN0F H~RsE3:$9 ߣ7Cg2M?? n7nI;N;r ЕɧC?7_s+}꣜fH޷<:/=G؍1Ot?!im4:2{> Qy_FN{=Tp޽c46:d&_s}>^Nق<8"uw)?pС{:s:S 0iހ1pH|KOgU?W|m6Nqݏx"z aO鿕y\aIֳ?69.߶?fs>8Wu)OlUKG4[G臧+^Ӥ {CgW'RG:p s(1On/KtzwWѡW:ɼȺ7u)NK"FހSW<:)f%F?H_݌a/&:8c,ޟVtE(LXiͫ=^+ɢ+K~wSF_^&1xO%=D76, &ܢ*y߀a [#'ϳh:x U?j2pU{kWy$0sFgJNI=P}49i9|~̥7zەd఻qp evOgOO}K'ЏP/sY1OmKW`SbS\;S7{$}O|*ekS+HgD'Ǟiy{=S>XL彥ѹ߇^~o!߲g$MwC7 rEj.s]Ꟑ.h>9|`MGg>͜%J}eH'%S8o ?AJz:tMt Ȑ!:^|Ki,9kɝDwa^z97:sLKs|?KAMr J>"M<Fhowa>t]U4𕷗{ _n~˒]r 8q_;Ol=ri,CկKn{^4@go)GFZ%'8ϑHTM? Ѻ dIm߳,8$:>85}R}m~å s/Bfe{stw{%нTzSb3M=t}y1§g\?z_ |:\\/ތ|qg՗>></N{/9§jrB_ޭ]jDzУC+o+o~]y&PgQOn`%w.,>Ok'r^]kryǥjΎ"o'G|wy/O\Dϧ"\asx~~=dɳ.["ғy7cbnWnM> c\">jpf]5y E7Ap^bUzY(&{{LwLf^Y{4H|,`yӛ|v+WH ȕy/\˦ο]={dDOv_F9O.>ti'm~"(G;ћ;蔋;^Y6gA߭yt}wfChUt\Wq/ q>xwe׃VG>KޗJ{/75IN%ruz z1vs^+NtMY>zw]?4=;/UΩ9n;K qr+|qqt!CG4dK%!= =j\Zp`~Tm'~NW|] {}~^]Uqj}Cws|xicYtz ^; ~=>ioめ%e93 ^Q`>d~{\JY Z\\~ےw"Mv8}Ciq}) Կ]PNr?w` * ϫ}^=r]~Gw:蟭MQ}Cz?ٟ[{7oSv50;#57\ rNX MIJ7Rm]7Ο ۬=+2E8rPw=O.t A«GߴuKdnV$H-4~dr[-s?z!m/k؋~+{?E-mZ`oZyYoMN>4h!p,8CV2{[~ 7 o=$M?Ap#< ͽQ["ݒ]yax|vy@']/y1ϩPʩW?M? o~.O߇s_0絃G''1?ͼ$1Nz :ͪOi>yYEk,^({{ص%hNJnj!+M/Zr{cR<'A@F靈N}go(9U y~O7yAsSHwy9%_ /1_Ot0g9#Ĕ}܀\ʟ﷟;_~7ƽ3,>0>|~ Q!򞔋CNMr߆O9|:_9PE'6@~|p/<}6-A2At|.1sb&Gj}}DI| ..o._??Izb^'|g!gPdnBOcꑓ>x3{3WC,]M.~]>3z]gb Gc>`B߻ 򶎣/G@k}}_K|?MCXy[gL~!ӑoM\78gėZ7>9 kW~'+ 'oX! z]i?Am|Ifك}Ң$CC-$.e?9Wyx<}vW[6O+:]o[K!M_3SZETxIN+s/sE$8@|k|@.6rGd^OLr;y&D֎ K3/5JAnôzι5'gTϟE~6cܬ1H O_K'] 9'IOL ԕ>'XɃ_;O~g:>cם=둉KXcXAxy,SС?3ļ k'q&%-]]a,?Em;Bm;rvnJϟ㟯Q{mo9=샻;¼9t'َn1N~M^g-$aEɥ,ۮ^4V/9eM|_ uKu7Ca4e݇xs| ssD3?O?~nE?o?҉{ rmv|;f#įLÑ* }I2eCo[A&|1 ^Mxo־؀2}q:^p| w nY %oFE(zJ[\&Kty^=3fWz:p%I齙S:ٳ?ǚ?)艞|U yg՛(gCH[Sx=mq0*awz \/:.j˾`[Fs8xzssB߅3u|r}Y/z5&[䥵Пo s^=^s)?=D=6ǽgw757pOKWgNQ>B~'<]7s#ދI{t;|R?ߺNp, rѕߣ\&{W=G`VFss^'g)5SOEusѧTzt *94s76NS޵>-S/́98>c8-?׿֒Y{%Ypsre +p O˓MJy{#9x|[Ύ~[E{HtGnuypE*5#UgNyi]W[vp/x8}N=s[yvCԇVG#oz#/{w/p-_A,ݮpNNN}?(yqx5|,6|R,='3sAuȁyJFIN7l=guWL,p?1y@Ws1[dCQgߏpܥ̟u-.8f;C'}Aם`i}]7bt@KOOsPg{9?[U$Mo>-}sO\}bS">_9*0Wi~ar1I_|Qk1rKF镝'Ϯmϓ+:' :{4yEӿxS3eΝCE:r s8{G M{km%=eL{e*翀O+>& ʋX|%07T5yfZ~_yq~_2!gv*Gٿ!7XI'=u-<X^Pp o>=ɣ6Z VǒYj'GBS|)[ϋf~]RN]3-^=rs7J!h8[[yp(ǔwfy=w݃ҋSdR2tl.1tU3~O3<++_xm_|JU_<>1tzً0|K7C~p|֮srwVׂZy9䣲[gY*9qY?>#ʙ=Sn|eY;Sh_ݏ>#,O*˹Ru?ް=6~X|*W96`7wW[?.~8A 0{k~gtzȊ78<(yCy׽Mo/kwvu%+.A^x8ˣ?;; ?<7D[grMN7+JVzx4+ʜǝ=U< 7.z49}[OAUE>wi^O3'\1CWB_Sy>?߸~NYM= k~fQ 'GO@W#=t(ee>9A1|s~ϰn+9zvğ6ҹсПe5[+ |E7xxM!>]ߊ7q3iz};}Bй9 >ܮ-7Ϸ δ~GǔZ~ބ.-_ߏ>翓=^X$ x[W|yY O=FSE?c~Q {/At%).- O5t3?O읮l\W:qA/OrnWsQf- kǺ˾ޑ6}gB>%):_jb?'?˲I \63ϗ8> WX[ \ (wPbq$w4~/*6CW}>Yx:m#yO"y+{i[k g ;-{]߻·m?ܺq1΅ 1[{NWiɏY`^.?%|gL!O|=ϐ8ϳ^pgmOdؑ천K+{fN*s=[ gc{ s޲bO-3$\(si m@X[^F9m1%t>ѫ.[S%\<Kב~`%s?C?Ճ#!ЍLhCO9*A£1 U/6tc,nonZzz#<~*=xQEaWϑ&#Խ]|Βezwѽ.hNTvp8q/oue4}6 k?xw-UcYoV=3scMq99pqN;z;>2\ڂ^s=+z˲N9Y<znt cT:"<&9Zw˚Ї;v=iȸK]4ENP2J>e[Y].yց>ɵskctjr`t){Ws&Ssz.]477_N5ʹ[93~ 5[K%w/\GΩ8]{ᡕU}Cߎ.`P_wh7="֏{пQr_9_ȏ`0(w%9it;}~ ^NV~RͼiV7>A[h9n\ ^m@/^'% -='xZ9⩮_ ]?8z 3;Wwȋ tGTe  F7orݭʷB~΃ I9+~)r~*9a;%o`N7ŽT_(D﹆|3 ޣ,| m%w|,{ 6 ?Q2޷Z|yAAk8~15Iٕ+<*HN,J lςaϣマ|5>У6t@ y?G>Jz>lD~۲N&ia;^)ni2g"?UۓƜ=gs>W_KLڕFЕCanl\3?ȵqPb܁~]9M)f_N{˪WE?r.Dl#~0Qp3ի~M'lGg/H$'S#i7Óe88`y=Wx-GI\8g~uK&_{*zIp *$=NkJ ?2~[]AnVxԃxzD~ [GgXn7>Z^~{j9~"(C=nK=,ؓ[2[|q:JoI>-KBk`ȠSg~Gq]/&#Ϧ2tq/d&Ѓp4xgX}%^=n{;{zm >shx]#8jrB2K !f^`=(߽k>+8/6Abb!w!W}l_ >;ϧ," ."|<]E#zIC:]1`6s͞;@m&b}9#?:uE'v =Ü=~n"go=. 99 a-GNfz9fF-jg<)tcU#p |'zNSo.} #Kwk'k/sn\q|C̓N-x 9' oߍ*<$ǩ.=JFKGoMseqS0:*?ႏb#We9s<>{ɉ/loDN_$0﴿/@o+TNT$+}/nUΩ s[ ?sq/=/zѵvÅSJSOr9/)9 碋%p*<;ЧVɿ@oatZ0l`C<7l=zCzGgo*} 1pĢ^K F xz܃ʡO=hbLl7 /o6ת<<>xiц /z#g_L|@7WqLq?W6$0p>$g?BkxiS=/6|nރ/s5eQ$N`X]Y=DLE؂a^|<`sqSXz{ %?mҜJ}w./.߻A>\}ʀd>y^]1nt zs/??N?t߯-˹> |P]|7Og;NL)^^<_{{y~ؖXCjWSp򹸺~Ͷ_l@}M'~| I ,zBIn/195(,9ly\̕]t/0} GF{0?k ]~ϯ9sۄ[,~G؇K'l+ Xqk&]tЏzɍa9UëG }u_|׻퇧w䌫ȟ"Oza`#BTE5p5UMwׂV~׿?۳V.tRvۄC,8rMxnW&OUqXW~3mO,KHOW.~&uE٫vo W90޽sOwe!J+9_[,)@j y;a޳,W/T !h>DOV~hC ɏ]1/[:=no/Df66Ѝx̑oP9^d ]s 拔,ޮNZ9 ة(g= ̃۟ywRϗ2}@@2 9(wF>_oKi~~ 輲<%򢊦Wǿb}Ae ?sR =^]WG)^[\ޞl5?2}AVzhl޳Uz ??΀~JɆݵ{$-b;x/}k)|c7eށ?Dg$9He{tJ|#%~bbne<7F^žf|$K'z73FpYrߑ륉9On}o㋏UWk/!'[B~_ 1t,UEgkYx+h}U=H]3./?z-]NrNZ|MZω'~eGKNT9- _Fv7;K%[3Yϣ>K{j/R7ޡUf-S5sOEԣao(ſa>aE刴%U {whz4sw0BQn^{Q}u0tqZ ?T7}Z#<\dky̳ܵYp]ƻ4wg矗^Ҁ's\%G/lz܋JW4?aa99:tdG%GM,'#{~r9̋W`j<$z>7K=fY 2[oÙwU*bye{H~*SS4WSi-2n2Z>бգw SzDVGOs'Y|aVp y nNS1gH=-|ƿ5㣀W6 WQLm{O^1Vp&/{F7=]{_"Q^MO/p1M_l"*n:ct>yuDط-:~e3|_6 g*{KIQ%gGm?wx4^>r-,W2xl{b sSIùɑ,1lOOxFs/#\h}If.l'^Ï? Z +Yžbz 9H ^^j~aQgH{wvNw7s+=b~]>xdK}z >N|x] /ǹa9h<0~7y[x~V6hx4} pүTp+9Jt_r _\ZVKHLTcv\8G {+$~H ˑ#Jߨ^?hM_fb#̠ß,!ٍtptG3Ȟ \Yg7X߶C^/%~->)0wFC΂ӛc}uڃ~JzrfX MeRK xzg5Dj}W҆.4ܕĿfvxo<_X`5eG;1^WՏ^|mC{]gr韰t}"H^ztrI/xQ|wOwW\ُO#;?ͧevs+p/Vr]07uh:. ] KIZ|b:Ft[I{~4UoBGBk#i#{2:q"9?>bp\WAΑzg-mβ,>tƋv7ž| 9Ip˵ƫWѧc} |ۍ?߰]W\^yt(9Ax5+g'3Vr(P< N]mY>U|L??rusN/2W/^s |'+RB >гԼ0#KD18g?HBiVŸۗ)r5лҏɁ2~v-{g#xKѥ\u|ytun᜶ |mYUٗZOz S /F,^x%^=<ޓ-̍!xYirm=Ҍss=hcw^]'-_N#~Ň~ur_Y~痰K|ѡ?j-G̭-j}쓦7>H7zbE?lz$ nLz<ְd s^j=ْKsn?khpz5g=n5&s?<.t~O4D+aH?Oܧ.tcPI!|e%AGqK|8sMܖaޚE빟qR~gM{$ '<ɣahd~E;ؓ*=kM߈_1>Q=@o}+sM3#MO=ϽjAtǦ3L&yFTgKz?ルX-s,_E];t#9?ce9%|eΥ%Yg#-y?߄c wwlE'#'[,_%OIl/]Y_s!,/vKPt|{M7'џ'^oVgI {,YB v Vzvs(s0<*8rt7>i{Z\'{r%FW%|$zm2&BM+8:r,-CN)x< VonWy9Cm̍>p 9U GwH5zZit# ; 9]MYbs!|cR~v|ugv~ \ KkE᭣t5Ɉ{Ar;靖 ONN_7pZtVM}>no5q<.rYw3 EBv؋ϥ9R*D^Ir58j{r-S %xWwul3IJO=?voZE`ysrFMtemlwCVl~p /c6=E*'5𼯇Dz<t_g?Gf|}&,!H57Djaxщ_jz- dߨa./%Gp ?Zf^GMB%'~|>tyk6yCL_d*[Q¿o:1?.g#/gR@"7-NM~tK a4+=I ODtd=GU{Zmo/{$ުt薇 2wڽA;Dމǖs5ܴ:>^Z޶I\rEAI|-.GgD50XLb8^ͱEɳ2J>4͓K!|fq\rez63|y7y酑,9䟪Uy﷟ֻƘ-ُGx?ͧ_',g8'; ? {g.c9ogyss,q{M7~ЇxLX?=^ƾ̾~BrĽ{Q:^˃{ûax$gl佩>nW W w)TM_qxC?jY>:/h{8N*8Tk8$~tғAIӿJ8f:2"{p1>at>>izï囟uaOyGHLc=Kvnf9`99`~YGHRW 097CORV#=ϩitGҧvK[Ohcl3^Y\OGѿ6w\;9v/r##O5@Yo ܆e:r!s>RS`ȭſ`~zp?0\3{=Vߵm ~Iݟ=%'gIA|9:WkoBMZ.[N+-)η(Tjim# ΡIsd?g\b=(?Z/W q~œKKS[/`^ o5z*|yÓ,|w7_~y3o#紏ΐ,!'T٫-/?SƇ&C謺N9ew賐k{7sOz969kFj|r=R95T"r%R?6oϐd(Y9ԃ.~?zX;A;5OMjzgAL3}K.>'ov_$E<y`Ew3.A˵>)OWW}{V&@!^5'|س sГ#y{݈ +_^q3s6qt_/݄_x_J̳FQ9GSeyÚWPeϰ 3urU䣱Z|/+yb3Gk\طuxpI4¼ӱn9Ss==2Nv/>Fr*4~CS=9|>H7byZY'ijymmG%1|>pݒt2A7`nr#Y(I@~JV\M[_G1G/G? 9I_~z&'L߆|R%WK#rx#}9t^k}u{Nvz><- <#:|2i |ttht/>h]cV>μ5Ii#7_㠷PߖBwd%-5 ?!~Mi$|t8?v29Y+_'qZi͛+>?~|N<#ٛ҂qG~ /o$H6w>^5n 3'5-蚆1~G plO/ ~AFOg{,p:pAzp pY.X}< $oo$P wS!g| :! h~aί6(r^y8th=it,~ځ^fZהan8{n90|p#fx7q^{y?8Nы7]8?1/Utp~CoysMZ{ɩOwOW!|{wU!-%Sa5^x='5t+=(0ߏE(^rC_G-hX?8rΓQ`s"*L#л@9|ƛɇlG'ҥ:ߖcGs҈6L`o\.x%TMYFQi:x}9Ac?uّk4{uI4Jf |h%9j{j'rK%~|t&p!/O\cϝ;/{,g}*Nz Y-neM]7U)",8ȽI;[gw0 T_@nNޔ{[eȂu3!_PYWrZO|=y)Ϝo5r<xuMޢ2K09Axo|C,߼^GɲXaoF.hٯ o1:yw䔊j3FiGps |w̽cl?;% i0z?p*͢ie_}7Dt$3}=|GK}~)p!zsy^S6~`j=,|J}A38:sz鴱"# ֡џ_|7?,g\|-Jo9h 4[}mBU緀CG wx;yω.|Wミk=+VuVٟr🷷鰻?/+>KSm-oF3fW٧ۏ;iլN㍗{ o]ȫugDb2qS(}T0hs><͎O kc5buVǟb&/IZhl)~C>~Ã^Frz1wx?dFxcjn_}IL1~8&KxLO|ԁ/HU \v{ϕ?ƯnsgyUw?l}980UOW \LxC৖1rs<ρsПϢK%@<''x}#^\l|RѿOIr.o0|9sʾC7k}̳}-I}ouƞW=cPNy5A>Q -5Ks~Sq Sntũ2-׭Y[@ ~X4L̍YenG'Gkʣ/@\wߨ9|̝η5{^29zߤO^m%|,vP~.o|qIx:REoyO!+='?? j O|Oe^ ?6n 7T;S0hԠfN^7 aOHrr.Ӎu7פ?Yp}3]']7 &sx墢h'Wtn%"iBAߊSI? s}RH׽} ct ^lh5Kqj0#|.=A _|=tX![D.>oA_} yc1`~YnB%vz}Л-J$_;B$ׯ+rW~perN9dž{,g ?2Oj~$+}d4FGpMG{!YdϾ|D^>*rc^${>|C:PF~4ysR`pXeϘBhFߋcB^·|9c A@FMS~ t'B[E|[8n-<}|8k!$3@_0uak+]w@ϱCK/{]$@|&!@fg,i>Ϧߪz$1p%GG?.gz.={;"l9|c_Yk};/j-M]ޕthsa f8xzx _0BpB{$Ń?YrmG"}cu=1CZ:~\Qr"eϯ!ΏI$~C`/^a~f/:ut e&{h7ix"Wn4/z/;Ź4JbI%UDžOs/УPKK9kµdyAt#B' A ޺~T(OKK#%A_u)7r\ ܜ(> Ur5k9Q-HZ]lm|4kϠ6{p~[IܝJߞGڍ)>GrG JLHN0gቒ䭒Xҿ)tr˞>](X\-t5|o:/rge,~3Gx ~t3x><}c?rz Γox9jgH/*N}${o;zc&^?j}^pyWޖoH;sP vs?}G0]XI/?:"iQ&ʋp~7<^( :t7Yޙ1lO|З{}cg4{s+K yRtw3vh}0gn(ݏ<<<8u>>%Al7?*oz4 77z}EӚL=O<>WǾ'{HF ^ʠG\ÓAg7s&F6\ X.R(J/:m,9sջ#:Få _ }JϜ!WCKn>q>kK ?]b<^3d8~(}Wۭ/SÃj9pyёˢAk{Q&Zm +]Y=)r e1I=mg85 yY>?iXdm{脫~>vll|X^oxח\K^z0v!yA_ag|bi|f=ss&<,CZBh+>#`;x*1U3cgͰǗm,O%=MJ+P~pO=??NϘ{QeŒ\pdIjvwA_N-O5~7 ΅.Ojf/bϰ:񸽦=7>{i|A|kBi}5/Dw:`|X3NoOtr ːK)#{i HGB^x9)\?8Cd|f_~l\ yZ5 ou.D:|3Kr;iVt]IOk;$Y秄\I|p1<`/gZ su3}JrstA?^zٟ$[믮ص]&yo&J#-͹h}<)rgg#9M^'3 |(sC}k><ވ4f:C#7y*ziF׋wmozbߊzWIވ?s.s9\w_dz3ûۘ<_}=fG$ps'ܖ4s|3`F g?8|v\<vr=Tm*2mN,0KEK{Y ߙ96]2z}I#V fo(\}\6NfOƷU,c/ sN?ynJpqw眤_` G){|Oq~?aj$><]J-YW$vs;̞^^/~.|:|do់.?L>Z'+soD?'ˍK]" /ǿ}:y 3ۡ=íN^ s8;5:MTO~ujycarJgg M=t?=$ {{ 42|cA%S m.zWi .  :L~T0eqϞ#-<^!\ˏ?ɘȏ%7N6ӝwzJ_m>W#.OGLt蚄W^>̿t|lb]3ËI4}8? ssՉo|pdл'ǵ׷y %_1MNUgްIvHTy9%9?&i-x{vK׵I{|NW!AzQL;=f9frZ伌9~YrO[ݫ3!]z+KKv=,u߯[6z) ݛ:[nFKKO_]6}j{ˑ@gb:ֿ 'I8\X`E_ïXFԽ7^ʵUbO|H|Ym.=@&~uD?Ft½7]EHBהϯ/#o5tv^CVqIL>ݞKg&4InLp>k9CG\L5L>ӹ>nP it@*{wKQ;`{ofq&_x=h)bƝzڼ5O#' Y`94:h~mc7>ΐ$^s OW9,wr~Ix 蕰\׭;Er>4.pJ뽒rzWO }C%G6/o~eC_Rs4y?IK+OMoZ.r7zzݖ03l{ЯfVs4'?!A3+G=m:\5 ML|O@e7I9]?!_~}_Q9Ϣױig}#s|xlM?^,i/zit3 Eߺȏ5!;jǹJ#y7?8x[٨9tv38~o''z+I)#`5`vNLs7~[;rͅyIMm3yI=:\A[@Oϝb}4N.i>Ev2g|K+O 9gEEa\#(?6#K o/~zq_!ҙOTaSv3yR+\3'TzÆ;cI̶cB̏6^7` #ԋyk۽BW=1 /f^&Bqlts%~ `Ӏ{ddՖ?Cgd7ǜAw%$z늻?&\O;cjSlםiLx^2/ʣJrdh$ K |\ÇynB״9 ;Be.{z}Iwq'i_ЏVo4^vŸ',g&^e9ܳ zƷ5%sp=9Ie\ޡ9Y`=w1yN풵|n|)j3|%it9M?ݰ폭j~4gև6j=7nx= >4Ivi_ܿ{N%x$>"=Not,cW# _J;D}9#ޙiybBoax&zv9AJ ~ ]z1 \Qs.]=(I ]rSO=!Ӽ= zz`\sFMᔚd~y+~]ڎwǟEON21?Jy]w7eq{I募rԅx,7H@>Τ Ow}FD1E[H*yßN{%Lȏ.-ds&%掳~zR~滚eZm4I ϟ5{~O89Y}TtW=n׹W'(z7w}o~EK<ۃATщ7܊ym^fzxiGُ;3 t*9x~t&K=h ^r<w4 nK/a$ VY"8P>p%JA}.Y\ = ]x̐璹-1,;'-soK.z!ytMzUߝ]\62 Dd[}ykKGпWi|Eszse ֮%sAW✶lz%x7c]$o:Ͷs{jE'z6ݟj#zUȖt {iEmWwi𨹢g ^rVz߆\{E/CEϕ_2D8ؓrPR=۟;+ q|M<cnwyIxֲ-2|*Yh?sq^gIpN< =^g+w~}br ZDr'cRaDqkBUKs"&-'fJ >Ȼ_X4wg6|g~[-Ǣ[ oy%ߋN$[ RiDa_d=R'N,f.*rk;뉡sZ^ vci9!$ dM28^dߩ'"趚9袼Z}O/+M!n4[9uW)|C:;]3:qsDA* {Ozӓ\}c?f5dcoOs_i95Ӆ>s4, 4sj*I\WgehlzpU{i3:tS4̋ ixiwϱ,C.?zشS2&b9<1|&M7I,"}RD_OçoHϒyW#'>o .p>%ig$79Ees.HeYʰ󍘞X'Q?H*z\'!D.pxJ5̐w ҵd_fc9-̿-@1pS4R`oo7si|09閫n#ٻz.G}k9f%7rUBL p=9)hJaq0eƲcryr$jV"n?D0`&gfv[[u Tqj)ֳsw熯Kyg֒?K,F|NW.Ӏ-*G-̤$g@7 g~ϳ0iZr[ҫkcOq_EG{Xar28Mzt˪Tɟ[ [!x:rd I ҫ/NՂ埱F 8ɴYԵQxX;.!{y<8gZG?K+:4M7gn>vr C?<7v jϫu.^E5*ޫM?d3znDmrxL/t&ݧ]?E>1]i9#҄ϽsAuxfȩ8#spԱ:o=}}^r/>(>0 YYN1? >+_d?`.]pJ/|_֛jd cY ^][Gљ-@x0M䊞u/>ۓOQ7s=Ay2nߔNWp~5$_7?~>sˑȂcf^O0~֏ 8:~򈤞 UNV1vA#_{)LeֹV Cft[\|NNebQIu|̇ ^y澷߹UsbṸ{tx%/pzq6Wg DB4{ֱwLdE=߆t-ɹx{$H. ='~k>F )~ZOjO~81**~2+Ge;>]=>,?to+r荓*7~Z]<̟W+m2ھ,s\݁AGÿ$4 YK{SZ]O.A_/]qUx"nα%RWҍﱕf|4:sŗ4yX͹g~,dY]"r' ǩ<[䷒&褶XZiϿҫuGO^Mڞo'-/ `?k牢" W<ݦ-d7]sIa)xtR@Gz; Y/ONX<̧I+mAxs@S+|]ɻ͡IsѐxȃwIޞ ϝ]T]q?C߳SOVz~>Y3`;`\ŵԗպ=%ק?s}Z/,~ZdCWUe-Y;u>TBߞ_#Ar?K;Go=L'zHAOԠqns7y_Um<ݝׂз()}~$MWςÂ{JrA1|b<HN0ov:mߣ  D'/׿ [s@oZݵ{$裿߼ጶYt@҃t}W+k\yIYԽ&ul^Zo}%>DSsz s.gXO.)as[/ z#\.GLu䙌 tO /VirJ.zVɲm-?ޤ|(9HZ*|l ߟ2];({s@^:|*i?̋Ĝ'?U t%z=z>0y6Y~o\Q:BNg':QI ÆQѧtD9qZf7̾ƍ:sK)m d)lY2|澙?^xPmFik<~[ϻϭY?piFCbE ǞmcF =:l4vteZ) ?0{9mWIǕ^/9W#H{([<2s ޑ9[<$[/|_̯'ݜo'kG4<Ap%+gMiBwH&vW%_-"EnF{r Fy޲y'7BWsf_ ] qy˭{1t_k }JC>Lkp\*(r焷W6@ޞ崙>!}'-&7|'[9$tT }}ou5j( ׷6eRwkԝ=c]B/O]˞i2ڹgo=, AJ NDf <t:>:gЃ﯄^3%n?SuI~o Gd lɠ$E"z.M-gsV ם)~rB5d)?i<c:p[M+n:MOmg1ᒄ< ?|^|5pb.O.C^s|KgG 53wNq/+{{+Ws|,W_v7B^,DB.D渿FTXW315kma]9f~,SߜƊߪ4c5̇|BϠ`ZC.kH菂mxe&K~4 >Ic?MoOosi5qE9es1? VBYޚyS;yoYV#>Be9*Bs[txѿrHq'o&M+u1<2-LEE9ͼm|ܯ|LEwi'9HqnG d|Λⷃ=D%l:z'!/upv.7vS/8O\\qS|;& BQ#?\䪚^|I'LyM=LOI݅;:~wWۻKZ]'e6/Cgic=c&'|} w#|e ߿ϜyNOk~;;!!="Ds}] sћ.Aq?Z"ktI߬"C39ֿua*q"&>Rs3_(arZ~Xɳ$WFW$?}W\~ߥoFm0_ڿO;W>qU%]ŌXPmO19pN_0O}/Vpgr#yD\fE7|o#5êƷW+>W1<Ÿ#2t!(:ۆ-O?O.f|iz J~88[I]*Cn^$j\? 8X?(=~fF>6z=I{⟰QA-w.uD |G.A&Yt~k5ְ uhpsGW&gYqD bW(*vʉ " D tKIH$$d)M;5ofϙz߿THvgVz\|"_sN30s.p){8ovY~;~x}dY{pP[x^ zۛm.EG?X1xMÕ!;kڵ+~a>1r+/Y-Y|̓:>>e=}}yvC5#DE =|) =}fzezd7xWtroVGȉiZ/a |M.E].A>_x =t7E.VaqF^ e>8''/yt|4}xÜ?%qq,f0n.܋9^|髬zʖ I1 9CT,~V} P2OTm>z~M W)9ez ms|{2)k0>rrjie_Z}yx_gNЎt~?瓯 xW>{qQAل3<` yj+< >ĺ_>|p/`)xq{[}]ù[?E><sqOM2_gx}>*wa^p}/ևlDY)%/g޿9Ll|Gɝj7 <#̻9zAWu< #_O!\+:%-NSZs_zQo첼Bx YeóLccotƣ,gM59u]?bR:~V&p"slj|_!1|"Ap"#1t1SW+{/'I}`;7neHB~_~!>'YUn'ǍT?D9g _3sA">߲Gq_ x1x%zkO*΁_CSrܗֿ.V_}ݱ?~1y ~Quύ37Zy)9zD~tYx_|B>'o?湈Wz;y WοC5GArj2oU֗^%JN8kqUf?6_G T=@?xS{{NBV}q[Pd~|!H=e  X(~ek{axx}79lY/Xzf)<~.htzo<ອ<.t!/NZְ/"G> Vh/fNTNe-M|0 ?^ti%{;o_~D!'9Izɻ;]JrM~1/9Z k-A2G/pT2[ZOں·su7=dtsX=|0LbVSgy򦷛9ouz{eO>,= 4n}+䶶⦏_wG}`} xoU'>s%kwo7=S/b}܇u/VϓJN؇;L7M8k&Kޖ;8lr' o!t>eBxTmosO2A{~k0g짲}/#|o_G.<?Y;z{r<}Lݫ~))$焏G3JNG7sBjI3ЧegRṌ˹i< ohǯTg&Oǟ`O:ςWF G@s@X<+"m}aM:\!?D w ycW_?9^2oНwbVݚÿT>mg/q'%ϳ):Io|!`1$~ftyk^=َNȵj:H՚r{ V{b<~€1i|D*y>7,Y77r$>({N'} [{72<@ֲߠ hv[ng?9|_&5N+V!g(|it74g0l{v;Ƭwn _Ny|nαi$~]%ۅa0Jn__^ ^4tg+x/S,TGoE_we=%rS<y/%k;py5jYs3rl3Cɽԅ˟9| Q-vAcB^.2nQ`ev+REnۘ:l=+E}#NWkH:M  v?ZNY x%zbox\0syq?p-ssL8._n l{j_r.0eA?~ar )&C40gzgDOiνG\I޿^][޹Bs;_6_I Þc !&r{_i%z蚞e?;=9+ܥ_XѸ_9o 154FWi0sKƯJSƹO-s#[vǥn 2K>H>dm}KpO.\l)xz2L'~y4td&5>pCu㉦O`U:<>5Fi&% V"GIs.w11VI ,{a'GwȋFI_{\x-쉦CZ~|y}=0kiWMoU褴8H)ȾOS8">>v;c4ͽa}N_ˣ$Yƙ/F2.IoM1[ΒZvMs܅z~):2j'즷>ǹy#>9<{yr׏~E ρS{g<28|r%Nw9zR.۾Fl2 軓*{T?=ʿf:dtcƻx/繷>'ȅe.W<)ǖOLA;vs5鱰. vY>ݽ}xғ15dkY> 8RkyZ]zгMcRA<3%,\ਙM(L7I(l1|amp5=Geu< nvGlv:{IǏsV&"l}WH{Ve>Cy>zgcU{{ck7j|qM7C/B}vM9x2Gx"Gs /uICׄu}${%Vl*M=/?qSC\'IZ|5Cds# N!)r>#g(ȟW湝AwOyO 7|SG2˽) >)rF,|.`H'ݛNl9䫼DGk8np%wLFOx㩛O zy+ {R}YEz󱼟{M*z}M7˜ yu@=|{U#8*맋L>ʝqˊ I%Vx眡N:3$39N.@o~˂˃ Pv#G-yv+s'cy!iNtm"[}4_DnCwu6~5f}^*x |oʡ{r1w*9Qo@OgC|S3 3?"i8#G>&3IW͂mj3GX漰2mC5]2'gػZ~"%⧱m싻[/1Ƚ܄N {UJ|ϝ7Պ,w?dw<'Q^{D+gݔ7gVr{o^ >:3g)yWo,]=^93*G9ޡBMw9 oN ˗dr~;A| 瘟b_{v6>_Y?E/!Mmv%ȻY? ɍ,L35T'QI+~~.YvK'_._d\A{e?@oOr~usɜ# ߤZM-ZXz$Et Rϗ}i94yFqt%XCɐϘTtky,8|;Y^)+49^rers.f.5b4@micn' ?u[7N^1OOV$7`k_7`#PDj~+62S |U+scg臑Ix]%Tg紼`︖syH>\IcֳT G.s&],q|!9ppR5|J8v _>v1_lRWI]BWT߱\cMId[w';|roxj~ޓ?bنdWGL=p } ^GQ=97y^d>};sosHߧ;S?WS|-sSyr|Tq >4⍠? <y38?MoZ3UEe\j]k-]ci ƙ|y'MNKlFϽs&{縿AWrnKLdZ*~+ry"'M4 #]Δ{CF&UQrb=m,VN-'4g{q#a%*nŜ^SνVOlݟ+o 9w8T'} :+jk%߶[yT1܆No! $FWu=| {?|} [{#$8CrCy 9?ЛvOr<T+;6|/z*X5Ğ،_l5yvϱ$߼dzi|O?](>/5Mnr_/I4'nt3-t'Jm} |>mY=#A_2/|Q,> r=,@2LDQ[z|&XOZ\{@nݪ%Ɯ?8B#|jmCL-7J6Njȝ'~OZ0yf޺z+_rZnS'(: $C?FO<'\9hg $_UGyC+, 2g_2\y?\i^b}i]X\|]'W_.~k?"ܸ窅2^{OX;K ޲,uq՜hJi/֢CYNWyuߏd0slĿ9)]/w#y|>l:Ol.-ot%~<8|˛"}1gՄ~t.)h{,| o XQtcxM\}WitGL@gQߥ}Ћ5p6+P`̓~"T$h׏;{KpRt䰶"/kJٽ~͹fd/sG_|\tp 0"Ca]oN>Y|1z8_{ɷ k8kv|ofOs0[o%6ʜ ~xtgoį6 سJģ>9GϨ]̯mO.s&yitҜ#ρ{y5Ü'@~mvģ~k7]pߖ#(U]a}kw剭vjVۯy{3/&); Q|rM>ha-s;!FM߳}z~ Nl焌9ֳx2׿I|A֏͹IIB},c8:!Qx~ruU3D+&1',$8M=XaLJ&~YN|$އ&r0su9E.5CWŰlm/W܅zW[#x"{n式 $n^$z\d <:^/=ˬ擈9=Z>oa_}q9{"{ Q!z L _|#T=m#*b\y mkǕ]ouʟ*92k:dzAv?:$}^tyCYx/ћTb{#7K`<7kzf'zC1e/DnZaZpyp/Xϣ_1%`1Dx/~b[IgicRNd|@ 7񼯔$>46wۥ9 o?Koj=׻? ~8?>|OvE}V5Gy@ZG~'MN^0{z}d9=EzlO?,IYpJzеj?V=y-ƋwNC~<ɣsϴ5L4l#% isۆړ~ѻ|%?<wgX޾^g&E?|gRzF We3Szn8x^.̜rD`y^x5EWWG/S9sq-:Xs4l%|ӭp⟮}Y+{j~+_EOe/"\IM1s})]'+|7-w|7w'0 r-7D ȍXpOsϲG>)9Y+`H<?+%=G_O _` 7U sdߑ8O{61[Y ݒR%F+~ |NoC#o= EzV-8./iQC03K_CWΗnfώ eU / >88u.o-zNV=S=L\`Ye>+.?~Azȁ+:5|~<9L/~):%I#!G7zޏֻ7|)ٳ`YΖ)k#ɑ~}WIu={?x'Rb^ə15 !tS))po'Gyp~)x?c ]s>g淀o9+Os?YvʣF>{Ag 4E?Ky9mW[߯s̫^zﳜhM ^s4OxC䢵OF's9'ݬL'hX[P`߿ .hˮ?EwI~{=%fRD7 j[Ts)tryb^YK&nc0h̯__µȹNDN&<BsKx^P/nig':`_6e$s3vu `{f;FU<wm_kwFȺt7 h?(~3s?f>F'E~ONMwo3멊~_WMW]'? Cgu.Twg<;j\sm<$.1QK8)YOʻ|&i|ܑS:|z_~g_SF< O"׵m}gW\n!m*|] =4o,(=㝜> M !s5I/W 2$?ʜk||veFd >4d~C{79< և {8i9̲%rW/roZ}!^j# Oȹ#-E-(Qa|A2:q'Y6;\ֿ%d%e٣RxQKojSC={xd[}/sx`K9E}x> y. _Ln>^d5~.}C#GisIO-y/=E28e/s[_v2<Ɯpz|8~s;V?|\iK}^do5|}sޠȠ$%D=n: {`.*soz]ܫnW,W̼zQ=89ƒ8`9[f_x9?#.ܪKM4N{3nK\,_vBqGIc+M#_]|3ǥcY4=Yo-?Gg0+F< W?*q(9ypYe9y}K%autECmr^&zfJ)t%>0Gyߞ]O^˃#vvH]oy|$9+:ozC=E%2狽/bz}$>d@ w,g]ߣV,=iw'ݟlҝwQϵ/N9^sQ3'jn;|{,~2_ {~@ noYͷݓkO{pek t[-~@[YI_M!͸V)1/3?)\. rN6<|{JGI_ '.=#i%h;KD>:YVO6*C'?-e5dW#)qdω|GEo<t玮''Otd3ss?{pܒS;j擯]}ԧl9j@#qQHF80Lꭥ[-Ga9{O?N-ߍNN:fwؕխ'?j^Wynuvi TOӒ/oHO?5ߤ_Y .tţg"~jytw 9Q sKZO= "%'~1KjFk>RshеYkcf__irYtNȇ9BazCYK?5k)t]n^[:,|W]UߨޥSl_ǭssgOӭߝ_^ߡo0 z`z-INmԎk>]?'ÕnG7G>ȲyMH>OϢ 6i$֠sn|g%xQtiK3F'{Uɇ &L=1p֖'kS$=2>7ߛrʷ܌ked=쾇ziˤ+/e()ίpd{!s;\c3a}|<|92>`|mZS|x<׹_1-3y3<`*|2qW<oO˝) =Z?p3ܯ%_+m4] pIx·; ~۴@~ ~?%WxB߷]e(з^rh]XY ڷ? _\WSc ,)^َd=2smi;yFw>}膋/Rk(MߒoeYA~s%|y^g/ܵrdطܩ9[2 λs!p9/E ̹]䶐9ͺPyx":x2>ч^.A/yG=e\C>)9syї7Z-!@Jfϻ˂Uy:&cylr罚>e"nA㷇\>>#/u:{?A?2sD/KNxO3'm;u_V\kj%OkzL-#}6rZJwM=}_?BГfaMӱ[(.֘&IꇇwgnS[O>,*_v'i?Z)T2_|W4ŹSEj:Ppy)Sċ)uGB5˶}.DɸX^v9-<3Ure 6η*|F`Y^4'xԽJz|P2T4νD?s6|k0]No; 1փGŲ該>x<:9%/;@xL IQRJ=<:UaIg4y~߆~)3==]ůՀO^ltk?[_#7r=</LsVFI>M}_.nMvzg^1X0:!hv'܈: G>vJMOSf rnxNk)YUޕ7"BjcΧ(9ݲ!rXȿe߈g%Ƞ0d3}+&|IN>{}1֗' efN/][ [~sw53ӯi;9gzA:M-c'Nj>aO> ]==)ʹއ|;%wKwC^|)Y|yw^Kx5ϼ"HwBӓog?w]qIJjI|oG-:Eh g/#MX}mO_Fwf\;/"AiՋJt7%e XN3@k|=^PC뷃oM ky⼷>Y7'|r3U%VhyAO]D/2{yJ'վo~o']5% 8K|㛥N{]z5e_#QدlOI 0Z'^:i]} kы"k'^NC8^GsOl@;2͠&U[70wmi1?~@| 'iwop u7Or,l5xyT9Pe{֧'>zby}{."}ehs[{k]y!>itj@G{sTo^|ƒa0,yϸ=Jȗr%=oK:n}~ r:ד$Ez?!xčY 'z177HY>40k{"rG9X^3x9^+ }Hd?oNfw;ohg?^PpM?bu~ <&Otg59N8st_{·\F+%~m-V<덼9*<a_@<Bɕtc5I=ݓ(|F{s .ƒkR) 1?XQmt~ {d8í@\hÞo8GR~pG5c \sͼ;8#׬-|<|^C/AgiuzM$OJJ晟/ξ\oWϾCcG}<}csVBtyd9WuTy!tBpI@y IKv0>3$}гo*Oݥ{qg=|4}k>EwI;}C+dG'J~.O2z+b"_w! 6DNEAsFSnx6Y'%>?'~_iw'#|Æq=%[K{DGwmրq%M6~n|b_ OC65ŏd>- ߽j|w(Xw#ƾ!|@/.>'' {Nbޚ;01nIS]~;7צ-WU{ɤZrá˟秊{- ,_kk~= Ves\&K k 2r`u b;-~F'] iyxy]Zw囚~ڋ.\Lς SzHǪ%`B;c}>)uLBx#yދq?> &7zɛt^uoF~W]DW}0{Q7޽Q}8瞧GC }#<5: .OV㿊,׶O\ H{}7>{ߗb:A*vش×u-}#n8zyG76 a[%my=m.S[) >2 k7:ɣ$ Nfز{H s't'_,?Kz]*9 mO^sgØn79g?v4mG?TD8~@l 8=5=]Z7Rtڦݎg3j^vS,.Rė>OztΧYܦGMx5Q5~| IOܘ {|WHh?v(8Hܶ,=y· ,:>{ܺ^Egs=̹i3o2^>Ğ< ?foꢯ}$\>v@q3itc烷>ZA:1*{<ῗa ,>stZBҌo~!,pGΠ{3>"R^"p)L-C|4u n{4U7 Ir7X~ȇގ\ׁU7Xlsz~ۓ2Ov%n;ySe[K 8s 37Ӯ=t>n~ "6ޣ tm "^9h_9}Q}!)t!vf|1Vgt;wr/T9ג34^d%9=ipm/:YGoN]րs&}˔;gayO:#?yPUx$xcEAofCYא<18b;Ϲ݀dϞ`_ =H_['xmVLe}go?ysoi剹4qOYn^spCEו^Wtߟ~])1%N{B/} zd =k9=~%Dg{NVQ9{1Z%%i/y\AƇǙ&~A$Oo s/5}1 -7uKty{W emځNj|szЍ'p}[iE'l c9/hD<|>N¤ 5<|Y){e>v6ZnAx4ax}@^|+Ng?\rtmCy YދO܇ |e9")C\DgAr_R4qS[N (ʀcע)rDNst_&OfV7>x׏M5no}ԁx?퉞[}J,C9whܻ-}QU=?P|) n<|J"q#zya BNC|ewvv/ '~4*l~owNYzz0^|Fc)Nā𧻓{V-&~؃~5UЋKۧn>M2ϖ]I0e_]t֥xR.MIڔ~x(F7I|e*O8j=h&WRI%pԭ֏puݩ}/6O(|(zmdO~. ̧eyqo9I?ܱzҗok< }ˤyGjŞY{={,n$78/k=^x+9[^K5f;7 =IփY.2(a_WOgwmIp>'wW wgof}ze +?q9!~]ٌm<{QKz\]AWNWj^N^{;1By{Y5Ax҈<Lpkf*MgߨZ 0RVv SoGe_}=Q@z4}9r_7]OkL<5|t/1-!O;T\ ~ K9i-i"L|>CJ~}i7Of9EQthWDf_VX#9GǝnACr;?(B=3~2yrt 9Kџ?J9ɾ<5lYЬ7JRgqtpvZ8[#6~8:w1՜ \~Hr8C[qa)':i}=a1\e}܁itd3}v/u<xyz-o9 O4}.Upnt6 ]|&LYؓYuy^{ Wөfx>Y>rRO. \WkSh=%ILKZ_>$Wהw1Q?QxvE{؊N CzGb bI՞-x=BDΎx}*X轺:CW9,:ǝQ? #{| h]bs\ބ:Gbd9.o@I% 9|q%|kSAtѦ;sO z]y}Ww8^y57ϸ(0Uan1tFO׈Ѕ0 o y9HptU>=l7[k|.nd0/E zd'7>/Y9zM/hz~Az^̀gYO N^[ѓegp?=ʹ;{Ot } I;#7X+WzuӭC<}жrOs$M|3R~ AzL##_e^1jޙ |/y'}mY#/rZG_d} $&+lC$=x^cq֏*țIW7@{h%{,-=λ\!MrGϒ+Be{܏B^tn]+ߝQ$4NG hP.tؐ/J]h>'C18FU0bx [YsMZQ) ^jM!lϋ%͹Ga/ pM47Qt> _[N}riǏh| 0/{C}?Ik~.}B77{:y SmF_UxyV辵$:eT)B$P/=0xym`Vo1g~xYd=7{S[8X?)C!e?8'U'1wy^ƘG 7۞b Ix\xx]uEg]0!Mρ?x`V8T fge ;M?Qjn80sM&XY j!w0~Gz1t>yH)\VײO-=tނ^uT>_/qxV-yPcGV=t̳q$z愜zOmx~YU>{osrv?$YQãmѿ!V-6 >;4D߆{ gfy|Y+Ys z8<@CWw:f'V/;Ϲr/tVY7Y2 |~hzv]c5Ϙ}f݁?>OK:򨵛|w2b1~ǰ#/$üz ңo5?żyiğKvo7n`1AKa+35ܷ)E?eHoy/yy7`s z8xP>g)y"O0tinsD7 2鱽x4yx"?/:b4^l^B6Zƃ<~93wA>+>Jyboܿ # Q5s;$œSpvYuЃVkoi}Q1B4zB:@-o ~YGѻ+M/i3a)ߠ{NX^1YxiI4&7= 9s=$yE |r_%5ܝw?hؔG~2Xg`^㼳s<5usx08^3[zӅ 14Ylܳ(8f|>.k5SVbez E_ATz!ַ '~zi:k^&_<M2W0'n(}]FEYBl><kt=T_ /sZWkzݼѱ>9%t>xϡOߣ s>pz5Kn&|2YDao] ǫsysz70ݔoo%fD!-/WEM[[O1O~4gI`=PU_wY3DEDDq"nQ("FCdo(iҴigvˇ mr}|>ud! y^f O둲9M|_\$si)yݭgM| }Y/M8>`^iv8yE,C9ɱ4xM^(W.xbOKs?ǗbfGfr:Wxء/ 6ߨb/ tl:~>u> y ~1M]~7 |陏stXNt|G#CYYS8y -qOY?6xJ5Q/Y{ZJq7k-y.c\[}Q@`/?[&nV.sKod?'+_V0\4u\ =5]h~u߷WuH?zW]_V{ޤmR GbAzOqw'3<9&z>%E=Hp at}Z|(&oG?YI?|G Y9-o;?%ܱ<kez7lf e.EaUsB9fV*rS9c=>stxp%qX`5~:ܻQOC+Qr^yZH;cB\%?o7sE']o[JV3X00=_ Lg߮]O_|{8ZZ_$@,n ò7?`4` =Ativoe7>zYtw y),ïc[ _,^N!RspR!ϧ=i ~SN׆.Ƌs~|‡gRyDžǥnq>q̑ Jx, 4feF_7Nx|@>W򰤙>z9~e':^rmg&djqp;G=S4GU/k{_==> B?߫qtY1xV|"Aw ,bxr??25JyAI@(sN9 %9G_aK;J#C-O.ެ;.8mfٓvۅ}8Mqn 91Dvo {%J?C#>ek48>CJyls|!|ZBƐ]jsWr 2a/|n:Z=&ߟμGtWJL0GL=W'J3[6[?3 Z 8~9D_K.z8V=$蟮t}ka Nvw3?0/&ϧ]P|NtI$~^䌱2 c>Pryk9S8-_?:QiaρՐcΈ<|i`oL\{n>F̑#:I6}s#OT }⧗<_Mh{h\t~4`rkd?MN&r> {{f|gey|f~u~ F\<]9JㄺW\8O*} tA&ۏԫ>S}\1?X ~,JI ݤ̳ϭRzН[{m;YRQ`4>ͱ3m/1z qt~:RDaixU޿46ރ gy[bduUC"e%lɓc;,1O[frAvΪ\Vņ?_="XW)k]g4?kn>+/~>xx6§(_M2_ײoNڼ.^Fu0ǎ=TLñ~6B87uXN߷qOyC~P?4}5~t':n8UsJ^K! zd>-tHEr߆W)$mxLv3[kq+/%3zG!ʀoZe#|n>r-}yIWL:~a̵Wr~s^]_a$W9c^D5>5={:K G=s8yJXgpm/e/SNUO| x\;sq9V G_ Sq:#y^zIlNd>o/OXn28%Cc/EG/kNkHo=t#27,7bߏvɃO93'|oXW9_otc+!7Ŝ`9|k=Iw?/8Voyzhұէet +G=S[e%Y QY|-.^^v\/H%W+e''V~(>Ixe\":.|=gC046)r>s4dy 3r9C6}=A'TXn2xLɃ+g4jSj/ϵ%'c}2u;|Egfsl4_X.ɞ"W4o9h*#cX.OAj\\<񟃙cj8yy\VS)c'Pxgtf^{Xd}6gފ݃[/9  5Z/POomͷ }^=[jw}3je lpp|λBWZ93pIܛn*'xGA[c߭wWY[ \yaѢ7GzOV쥣<xv:5r*}roFx/,K@oVdsp=z}iVP,A{I%,OV[Nt|'&~uΧ>RT3[^~֫dC {o\j~ ykw>{? c҃iz[y:%p_ވldE(2b$;<餕2s&ϑ$FGM%AFxTμF9|Y/}{Ec;.ց퇿9rEM\PuFV)jw᪯t֓IIZg@)7~$ytm i '~vS\`_@םEϞGRt}> /_L|y-a^@GNɍ<1 6˯bEd^>:/0y-%W]ć_ 2%fzyٺu{Ah}xߗ%Ft| n> D?4o:LZGi Textr$oα)x?5Eg:W4'cm:oVm9O{9y\j: ?oFXg~BJ$kHپ߸S*~Ϧeo(Qp!Q^KZW9~?|K7aуX/q?fd}.H9unQ~|Y36koK6#DD-IY'*tWUs>of?̹wA i978ώqLǗ__p'{^ϰ'=E-M21s'j{>9 ;π#[{|bO\5vv¿X?'-%0{P;Y0$pMu>J#it=A_"'jF9/eQtY+w[B0pIcXg6߇啵ۃ>Uy3oY)> ㎠@#ϛ7}x?{, tο/1]QӐךnt"{8}#gxy.l~X Fb/?Z2<}e ^_g%y? ʑ{~Q|f]Qt%/,$jzfek_ AeUQ:z{8WC|s%<^+%a|uN+9L}|:) zK`X.y|?UBP]|뵗7~D|yw%.{'BO$IƧ2ϟ_ Ћ1F~|.e7>Ar_).|E{4~|1:Y=-o1t".8^zm"7dz´Ót |a~ṵ_o?^sȏ@]4a~z,=/%xa7Oj37=uwYwbAPF<71WUkU4r5{OTcK)*sSOכ?WXoc[U:>?/ʩF_X@|m+Έbؔi[ Z}©H{_xc7>-c.~n1 MkE9 ~SϚ[|#g%q.Rm/}=0!r7ʾ4e=%`}̟!qc1w?DgH&)K_VJh~j;xfȻC/$~1rԊ|.пeRh<0>t{M=CO͐#!rfR-NȳP{ \u@͓c1{?$v)ja,gl%g ߾ߓ1}IUgg527]U]ag~$~ ˃YE'- <$x)5?'gKL(M!A<)2yK-:RdޝF'kssr:GEo]윽r΁ 2>uH9]ty{rp_Hv=K)1>4g tVHkaOL!򢥛 |zf͠f1x xh;G5V?V'0u__JC49r-c{8{\o\?v>+ : yNYG~ol<8FI!^~*|[Ciz>r1o-2'ZG ul3*Zvz˛g;=W":t r X#64f?Ə2D/ά{<NcEtSˣoh< D,<+zN-12^Ǯ7R'tc ܓK𗖯=~ ޥë=v\O?Kk}2H<}A 0σume-F|')V-gI=Q8cY!2sJ4zmVo9d^]@.+Fyw9X,\''1o+OCrϗn.ٛϡoMܓ6sje`Βacӟ'/G{'_-yǢN%W2y)V"9|BYx&y*sw0sf<^(3'lN7gIzG?S/4- UNqyc7O,CD7'Kcu#s)Nޓz=H^46ksjYt{:¹Pr\\<8>g{\/3 A1۴}ZѱX=k@G&)N7TN"5L|0t=m=Wi/J ?8_fM`85>Ӄ#ݼa Q4M~}n\F5ؘٔ)y-#2';x"B~>|~Ny^?h&O?߫>`5Qu ⯶Q=Ë'WCz?~t`u݃A2sDwC]9tx"fƏ~ءd8?*Ws5>"/72X9U֟5ybޤGZ3i@ny6^c2竹_'/a͡ڊNa.ß[K~R^=}>}-0gXϭ8en3!IwC%ϰ?ϡ}A7 )"|l ^~;4a//t}t;Syb{G8k>8sA?S/< ~QrN4~u\3c_||/d~RǙ {JY1y;~r  Y'71yG[novټɡێ ,ܛy~| o+y8cmvGr*c1r1_|OI$>m9Y>} oF̓_{Egu1_j*;MI3K x[.\ɹ0W)sW?0p>sUt }SW$ ~:L҅<}aFr{|}7 !V64׭}r-Er4+}?ͷóe {HeCϤȥao\t `¾r: ndsBtOYPG+5ˠ% <`-^e;s=~mֻ> lç"!aCxsl缶\d|b˙Z'u=\u{яaÏTM/|Imو9I;K_`|Jڳ}`&?0?^|͗`4cYZbo0?ip|3I⣟o]|r|N)]T-5?fl\Rf2%C|>CpAg;Z8c{<M#}ޫ_^5~R>_6dz tD1[?;np8:g@SW bWMd<_G73A<q Ftk_słwk\/BsK/z"42_z>z 9˨]vz{%(;l,ix$F{rϞyB }χ<3ᇃ}Ӑ7蚺>a Wg^5|V5 >q_nI 7ӱgINUup/+\=;^W-_+kn,? ,.7i:㖛|jG`䐏} wcܿ2N`Vwgڊ)OS\~Y.قe <焐wqϒ/XHCjs=y*_0>͜kAxZӹle${:cS5r=4N~xmhi{湝! W d:a }'J_ӎKUSUp^۽Q^[9W#߷47j_Yqnk-UNA$grWяMw03^`BZ%Q5ZϞ?oT3o*녘G,w5'o6iM\W|#9򇤉~tSRwB'M\.FE _ccn ›yЅ!y#*;lʣ?3b22,Jt4?\d$tz sV;L/tmw ۜ @#}lOү:y5ǜ-`:߼^ :݊\2/u}}أ(=؍- i/n&9tǯ^h/Q%x><>}2n<,.fϋq/*}xk=fۮ>{ I~'s^NoecNWX=WB2ܺ_KTt14c< z`Y/!=E ߴ|IFP7. |z㜿 +H9{.sBǙEG:GKͽOct=ɷki )-1=PS+Xfy;K uZ_]X=ЛX"/ޱ?UWnEkt!K=qoNߴ5&W2{*q6x-/0<;xK#s|5:&7h78KTbf?s)jȷl(/z99Yp!m@>rӞ^B]R2>6綹NIYG/Oߘsx+=@~b^#3G`*;/ ~YtCA7'GrW}clK諯\`AG ϕ\ɧ:^=} .WaAШ{ntqi}7QSg<ɍYsɉ|&[o%_Ћ^LyNi;7s8_,m)MX+}=9rГdln'~s$ _`_]%3ȼcϞ> ҏIo!tӋЏΫ {^c4~N/]"B5Xjp?\ u{&'Hy=\M8$)˭%_tc{_KO?\|g H.i?/Eq>_e=az9U0}~c8.57/[a !)OޯY;lD1̜W|c}7L+ z[s󔰾X:Kpwi_D-K0>:#p>z˔93h])tȡCMs?Wd~#fהM2.<-IbO).zLk.Xt_38=5Cp!BH%Wt ^"< ~tL㗰7czfI/&S~C\%Qm~,S5rXd#C^ ҧD?L϶XCނ֠vonϟT_i={u){b{w۽D_\ܱ96>!' :H/u}I'F)l(³o52zbug~ 98^[bd;o9ԧ&Sثuy=~ 1]T'`7!$ λ{o\N3gэ.Fi:>JzN9Csg/fɒsf9it<^t^;'W4~WL/y*@i/s0Fg/<~7:}Tŧc ;n NX)8Qrl=(~יW1g\G/f{kٻCRWgL]_^^rS(=Z|Y^vz*pqBL} =?׃kRzd2a4 n"8FO_z.wPz#_Dk4?k܇9W&g6|&z,I}ȗNdZgzT@? j-msB}0_=q&+$N{2|gREOnEgD ]?͡3zZ;'? &;4_j}%_igWbF\˗lR3o(a|?X ^&.Ifw1Xi?yfK|T=p6#2ɑb 7oceY5IN͉TFQЫO/b%IȻ幷qQ/~{ :nn>;_7"qϹ jA/Gg<I37 s({_hvFu?s+Dt2M55D;tݣ)#yIt\i^)tyFǷ,0V΅=hc=:@n$: ?Aw*+| }rf4Ϫwo@7x.:m/copX#>Oc?c=4?Y"Oo7/$38 ̷)d`d^tj2n9a^ {__=썃?/)~|gKǏj|ぽIQ۽&#G#?M zFof{m>9ϭ&d/H=*їb;s_gw&s9y57ir`e{5 Ο#ϫ%y/ɕޅk38{Rm=/hG4 CSp?k^Qͥv?Gj{,W"m~|Z8-眽_r&%ӇO]LRC0z,F-`/}n+`9'O~foM5}5O |}3W<ι{Up;n"e=FeLJ_qxJem^.0"[sl>[4ߍkkx_>v9O_b&X=s{.mz "E&8L7 O\tt!wo 8r'z/6^яa}:ý2G$1?A^(~-WIr4{F,d9d̷棚俏>6=g6>-Ƈi|A◲<)Mnn0LN,8-AV }Wkػ ,|!B u5It,|*x9/ڇlNFW{%~lg@qmmi/gzeweHAyB{qmi6a7n|y~&t-i>6~Α^VZŢr{݉όCBRg/_i3ss _ ?{$Dç ^a8+4Sב(C3 VG'qN_'ҸGv_֡+]P9j{" ΟuԖoe=Btf˶濿p>~j1~st}ُ]|'hޙL2ɭA7M&97yKm2nj;9UXzRGN; ջKs̃meWOAr,w V] C3=Òeke~:ՅϦ='?>wW{{{hD.A,>}: o;0qA.c>~q=ytއORgn~綡l/mڲ~ŏIʫ7[?#!K+b-q>T/Egx ÍyU9<{sDɡw|n_ׇvh+?S3;rٗ8е1^,^OVj}J3$Ky\LMSE"׾vֿd-98z%D.PGB9y喨5匥 )w6=|A3cNo'=) zpN(FrIFM!'ԑW?}j푺.pp?ӧG_xK=n{չ{ӳxϕ_̟I|iEWMK % ,55{sunUpmIOE&MG\_=x."?^>3o%%rsd"M/\~8^ᖷ^,{.:foPh ܝ1}e2.Z<,LAWOGoMg= 8ITWBtGW?NLk=G%r MzWS?_ /0h[+9|N}+F"Bh`ns_G,7|=Z{(ou7u5۠nQ7>J:7M@w< 80 ^SR]t:=ȾI8'Ѱh\%<ޫ^->ߢzrR0njkQߜ*Jp0<^4\مo|E:*ދsiG78 ˞0=*Z>璄wC.)z$ϾSf62[sN|I*M`r4 o9K= =n|y%^9_Ю?.ٗ'u>sˍ9>/Q-ۋxЙ|>Fגd>VPY~+9z`8ZΝ7 <^_}ǹ-qiit͠CJ+y:4Oc: ;~0eo$-_yu vz+Y_C*[yt 3uN0$A16VMNQ=NNm.Vr<76sle?]n꣗m~䝼?+A?~m~^DMD[X] nG?紞<(9ܔCR<_| X_VϾv9_S7rz9jotO+3](i?_}%.og_'H6tˏGGπW!I<ԋ?)arR5OvK{yީz"# $\C~sA|jJ_=o|*9'I#~m/n{q泝w iϷ8oLʟ/>e}Zt1glf9Vh_3-σns^Y$:FUC.Դw.7Z{~[/y>Y|8:F>!KrJ 5g|aL_o}1Ol͟Z^p s!/8/}!uAZgH24:r_>n|b2E0ZX6?P$ϕt|S?:>v1WZ} D?ݚW &bt9erG zi/~e__ɓ๵^Z̤>C~4j%w  -Кr-WvsMoe5:= S<rGyuˈea s&N7]朾^C,ߢ />^ <{f9!Xp>wx_ N2}g޿\br{$~?Wv{_ ?k?33,J9ƭ^kp5|$.c2re0#C>淰>/j <^Kg|_o:琦z 7[*s5;yŪ _`2Ǩ$ý_rB`7N!#ϹݏϝJ~Nͅ~^xI$~<|^ͯC˓ox^D? NWHXNs1l}q Q7֓r=dKr |19q3ֶV|F}̠ޑQ,у V{8o-g^C|O5%T+͇@ߋER7-̹㧬b~;éCn/K缕cCZr_'by-~.?9綀X?Wl9߯MŻiZvȧe2=~#L~^J\k;Bym訃Q;cW&teWoXg[Ս|֑JO'x с7*EeUS"A7jj1y}q^ޞ/2,g}':ɌŇ|ֳg9!rzӘŇ?A{[G*9uƟq^[_'㹋/_ _p\I#o ["Ⓐ+y>LWd:iFvmY,Wt ?o~S(ՏGmwFD ZuW~_B21s9ݘ=o5z'e>Eןrmg r~;Gs9z@Q| U__|d|W(c 9tiOI-gfH:G/mpϩV$^_6},Y˿Kr.1'Ͽ?^%5N$P9p'=U2;/zn k~pFOǵ *=myϲB$П/]akt9o=5ȚyOuy]09V;&9ے zܣS_-j% ^Odݩo>r-Kp>ZП^]˞[+!$CN˫{[ yh8ħ;|}ruy 8~zieyI5sf \ $>tH<,x|j3A%G֓[#_[aLʹ)itiIj͟Gn=G-וr`|9^O#W֑g?4GA.'g<> O1@O\yS t/[eWro[~q?"tBG 9:&fB'&7-I8\(w ~W3Ms\a}%|T>;|?cܷ|/>Rdrad yf4:9pGY~t?ItQ< טG?zF4q'+~QdoFZ/8NE'(A^Nˌ#X>93~`s z$sf܋PmL3O{Le%8LӦf<qnx-p=IY42ӻ)#IA7ea>ԍ)CEh57ve=3ަ+ȲO2/o5Gb~65.B1r)Y,gzHDw?j9glsUG34dss%^d~QMƘg術'At|_%ౖj9Oqt>Ckg VrAO?: 1olD7r؇-7tcEO9󰍼q/o=L{?G#[I3W,+o@.*%r+;Yy'I|e!r_"Kɱ윷|JZNG? ? 5{gɁ=g׌*WDY̜#_v gi<(zWtqgѿ,CYʼa0PָY;v8ߴΒ{e}K^|ֳM.+)|par+]ϑLX0UCWz}"P֢Yȼf=Ky?<O-qh Nn+#_>XJ9Ukj+T4 > 2sa7#3jo mH'z *E{?y^{w?^D,zG9ߕAߢc?)"7[Kyݭ9݁.a+|t|J.b#j%裸{]I / ˩c~ՍQ}y~\^p~EEC0 LUɋ/9ݻ[$9-C߆l!Ϥk|(7ޭ^CFzm7}ufq'Gƾ*} 򘵕m ~ 7h+xZBcS[Yϫc"~$F}i{n]\w&w$s}lr\+s=G9*ɼۏ2nn1Օ\fh:r~hԗɁD.t8Pd8ᜲ0>l 9E*z,:89^Vr؏{?N'k o}?uS䝗+[ܿ+EM{5^M[>}>yb+|x3~-Bo%9] $S ;)sxuf-ur-1z\.I )Y[{kw{Oog^Hُѡh : sL3}>p5@18e8V[I3 /V?\~YGeʹ1lׁo ^ċO6d~fK >/"gKp5פF_;:S3myHxz34?mdN =QG (K a~}!!Dwp/+} q67Nq}M܇{)^gs ?*z].YxX8$?i3OSg裏F:t=)Eu<&Z>J絅s'/XnA\nx81De~NwWn1>Gz$<@ۦ #$ yo.͕Y|<Nn8!?}|qVQ>fMs>nӣYT${e(n:jzۗPޓzF)j#f)s(ۯy  Tyy}a=G%Cb!4\\5.7j}wC}IL~] Wh}wsjyN}27+f_ߏ7#Q JI/~^[ |eArLgAk٠;4?zvC/a3דۇa9yv/# 9@FHS Hȹ&G+N޲~(fȵ_^|k>#0;r*e]])K ݯfb7QԣwܖVtٖ۱@|t|7Js(2?W]i`?ajct-tF ;w;1: -p3_$o|yb_fz4۸t x\6[ a%Tr~)|Gd?zਲ਼aG^%N'ONb8/#ir#,g_l0-=Òrz3;WXnϏӏQya?+/4IH'i`:;aK?ېӉHn==8h9Յ=#tΠ3/O4x;zh:֓f9=+7_)3]G毀&|[e#ݬ}A-[ _&CAp8@z#me?kkcrk.=oN^o^sKW|u>ySggn_5%Tz1ޯ@ߡys{vҳp{'}5;9eo0='^vx+ܿB?to]{!%,$0;ȯ#ܕڋNЏo~!3x3 ϵa>m<.œ^r ^O;PO'&w8Ϸ-F1}'9PW8}L{x}},zu[WkC _X?D zap-\ׅSdocW433Mw_^zue?=[Qz$gʐ>67bnj>Lt֯}g6ED ^w.kKWh"k?oUVd?ǿgY2>㜳y2?c}<.90y/k ·4 Of9T;g7W}:W{9-k+ݵr,0?]׽ۨ=w$Fȿ':G#e>HŷI-s\c9$҃ߌ[ur7Ǔ%}O{X:S| IerV˙: bp}_?_R,RN_ۀ^#I?i9sqIxkJe3 \9׬ߖ-EobOTÙ0?0W}p(=|O[ xb>ȁ_E|OOs>9_F3߫yP\1>:9]Ԅ."?Ln $> f(aG 7/7{U;F[g7;) 7()  >RrWX| D0{fxXۅ_[vX"O\5sh\zag˨oFen\b)hoge1Vm~dt_CaGgOY{c<[ocʐINN|Js 7IGK3ipknH!z@|+RyÙOX#+m?Y1zb߽{/H__/h\ߵ2B<Պh\}y3=)qZ!6D \6LŢgx\<5w#[ö1^;Iz>;K|Ͽv#J[~MI3 x I˷\wodf.0t|ûyK[<|_,[#ϔ12w"?qp}ᶳ/2ޕv~Kwv({7sSv}Qjr 2^x/tO=g):[Gk%~LϞ.]3/)$׼gIְR^:wiOqOYBz!zqaOPyC"ӵ,!: /D99W}v)OƟ O1 3j+S1:)Ss |2]m3߄=V6"i&8<|rr_s/|\owEd'Iw)>\"z.g!AV~Ǽ;=O}+ˑ@[m$'\?]י980y*|}=je)>w6&x\l+/ޱ^OwwM,O\H?}DA]|l)u}R: 5raW?~7/XԳ2ϋ%H~B\Auz MX(~QIt~yr|>m=nCЏ?KNn+qҶ|L &[[>Waכc`~rOX> _Rsdt/8Z~w:3xvrs#[L] O_*Z[[Џ⇴25%L#J~{r&Lɑwf:{vi=MOqS~zU4DfЈ> ݓ5Gq9^OZbIxBZCz%ȏxm%z7[u+C-9[.Ak0?HsCQ?\MWJpd|y 8Hx^z[z=G]{'3GoyzxVnEGHN#"%?IK^4N['}%Rv.姯J;v?մ}|'yf¹Ԉ>f s ?=9v%7ڻ}5O7AVRXAp|qm8߲t;W>.=g¯k-9KE7:~x@f^518u3 9+8K I7[gM=gp&̛]zLp{oyB_"p, <_.=gn}^+}́x>w~j1cn://~aL4Gvp^BuI 8~Fct ezv~Y{}4 o圩EO|jyܖ&.Qn'szrP'y~Mpz-1rsHG˅%uV{ZX9{J|TfԵᨧ\%@J:Ap/kGdCז[*~ 5i#@ ]5zǧfnL7\%$fl G'?9-6"pkt=y2=< \Prm\U+I|K7玵%T֣~ĹoXwOHA+ a^~U\xqElHræ[­ܓMEN)}diۼ@S{|YpGyޗj,ItC1&t}~͏-~xҳ#at  K{rflGe>mbNlAgyId􀆟< sԂ٧_d:[SOKᷰzɉ&8?O=~A ;񺜞 ˱,uTm{u_6LNk=Ŧ/WZO[;c 6΃z!-, _w}қ/|&X-%)œez~r9t~,I 7"Z /DE4wlAxfO\dKaێ.*/; Nb)1_a%~>z'o,8θkWlQFac`~L)|c;xOaԨ{zG߳.VEAt(!t^d{2܋=|e[)a'vϙv8y߭{.y(C*w܂.A.F/3ؽaip@5JIT)Co e =gb)欇בO6b9X!p~{]<|gSq:] Y/DCwB\$si?n <3hyKͯ_.8a|R-G|2r*z)ṯ3[ns/8c?Q4d|-Ӥv:ьo77ftmGP[L8^B?|c_{_|~"`4=/^Q[<$J/>g 9%27- ٝg>|I'j"t;:6TM]gNvӥ th KZr3'+[,ל?{LΡd+6ge=T6ZϮI99<_Os!m@K<Q~Y|R'l?iR_V 'zINKWL,ofߋߙ|Dћ79=zJ"ܲZxY^o2>M/-m^i\KY/B^ɞ~>>nzgo5}8T-rae#8ru-8r .hom/ϐ!x~r=Zǜ/2tS1OY΍yc.E{_|9^l8ft>p7.^uS/QW|BΟ_o^Yby7v??)oz絑'=Z>&򽌍lD,Onޑ0`q_Ћ&3k#w_B^>#^Vrڞ'G?W?m8:-?\ 4?_\ n=v>gN)uJr%J|u.r%D>KKɟsSGG _?V}ڌ^7>~_v/rc5V<8ѓ2A߁Y/B7؀|oG+CfPj ~s97?)m#4-"$? C-j#o6 eϟ{t_n=2OYM|:4=xW uҟ / N.G>gd<#}> cבI&~ϫZ[/_} a ?+kBz;g|Kٵku9hm_e<)DW -ۭ>;YbdRſpt 3{r4CE5Yt?Ǡ?DO-I7B/lvT k\CׁUkJG+M{ǟVGwU/yZɁ;9-7{Z. 5k+ η igzĺܓ܏o|o#Rnpr<y@9o$􆘏`4?Qt_r~޹4>]5M/iG:]^gqQIs'F3/jJ% {\ 59g(q;VOf%nz0itmgd,~wU~U Aq)ϩNe{u|eC#^OL+߮(&z;I]42T?Gr^T`;sB)vi9xIי!>O0Of`3Ao+9BߗZ!x7F|C_YZolzヵlNw=+!7z,zw0oia)~kp?s i: =[Y W?txtIp,LC<?/ 798\nt1iw[mEO4{X.`ܣ^Y-*/&G7Kf;wof\d9>~iW?^dE-, :_'૳>(^]1u75uN9||3pɝ' at-swC莻1ucM{zuYo^]ZϛJ /> 3ޫlx W+[i~5SU)|.XϕMS olΦ\@24m~bws|=%^<\3WAwJ J^CqՃ"L@n#K9,Lq{zt]֣g-$!b~4{s*>;d9g9}\]kXw;4:\|-::^]S# ܿpsqY9f;:O/9^$O<|~9}HsKb9B_҃w3WL1 !] Dyn짦͠_>z\F%;&z0sx nY9oOϱ~7݉N[|I$CqZ^ğ`^n-r4N~i4y ?%t8Tܳ1|ͅ-Wzj,~Kovs΅',y= E3+Vt_hsVݥx8W%]kD{4=g_)-w 1e{ Tgs0.h/~z#5?LIA?N$;Z>WOd[:\}_}_U>+w tDSN6o/̥S$*=p9Gɒk{H~Z1n)O`=.||Mn<&/ ǝw[Dot>Y|R+IZr7@x/=d 糵w*py/ĜjDt!}ZtB_e>ҨuĴ: e,9^Dx MZz.'M,'Zz~t.ԄY3 5a9]3쵽<88]^t|3ࣆovY=oG/`:7/\ GW73_ pe)lgZC/B?^=^]-%e]Oa{a~\ȧw_C mc-ޒ@'"7$ GM#:79#[CM_I^|Ox>>R֎]Ҏ! o<z8}|OAt/paT˯^0}KoF/糟>sG_Ա |hsb]c-~\mKU*sO̯iD o{8|˨pl%I|>xcXF$95R[iܴ<gͭ}SW?f_/qwyd|a5̅Яkb7 [:czx̷pW7R,9^cPW>Vxu2]^?љVjl.EoMGػ5&Bu ɕVpN_8= I[dA}?al'OA}a#<~ |KGG%?ߋ*AP's5qRpm~,rd%qs>~*Hr?&S2N0Br&=sO䜠7N/8<}5Ҋ3I_Bɥ(Xd5laqz 2ț~0!~msE{<w怷4?}r7{-I|r9/FM| &/fx|Iq2x6O ߔKC|O粛{j9D==|,x;lJ3&kE rAg<W/C콷Vsӵi%*+{_~wC1Ӻ}/Vrk=e/g=Z !xQtC:MQNv>rg%Kȳ z|)^ܙ$9ؒ$G2r_iM>VY=sz|랖W>|bsZ[;?_I?Gޖ!>OќNA_wzl%,0gWke CJxܒmK:.x\M-I7<[e.V={4{l|-a}| Ʌ^]e8Gmɟ*{£̋GH馆笯<.p60 z!/{Oهj;[ѳX.[3˟@"#ރzǟ?U̞ O*Ix9cgs.yGe%mXm9ŚS!Ǐ}L)'7+٣EϹ-%Ǩ)MZ3qgY(>5sT3?#,@oїh/Ȇ\̩?|ms>*>M/'OԆrϿpBjJ /5Oh e8xҟnw{VܧcDi?;~z.o&(93G|5;^6)?>|c&w'sD| Mڇ] 0#Ox>/Q/.Ys4uy~x#X:S[\̉_y&؟%@/, H?z'gbHs-a#n}CMvx/b>w[{QC/>dy>z2E˝MkmrJ|J >[˼B oYl>:εe(Ժ|Jz&d K  Oڦ⪵GᳺHf[Godp |9|>yGoD>._KGMe^Aiy@*kynu15' u}+^V[K/UW+E{σz$O$Nzker7k ܰ3:zҪomP th~gaK }qb'Zn49B["!3;~koQ-c/bޑGxրww2}.>g+O2\!xFz ?ܻYۙ3|EM?~=^oȡ???*!zC(9|y]x#9;k?ܫUO=UH9_p/&POV(_=:(< =lbz8}7h 7-.~8tac9#{a&Rs-mt瓇b8<9ZCzS37-AFt%|T"p=D!o߈/w9?zBEK#8>sk.~o|ߛ߃ϭ?@g92gr<}P-Ǿst^^ˡmoB~%З]_qu|.}yO~gprtglNWhO=[(DZuZOnO[=`un/|$͸xv4~+n{h8QC.>yu܂E qэ?ʦkE@_=ľ7mL%{/}z< ߛn^l\ S|~:o+8Sy,[B _kϋ󣷑t U1#\>b~MGjKy|o[9:KY1]o y# ^ӣջ>($vwCgHWz_t/<+^Q ' r q2=F z> ]4/~RˏЭ;0%g (Ͽ4MP eq38Yl ޮZ 1U+Clٗ]\(ཱ> 4ϥ\y5} ͦOYy:O_ܚ\!YOh*-ژr{\G/O`h\Å'??;ITuy|ݛ /k ۖ=? >ni`S;睽]>xL7oLH\$~Vi$:7Շnl>/ӛOo#N+ 6r_k J^JWv;*}ZVQju?{}j4^55śsno^F.0z 򨵛9^3o, = ߾齡Vo7J_t$y5 /58DG" )* 5,}/Pϗ:z@ȅb;W%-C'ɲ/>r[_,G#fv?|1s=]e'7}v{;~~w% j'm.Xyr>di3Yʹd=3DOăMЕKѥlA7pWKμS̥ީ=˟٬:燇Pb|oAorM&[\Z~Y}_%Kd1G/iCI=v|A?v1k| ,1x*wCLn[^7Z^VzK{|v߷4XYOZM^.܏:~Uc;C_?;|}=_i%x|}bms5GitbDe9aף2HOd˻.mx@:ӱ 9yoE%Ǒ{w!! 7r¼{MKEEȽx΋W|~]yryuް)YcH Z`?q:9ƽڍ{o=W+؞W6W5M [T;}tЋPǹB_ /ۚ_>|9$2ͼ͛|3gDOwם ]ꕳU'+M$- {M!|:L5yy~/=]=J/<8&Rij1ೞR Es_9s~d_]m<7Ib>tB7>xuDYW'ŝ|(*ܶ5si;Ã&YxG.xdG3o*ȹ˞k5~u$Зpj p<{a\}S屐il՗+$Z|qÙ_쫵z2DUS@GOYJ{}É%8wjUd=k@~\ 9:Ƽ_z0|Xy ?6`I|+ 6N+νkJ֟]>YwzC[e} NϨk#_f*ח/rՑϴ<=r/&!ҋKϡLC&oF<3=x]OI~AùB$y|isx}uݫN~*D'Xלp𾟞KɐR|ֲ_7j=%m~3,σ/$s({8s58}+v8?K^x}ŹOlgDMU87[$ೇI_k64BOא˗?,c9nrC4dx+s}_Qko+r=7ϙ`oEo _+w)Od9I+''G偈[]-ao[ЗE8e8y9WFcq~z,ߊ~$1F~btz{OGg5;S>MԺsN_ܩٟ)H\ܥ?}$"@7^u-/ t[s?}Mr` “L0-|O':_)@m:ݤ>yWK06r6NyrN/EΫ5NR`0nXHxWNϧN"Ӆ䞇^tdYuow:n\т+}ܝ7d]z 8O,w|>g,SP뻭ĿyX]Ny)xz\MҾ=.sT \mqsMxZ_D'sM#:#˞}=] aF5 ܙfo ?\Y-1|o_˥wev{R=}aSk|X>g9ε _1}6k?MyHxRy W/ /S東v65ܟC+X{{.>La*?]ɞ`ߌ2t?n;,H^g{_k5袬I:Tz5z9l}]'_aX~x.l9 grS-gI9G9Z.-}lt6R>W {)>靮FGYȿn#gdוifpQ.]ELq"~|fOsVVa17kسrH ^Qty){!k X|؏IIr_C9ykhQ[>5kVgOitvi\]|j)>>|Qxnx+!2|Uc*3.qGV\uσ 9S='%<ᒿ|F寷Gn8|O$@tk{߭Sb}Țr%>L{k`'ܪc/9$#gxbB: NoSYa8) .44 (ߏWk]f#Zplf?YwK ~z-Zl}_7;yGυgZGNߣ->g9Owޟ ~sIu2GpΙ7 l>tB_Z&rU^wGsjW58_# 1.7J?[=tm:ct =ß#ߗu<-k<`t2ֆrؗC7'ƜDM6?fcƼ_g7[o8S8<>8 Λ@ >^H9oNNRw޿W:%aZa9>y>r-vsuz;5O9%EoD [)OiG 8D  ߮Н[g,>NGOf'\+' Y0[г/&Ξ<&/!3f.>[}DHr5K2ɱwG/2la.znbtDqyow\xm 蜱I#Q2 +/DOo{oDgGх[N>?gWC=H>=L|/}oC+Xyt <#,:*Ra6x/m8G-um33= =R] _[_FR_-I}G6O24:,{};,WX3ontx'-q&z~b4Z|1J%&U5舼wVՐ\T.ti}vW.8~!)Q G%},s;B4=9sOE :پZj9{4ށ.ZBU3Mry(Z<&| ݹnԧ|Sj}J5ߙ|+>Α%&$d:M}KW[kǗR/np<^~t73?u c8+Yx;q^pzeĝ9sm_̡?P,=CIk+jKAzO:߼0GGϏ:> 3ѡj7Ez!xa†xȧzj_Ko_[?In>{XQ0^Ap ΋NxoÚ&߁u˩smD'T/޵}ȣ_8[J:J$~|C-9,g5>'/^=3] |8E^E9\-K?{Ń?~5:]O~W*2K1x|3N-v`2z򄼜콦2?: yG~M0rW7*q|#rӱXtGЌgIsNsg{:zo,J k9V y~ )x(i}wz>t>wFz{zg\߹aY?FO)`'ɕFysSdߥu4I@g>*z&yO8_l^g>(s5i~dέ!\,;;d{L+I8~j5_[ՄKK%.tI9AMG>!Jmg?|E-dK`H0o+=)=lZ>Grz޽42Qy@ݰSA˱n8:&NQ]sޑ|H%98=ܫ~viQ:ǤvzS c-T!Nzȭ"$2aˇg~N(s⇿6^=Ǟy18oll] Fu~򏧶=x8A֓w/Q&ɣLT'܆ouM?~+n]K~Cox[o\RҭTkdK"Y8/`Ϗ"͏ŷ\]ԛ\bms=Z)܃~DǴط_m掃 \xt]c+u3n|n }Wrc砘y~)S< _|>|oy3!OUv“WgԳ_m}᠂> j@d{(QstȢwiO%spgeDW>sXAgc]NC7P¬+ 缈{Nqx3ڻ]Km7]>/ 2n ߛEEy\/wD[Q/1s_ts AnSE:+)Qy'}L?e>o pYBwڌ2^Cr!νfh|N鄟k\;t碉tU/%AHk7'ΰgn$k0=xC_'^.]s;}xYqU*ݜs"s'ɛ09y2B==aO#^^|M] I x(=6>%WEge9'9a)ϨG7 5 wbj=+co5߯q4}^PKǧ9 4X\w#l}&5ɥ&zeAAj%7y 6Bg>I\1e2h=|_\wօ7ctMc>"{'mϫs g$?XN^[9ݒ%Pq7?z y3M*:,9dU=?F>}Y'+QրC\Vo u܍)p#;c$*`vkyWM/Kܢ7ɇ}k9!\|5>y9<5/[O0 f̭/yZOb(G/ /'&%|"8y.gO7oqtU?$co,ZW?<_ݳ5齩O)Ü?EsvwKī{lz\*7,e.gJ6]&ثbKcrޥ-)kbY}}O<1?$_6}~DMob=1/<2xMq̱AF> A[{{;q~|o:n _],nL+'ndN_ 3z7Js%,IޫF~pvwn9=X>~pW;3ߑߦ1˭ ]CkN/.O Lӡ=1mTbEк9:,:eom~&_*v|}G'_kh91[>?s=݃^>t4`P2YX~z=<^g8&U;/|/꟫:AW>}__+r@b[z'd>(9I43%~?Deg/ͧA~2#-#褣4*{ 9|L&Q.}}GryYV";(RT *JTtQJPB lڙ}wfvNߞs潮_%/$3s|tfYt+ʾ'}-wr,}^a'y| I|]J֯[}ͅ?S땨FBne|ufs=6{uOB?3Np+)ɲW3ɹhgg9WB ]_៟˟ms131}z}rwN2WIӧO)&6|$y9J7|c?*3 h ~X4^zFC,o_G7eHӣND,oׇ$Ij#ȳ>?2>%yb?{=p޸u Y{x`$ߧ@?p;7ڙʾ_ Y.?yoz '7h>x}=^/q5OK]_s ~G˲(Qέcgv%(x6^r мqK3|Ý|1{{4~$~Z,o_J.鼬l-sbG]D}]4>t|B;coJ lߋQoxWY4XRl$_^dGOK>\t0$}kбT,Cg2^SXpt ~a#0Fi!vO%3{’!b1Vד|1m`pּg#߯ VՇU[L~O]9>D3VYb)gGL-@NB'}< Vx=BXi_ ζGZo`S1H^i9.x]Sz\j͜C~zΖ^:[nmO?sRO:{srlN OEj{Ûab.Qy`5 =Q x\F> m ~Ws^:쿧OS଍|DkjNxO>z-ڙw#䀷wo~:r %r-S{/}ge/R[]7zW^#d9{x".CKl?z5Wwnkצ5iϑSgLﵟ;ܿ}g%ϥE{6|F&-ttƇ>{ڧk 0<6Z o9Uk#E`Kb:w'tǖ|!!S|R];$E~b;>0}P pύt;5<^zmM3g㷲@[c^F <2I>[F/7ϟ7zxO.NĒ%jKg=il_\4=׊.7U.>p)xqZgpd\_e#d/_3?_+EX 9!:?#i9|| hG/#}Z~ZzvXO%k9As7 N;>YmC_5?|`>rqNw7j%^) ޘ~o\? B: {Ӆ<'yLnJeE;7eJ=J3z$2֣̃9/uc 8?Jroo3܂O1ɃoŗvN;S0 9TϐQg|V@Z^x珡`O/|g'&oŗШx8(;&W|?%6[x"{w'~]ov⯮͑gNzc+G_wOwz"^wЏu:ހK\wצ=93_q 9u}vǶ\ߕ.O] h{A7=;|7::A/0wIޛH6ِ9~|ckHq=X#eeB7h=:4:>'~Nts&}7-|Tm vvkXb:&+?zr+b'S O#/a#{Ny4Ɯ;ܿZzC׹=fS'bIZvyW-W&p'|>:/Y$C.`#EG!mx!k!J`4?9Ò,pߤzOe{Bȳ5}ᵏ= F68sl3y=' ߷]C)v]U I9zѯT8?aAG޸&c؊`]B[ߪSu7vO1xW,3^4e> ^xB/[֗yƧsE\Ho>`˧<ⓟW{Asy@4Df*rf^N 7^1^X}G7>|W.CT=fGxGw?3S2_-)3~mQO͑܏^)xfn/c_qc<ƝFNofGs M[mtZKNZy7E[AR~1G0y :>H#nGbžo|-UIУMk^=0'{55QܬG* W+8=XQ;9Xvϖgg9O8ϛ?^(C>zg_%Ys,xq̿VB O1裑n?cJk%7=rr6m_Z~ϭFqk}*˅MI/ xk'mb1'":|_9yt%o2]?@N*߷PmCч?dΰϭ{$x DϒO(|ҋk#Ak&]hbԁiצsCWQjw}`<-뢓=1G ,CGC2[oRYK^ڛx+'].}ݎ>i4J9:14@8͗FS jzD4=4o0⃿b>+C#(^&Q!{y#uMeȣG4rxr%9/0k35mRy;póC)C Co$GGS/q9oaU~ s'sw:(:il?,)ys$U=U-5h<~!ӚpS|;z?kV|8 NNw#eL;8Ǭ4_rgH⻸_>*X]G;8LIOZ] GNw>Qy?-ǹOs|_ac7K-|/d#ZܼIGzv}c7纉s緱W~{yCOSk! f,;>s-_1@]3yh?<|m }5AWyzub䳴ӢwGz%9M7w1' _{e;T˛EXqD;\_QX/^liW\0Z["!5q?pTW_Q5Bo.jC =8 Z6Y/{=& hOROnFH|Z:=[9)J=Yt揳w9o,nh͉_9?fz(LOSӿq|O<<7LFYqx4Y8W#'k˥'hTM8g''gAr֗/o>@nYd˫W7 [3 v򥆌`J+n~KFRvçNG2:ɽzd|Ap<Uc1땑V'ѩLwZߓF5AHfbmaye_JSnm1=~R48X˱KIߕ~|Rϣ^Ϸ~Ur׵ ^unϗ0)?<rd&eу W8%@G>9FlX^\*˳D8:+W#f~1fGU<~3?H_=RVZN>B O9~fq:z .H'>`v)$Oa˟׼tvZ'>+>rr/{}UW3_F|J '-;Cy{<*}b҉1M:zqBփ;ǼAeno9:k_@?y,)^@rf zA/6߈mp:K]JUQ?sF(y#'Óָkr|~ލ̻g>gSHO \Aď9|#:3Ən#}BO)G/NiHO!tHLzWoPsWndTF4F.D#IJI% ^o182E(MWyo=']hQy X\Vt&s:Ç%kߪ.y o%hᏥ>]%װl~ OassD?sj'_&þﶓc{X\h^B?{NR3WW}ۊ?hNqMo3g=JDdg-y!qL%)ަC)S ʟDPJJz<>D+ pJnzu>ɇWc/|'[gY֐{=\~d*xO%INJp>Zt~10K 4xJe#a!YW#RЇYnGOԅ~${jzBj>AxG?|Вj1}ۯSW8@o'Obo],ъS^{K:aÓzg쓲98\}s΁?me?5t|B^̓૫ ^Gi=}$YKNp _~Kzve߉E @/>/g `j%9˘sbk)yh,ķa1|Fٿ¿c^SĞtfq@^yޮ G\9gZNr׻m\s^S)f?mwx3szmuxR>˨7|#bX|E,mըӱk+sK?A9Ɨg'- a7V: 4pE3Ӌ Y:y޳zofX.nG|(e~bc2ۙz/l C#s/m~B ~k/$3,WAa+b :17z5~q18Sx> eXP y3f~68Ӵ^>0[YfP=[[}D7:~xuzF%/5O>ae;OUy+%_7uWvy;mT_W2Hȗ a(' bM+OMGgK3!! Uཉ/|se片=A w8Oҧ %_,.(2B@:{T_#>ֿ^{>wË}s-\9͟]y^S1J}S <ÍzCwrT=_ WKJX_.AxH;K~6NXrzl \T /cdaSq_Gܞ%9Jy_r34ζ\QӯZ~i(<>W 'o*]z0V?GV= \~ۼᥜ M it3ck>$D>kc m~\I<4I1.}FF>\0R}z}YF$!RQ4 8H/z/!$˜W&L?g.+;Hn=D~NѷGg@/p}Oj9b[>Ƿze䞪+s1!xACƳoi>tYIZy߿fB#3t~F%ODs?|n==|~pVM9>|McS<^E7yx?*ki|dQ2{NS&ſA\D1>k"z?e=}wn&BνIs!̇?͟i76xW"|qmY|~ 7-us.w^:w,!hq6Jޱ|ι&/uw9&Wkt'ʰkϜbɑa] ,O7{3 O1o(`|wޘӁvwo]_cUW pE[3k! pao7^G=qcDŸJs{I6kl-],_|!^1篸I*SzgKQ& |UYat-&nL@F4 ^+ȼ2HOhr5 aZ:s Tw‡‡{~xql9%]]n{Ō͒h{F4\>WE/ :U֜zZ(U6Gih>蔩[ v&OeVoߞ\f~Z?}ֿ0NZ{6T^5(M+[̻Ν)}sx7ߌfs g3-E"Cs79s jak|JBt,2Irp,[$\ӁIin;l?gWh\c %Ib5j;9k76vWz bKMQ뱴ggcé\ ѣgŖUGoykGwj0e:#m=8Fv;蠚y}Q'sBG=+?#n_%&żZ /Ÿg3?ց'>Wȓ㤛ܼgKjv ͒?#秙s~p&r\?Gjc pgG= ңgtֻKF_5*GwTʘؗ8Vo\~c{I&esrhKQs`OmOvײ<4)F4Pg+Ɨ6<=,CSt0?ϳMlvӱ2C\]|A吆x/}x8Z&{[ 7_0ß?H ;/ಒ. ELoe$>z:E*N9+-O`% G͙sۊtmWC>^ t +a"ޯ|x|7H+9y^]Qp˹M\Lݍ/l?w˲?Y99+Yyåܔ"QeKCG5h,{:1)ewȩ"CZ9[0 >]+3ɗ ~FrWЧLtn"z¬/@OK| ظ酞bIGc?}c>2Y=N7_Ǖo:׬ }#7hy(|ѝeKy7t<Ⱥ_]Os~ƭ^ 2LJQm}ODpYH>:_:v|4uZo[ޭ#Q5[دMY0$?_^pͷ.Ώ$yifǛO_~">2wOB Cy#/XYk74n '?WOB?sFt]葭A$ӳX.H#+涃lE?5?;NA9JK1$:YWkyt&|At&SS'YJt9(City9Rͽ?YrD-/7IqI\-<\r%K>Uщ%_Y=_m~L77{}|] 1IL`ŭY3az!z[ȟ]5F1}O:|%u\Np57޲)Ob̻rp,`.{R/|KJr{ Yng =-|/-/D~2n? 9d~目z%O8bSMQYU;s[hACKԭV|~OϞz]O:q.oUwk?oU?ntAɽh쭶jmݥ7n;+cc̫5jrȫɰǥЫ{KˇGK %[ɝ}ڛnߋa~G4B?Sztj 7r.fЇt /9P^m9oa<=2r],Ǩ\^Ǔht3ۘ}M O7N=+[xn Zaׅw7ܳ!_ p[n~tUFV|dykH;MbΕWџuϵ]R pɔI&(C3:v/lαS 1sӽBv!tC.^{>|֏u}Pʽ#rߪ6{uI2 gHqEŲ#;\ Iз=3=%=-i#R͎ ~ǀ6~(`_.FLtLknVA0o0~a"͂FOAo4e{"J]fyr7ב}S,JC]Rs;s$9=M(^Gn)<_xX,/piމ<{_KJqi7H7W 'zv>b)W<\1/Z ϛ9ޭﱞ=nl{3&C?^ߣC$)zl<36U-KzϿ(=EߖyIkgIH=}~9\G jeCa|d~R0nrrCjH}Џmyp2Ϸ*}_vy-;QNoۈ^9@O,w|zzhk3`_Vuދ~_!0]': 7.^\;9Wy+;8v >')ȭ [*ALۗo>{ C<_m-HQUzc\y}}#|BμYA=l}ߜYj~4}EYPi _-K~v3.{Hk/sbU.Zjl|+dMD1Yp~= z~F[nN]A.Q3Fulq]DSdxgqX{x,3z= U[Nr)^&-s$_ >C92>TX?x0I'= cw4oa>4:4R.k}2@~ Fx||~ ˹wR)OuC󙕧Uz\X>q=8{|Vrv\h CdrAJJy0tY3hQ";7m? 5=&k6}*ɕrrb8Y4z-M9zr-0<ޗ(x뻼uӷv>?sygsc9X? c\2R<6O^W6҄'/G\[3ƣשF%>;ɼ`~hǙ?4V '=p,g>eOlQ ˙;3c}Q7WZp:n*e|@?_ O+Ki?=0:;74Έ| 3}1KܸZ|G?=xM7v7ftgJ p;ny>dݽ >~=ᥞvhu nď>2q|؆N1>}]1/J/I#tDLǞ罜pL罩~ Rk9j{oV>t%-|. #i ?jC?X,k޾c߫ū-=Y߲YW0arKǗٲss4?i+w ৣ_O 5U)λ.݃ZmS\5^MяF.]O=xu_|<{qΰ`Js޺k5{`9?aWh u[n91?8^R^yNxZp:zICxȋ2'_~9YNuyvL6=;ys{1wЄ^<=SFɩGT"! n z\m\p3Tyoϑ|{/Orx'9zr0rщ\nZ/&aNw&b)1r.KC亅-!3;Y?k< sP3G/f_$g:=Y{%M܏O2>z wCW̍CB[O4}3 Se|,<8/rq"rl7xه*%q|_}iG/sZ^XyN(|f9Jf'=6CI>.Hu#~3U˹S!5Rhgiep%= ' \`6toK{v[0{&?D>;TyNc9dx[z:*δ܂q,xnhJ.Ki Wok`st^fki +ћC8~SWH|"KOi_oS\dt7gZ!Kx|_iŗ))A.`2DhUZ{,rf?w!U 2zU*9ssVS|wH_w.8{nR/Z;R.W}E&jYι/vX,twkYOg;kdžh=|5|D<G?V7/}YZM4{']٣er?Awѿ .)V6џ9#VzA2? )g:wOnZy|E?d)ՅǜR>ROZr<4ĺ{m3B4jG'#ߦ@_q+G%/r W~H?Z J=mo!I/R':"lFWC/D[*Zۙ փ3_לϜ6b>ݵoYD_>vƗu;߀П+gfnGMуUKXV, 炙q:׎sY7?,8o[ZPnr5u~^q8N=}e~'>re/S'_Ximv/Sҵ(笷I 2(9ms4J>497|ZQ\W ib_N>[U.L8C[3$l!1>N]XV*=odGK.V s_ ~sX!ty)ط+୲}kE;= <65wxuU[}#s$Mo ӳ7):ҡ2Ε+MOZO>Wta|u30<pVLеI}1x Bo>qaV>f8{M|_9[#FZ7QC[x;%\& 5n~0Z_ o5| +~yW&d3r%#@B/Vq^$d}(G~M彫s|T8饵!ɍ)voNHϥ 󿎾n"?&=f՜O"^k]cYWowmDKEw(~_Y}Q?>4"YW~{yah0wG1tuW뢡 ߈=^= Fp!|gQÛ:^S7ln_ {\ +|ݳ/?)-|ڥ?y_}I/ё=R; ^f ݻ;h|8j +Uu0][ ގ6GeT 1vӼxoɘNf[}K ",EDD>^q X>N+H04z*t6/&t`k?v7f 8O(}%ֈQ|,n5=1_~&c]6K׎<)Z@w$g>"yR~O\;'-><0 w_V^2O-=dc§XpR7m_#Wkvkkgk+]8f5՛8Ms厫;~)q,zZܞ%I|qxECwKj_V?zX޶Zr\ p56;DV͟w?<逌G^D~j_O_j\aK=wm1~AosS*k\>2GT4{Mk>տAӑ351EGo@^?(Kr,G!|tC o.R*rl{ns+x_կz/zxWqϷb=I{{&ybXN|ګ;/U_u31}[V!:i$6Lg#Ó9l6_0=-̕s,G_ 9pq~>%r8ܼ'[IyPڥ7n'm(n2<|q7wY&GrSi6Kszq%bFZ`x?9:%Ɓx͐O̝cx _K*ћӗeKg'#V5||0|N-~ڳ_~eLzb׷}۫n:`g04}VOO^/ z)7z`Np9I|3E4ϼ (٬5倹9#։n>XNO k|!. :%)<4|/7 d=],W{Z~8Cax>t{/+%c}Q^O]UV xp'!{X#99Df'|G cYI1*zg1hzc1,z-.glf79"!;}m\eɟF.W_:Dr[SkM+Z>&r>ilegQ1Й8yT򮷻=OrO<9މA]yJkLCQ|=~U>[oݣS27#g>Uc}>+jz(zroC΂ҿ0U~'&bY˼}>;[[}t+/.zsE? `Gg V^WEA?f{x/$Г<[>X|͹‰ Vz90z-s Zۜ ?އyV~zKk۪vo`ڹPg\_mq=Wr%c<0zNkת}@XX}5I˸7XGzXxzdI?~栈AyNZ٧+驰Y%CoxKypQS|kyeS1i˷1i[v%'t\ל+n^ EgY ПyۀB)O5p(8}ւ^y|_[6XS!=:K%sJSrC4wKcr9> V^8e80eu3q4{s~ |75ӧ=ux&z꘿"?q|Bpr Z7~ aWz~ Z"s3=aR~}'ރ_\$nn3=c$]s?o\gFsͺwHWt*AqwJ/l>-OFxD{.8{) J>a;<&ɫhl 7ҧM߫;w8$N8ϷK|$>Qw"S沇/޿m/' &sOZCW s(<5&^:DP,+4n~{pn) 4^QK\\g\dI7 >Ldz-ߡt`]nD/ɬwחk_|#,/H3g>3< 3ЇNuxã6ӣ:WE5S ?-g? % j=S}y_$}xp!r{׃#1G f{i|.\eKpisFq=y\i#wJ_ax!+a 3zlR:0[&Y pJXXгy}!>G32Q[>G7>9nZ&' }|h8A+\ΊMg9[ę0IΝ7%]9{u[N4v?A97D''{w00]r?q7.o6m5ߕ}RarGƮjQx%k]Ce#=QBTOJ"{[nc)%3Mk; i> v̇+8prѕlNr?}kڙGYq< h∊JX*#ڢ -uQSVz֫3V;)Z@!I =MvfI}:2m,fw|"n)v6cP?k~KzS$/;AK/|qR5^(CA3aƩ~V(x*3?`4J ?͜1͟ zg$2e\Ξ)PGl ~Lc"G4DzwRd OLdI>].7urt>X=^纳~E%>#ZArxRi'g_| +2],8*yC;7PxUYAd#(Fb] rȕfOg 0}0̷k Oݤt ˛[?\zp?xs^xE3_$ؤy{Qď?A-H7~=A.p^>/8˳O!4M_ RJM7<@l}逇u9_Pgj{1~~msz5 j%l|&tq/`k( / `ѪSy-~^ f)w8%F/Cz7G*Q9#̰H`|Rt]>K |:bh/^R_<;#+ܒY̿xtC蓳/񭒤3h+ʲ=R3e]N><$f6y|.]r G[_?uIrc>˙4ui@V-'Q@iJ9wl {ݤG?xj9LOo_$Gm`60I \>k>w§%6VƉVݻ0z]ɓjaML){G[w+zg!zM#bM;urcm0_n1꿘Z>"ﴀn Kc|xk,d^Bo5r玈%r7ѽ<&wpzO].-|*Ԃ+>Ǻ^Ye rf_(M[2)C`Lz[[q -Om8=3?k>m ou)Qi[7xZB|Y[ wm}& y|_#gG> rs{#Ʃs}vOۊnw |}myt;`Uf /B7r ^x{x(+H^pG|b3DCt [-J+&yl_ˇPJV;kR(P|U._XW'n9C zLAN1(y[ [:}L}.TN,pieE&Cu[wÛOQa=G^&\C#~$3zƁ~iz ==]1} ?veMi}v㲚/5>`ox_wm{NGiC9~`ϡ^Mu:07vƉ/`rd%NK2IL)tg5O:." 4 smY`L#(%z-9Bv4 r</ju!,󃤭rp+UOR&t7>޼ѓ0'iZ=8.EniɸY< .iM^|*n7 cN^t ﺼtMaP72F#`>?W֭Ԅ?L7!w~tcApx}w fg ~z鯒iWS ^q>2݈廲&mF{Ͻ|d;V]=1 rx4L/FׯZ?k3i&S4k3_zP[4c[ͷ->xwvM>vNIX^$W]X`5yOX#sߙýJ;yfmFgTEke^xDr4?a!וi ~xat㊄5.WxI?OWe%~~|Yw[s>"|ʜ~r N9~.Q08`J-Jkq:}:|X76^Dn33;xGZ)=^pFxA)SǗ.b9*_ӝ- 1>r_$k }lpꜿC>D/o:'$FM ~u5G[}8y:^G1B <6MRd۩~iY8S3mO?֝jj%} `!u ~"|QFOa 9}$eYO%wpLmSķH'}Z|%OŮIzzY<?݀GkQ v}||-vP>x G]/x?ܗ%GNu˞Qj;t|J#X@8V;~R!"ɇP}{M/LnGzj ɖ7=W .)ćΓ_pi?V %}'J}X7K38vOwxlYߣ~e~;eu4;7u?6pc/Mo]=yw,_:O$y XbMC wy2ٟI':Fa雴Ps%_2JEgV<y|~\0ίTû 1[n`tO4xWh!feO]_Z߫{V/Gew9lsK/Kqsu\ p a_^zx/ϥ>_܀\?^R߀N//{'GuL-?ɣ7zMH.$ Qg% oGr~ _Z>*~ӡQ^Vtv6jw/s5^!-JZ!b+VSWWmu>GC| :.:Ŝo9e WIf;86Nqg0M(,l19sI'ko)))_+'g]M '5Pc,UZ-wx$΢{cuy?j6Όm?IVڼd>Zu:Bx?1r*o|Hga~n" 94K@H%Gaxw~sb> ܟ8U4yY'E͚t~vzIo&?^nInҀR젮F.uw8Tż`9̕ԝbsr}[O#g^V w:|> }6| NQ!$x_>ǫՍOSxgNDeøHc DEϞ@|%BNmrb(֥𳛹 y1 {3nPK—L3{Qc)a|ѧEm;`M&qxC.P*Hˍy/:mvC\r鋣>旿m.֧ &A'mgdy;+b>5ѶV3&=oozͧQW\O-|2r 9/99sjy {b)S׼?.J&.ou6.ߣֽh}!xD? FG#I<#xMѾG'y<x}b;7ǡ}I/w;_#y}s?˟y@}>o^1zg(>= library("glmnet") library("survival") load("VignetteExample.rdata") attach(patient.data) @ We then call our functions to fit with the lasso penalty ($\alpha=1$), and cross validate. We set {\tt maxit = 1000} (increasing the maximum number of iterations to $1000$) because our data is relatively high dimensional, so more iterations are needed for convergence. In practice, the function will spit out an error if convergence isn't reached by the maximum number of iterations. <<>>= cv.fit <- cv.glmnet(x, Surv(time, status), family="cox", maxit = 1000) fit <- glmnet(x, Surv(time,status), family = "cox", maxit = 1000) @ The {\tt Surv} function packages the survival data into the form expected by glmnet. Once fit, we can view the optimal $\lambda$ value and a cross validated error plot to help evaluate our model. \begin{center} \setkeys{Gin}{width = 3 in} <>= plot(cv.fit) @ \end{center} <<>>= cv.fit$lambda.min @ The left vertical line in our plot shows us where the CV-error curve hits its minimum. The right vertical line shows us the most regularized model with CV-error within $1$ standard deviation of the minimum. In this case, we see that the minimum was achieved by a fairly regularized model, however the right line indicates that the null model (no coefficients included) is within $1$ sd of the minimum. This might lead us to believe that in actuality the covariates are not explaining any variability. For the time being we will concern ourselves with the minimum CV-error model. We can check which covariates our model chose to be active, and see the coefficients of those covariates. <<>>= Coefficients <- coef(fit, s = cv.fit$lambda.min) Active.Index <- which(Coefficients != 0) Active.Coefficients <- Coefficients[Active.Index] @ {\tt coef(fit, s = cv.fit\$lambda.min)} returns the $p$ length coefficient vector of the solution corresponding to $\lambda = ${\tt cv.fit\$lambda.min}. <<>>= Active.Index Active.Coefficients @ We see that our optimal model chose 2 active covariates ($X80$ and $X394$) each with a small positive effect on hazard. \end{document} glmnet/vignettes/glmnet_beta.Rmd0000644000176200001440000015176313154602476016522 0ustar liggesusers--- output: pdf_document --- # Glmnet Vignette ### Trevor Hastie and Junyang Qian #### Stanford September 13, 2016 > [Introduction](#intro) > [Installation](#install) > [Quick Start](#qs) > [Linear Regression](#lin) > [Logistic Regression](#log) > [Poisson Models](#poi) > [Cox Models](#cox) > [Sparse Matrices](#spa) > [Appendix 0: Convergence Criteria](#con) > [Appendix 1: Internal Parameters](#int) > [Appendix 2: Comparison with Otherther Packages](#cmp) ## Introduction Glmnet is a package that fits a generalized linear model via penalized maximum likelihood. The regularization path is computed for the lasso or elasticnet penalty at a grid of values for the regularization parameter lambda. The algorithm is extremely fast, and can exploit sparsity in the input matrix `x`. It fits linear, logistic and multinomial, poisson, and Cox regression models. A variety of predictions can be made from the fitted models. It can also fit multi-response linear regression. The authors of glmnet are Jerome Friedman, Trevor Hastie, Rob Tibshirani and Noah Simon, and the R package is maintained by Trevor Hastie. The matlab version of glmnet is maintained by Junyang Qian. This vignette describes the usage of glmnet in R. `glmnet` solves the following problem $$ \min_{\beta_0,\beta} \frac{1}{N} \sum_{i=1}^{N} w_i l(y_i,\beta_0+\beta^T x_i) + \lambda\left[(1-\alpha)||\beta||_2^2/2 + \alpha ||\beta||_1\right], $$ over a grid of values of $\lambda$ covering the entire range. Here $l(y,\eta)$ is the negative log-likelihood contribution for observation $i$; e.g. for the Gaussian case it is $\frac{1}{2}(y-\eta)^2$. The _elastic-net_ penalty is controlled by $\alpha$, and bridges the gap between lasso ($\alpha=1$, the default) and ridge ($\alpha=0$). The tuning parameter $\lambda$ controls the overall strength of the penalty. It is known that the ridge penalty shrinks the coefficients of correlated predictors towards each other while the lasso tends to pick one of them and discard the others. The elastic-net penalty mixes these two; if predictors are correlated in groups, an $\alpha=0.5$ tends to select the groups in or out together. This is a higher level parameter, and users might pick a value upfront, else experiment with a few different values. One use of $\alpha$ is for numerical stability; for example, the elastic net with $\alpha = 1 - \epsilon$ for some small $\epsilon > 0$ performs much like the lasso, but removes any degeneracies and wild behavior caused by extreme correlations. The `glmnet` algorithms use cyclical coordinate descent, which successively optimizes the objective function over each parameter with others fixed, and cycles repeatedly until convergence. The package also makes use of the strong rules for efficient restriction of the active set. Due to highly efficient updates and techniques such as warm starts and active-set convergence, our algorithms can compute the solution path very fast. The code can handle sparse input-matrix formats, as well as range constraints on coefficients. The core of `glmnet` is a set of fortran subroutines, which make for very fast execution. The package also includes methods for prediction and plotting, and a function that performs K-fold cross-validation. ## Installation Like many other R packages, the simplest way to obtain `glmnet` is to install it directly from CRAN. Type the following command in R console: ```{r, eval=FALSE} install.packages("glmnet", repos = "https://cran.us.r-project.org") ``` Users may change the `repos` options depending on their locations and preferences. Other options such as the directories where to install the packages can be altered in the command. For more details, see `help(install.packages)`. Here the R package has been downloaded and installed to the default directories. Alternatively, users can download the package source at https://cran.r-project.org/package=glmnet and type Unix commands to install it to the desired location. [Back to Top](#top) ## Quick Start The purpose of this section is to give users a general sense of the package, including the components, what they do and some basic usage. We will briefly go over the main functions, see the basic operations and have a look at the outputs. Users may have a better idea after this section what functions are available, which one to choose, or at least where to seek help. More details are given in later sections. First, we load the `glmnet` package: ```{r} library(glmnet) ``` The default model used in the package is the Guassian linear model or "least squares", which we will demonstrate in this section. We load a set of data created beforehand for illustration. Users can either load their own data or use those saved in the workspace. ```{r} data(QuickStartExample) ``` The command loads an input matrix `x` and a response vector `y` from this saved R data archive. We fit the model using the most basic call to `glmnet`. ```{r} fit = glmnet(x, y) ``` "fit" is an object of class `glmnet` that contains all the relevant information of the fitted model for further use. We do not encourage users to extract the components directly. Instead, various methods are provided for the object such as `plot`, `print`, `coef` and `predict` that enable us to execute those tasks more elegantly. We can visualize the coefficients by executing the `plot` function: ```{r} plot(fit) ``` Each curve corresponds to a variable. It shows the path of its coefficient against the $\ell_1$-norm of the whole coefficient vector at as $\lambda$ varies. The axis above indicates the number of nonzero coefficients at the current $\lambda$, which is the effective degrees of freedom (_df_) for the lasso. Users may also wish to annotate the curves; this can be done by setting `label = TRUE` in the plot command. A summary of the `glmnet` path at each step is displayed if we just enter the object name or use the `print` function: ```{r height = 4} print(fit) ``` It shows from left to right the number of nonzero coefficients (`Df`), the percent (of null) deviance explained (`%dev`) and the value of $\lambda$ (`Lambda`). Although by default `glmnet` calls for 100 values of `lambda` the program stops early if `%dev% does not change sufficently from one lambda to the next (typically near the end of the path.) We can obtain the actual coefficients at one or more $\lambda$'s within the range of the sequence: ```{r} coef(fit,s=0.1) ``` (why `s` and not `lambda`? In case later we want to allow one to specify the model size in other ways.) Users can also make predictions at specific $\lambda$'s with new input data: ```{r} nx = matrix(rnorm(10*20),10,20) predict(fit,newx=nx,s=c(0.1,0.05)) ``` The function `glmnet` returns a sequence of models for the users to choose from. In many cases, users may prefer the software to select one of them. Cross-validation is perhaps the simplest and most widely used method for that task. `cv.glmnet` is the main function to do cross-validation here, along with various supporting methods such as plotting and prediction. We still act on the sample data loaded before. ```{r} cvfit = cv.glmnet(x, y) ``` `cv.glmnet` returns a `cv.glmnet` object, which is "cvfit" here, a list with all the ingredients of the cross-validation fit. As for `glmnet`, we do not encourage users to extract the components directly except for viewing the selected values of $\lambda$. The package provides well-designed functions for potential tasks. We can plot the object. ```{r} plot(cvfit) ``` It includes the cross-validation curve (red dotted line), and upper and lower standard deviation curves along the $\lambda$ sequence (error bars). Two selected $\lambda$'s are indicated by the vertical dotted lines (see below). We can view the selected $\lambda$'s and the corresponding coefficients. For example, ```{r} cvfit$lambda.min ``` `lambda.min` is the value of $\lambda$ that gives minimum mean cross-validated error. The other $\lambda$ saved is `lambda.1se`, which gives the most regularized model such that error is within one standard error of the minimum. To use that, we only need to replace `lambda.min` with `lambda.1se` above. ```{r} coef(cvfit, s = "lambda.min") ``` Note that the coefficients are represented in the sparse matrix format. The reason is that the solutions along the regularization path are often sparse, and hence it is more efficient in time and space to use a sparse format. If you prefer non-sparse format, pipe the output through `as.matrix()`. Predictions can be made based on the fitted `cv.glmnet` object. Let's see a toy example. ```{r} predict(cvfit, newx = x[1:5,], s = "lambda.min") ``` `newx` is for the new input matrix and `s`, as before, is the value(s) of $\lambda$ at which predictions are made. That is the end of `glmnet` 101. With the tools introduced so far, users are able to fit the entire elastic net family, including ridge regression, using squared-error loss. In the package, there are many more options that give users a great deal of flexibility. To learn more, move on to later sections. [Back to Top](#top) ## Linear Regression Linear regression here refers to two families of models. One is `gaussian`, the Gaussian family, and the other is `mgaussian`, the multiresponse Gaussian family. We first discuss the ordinary Gaussian and the multiresponse one after that. ### Gaussian Family `gaussian ` is the default family option in the function `glmnet`. Suppose we have observations $x_i \in \mathbb{R}^p$ and the responses $y_i \in \mathbb{R}, i = 1, \ldots, N$. The objective function for the Gaussian family is $$ \min_{(\beta_0, \beta) \in \mathbb{R}^{p+1}}\frac{1}{2N} \sum_{i=1}^N (y_i -\beta_0-x_i^T \beta)^2+\lambda \left[ (1-\alpha)||\beta||_2^2/2 + \alpha||\beta||_1\right], $$ where $\lambda \geq 0$ is a complexity parameter and $0 \leq \alpha \leq 1$ is a compromise between ridge ($\alpha = 0$) and lasso ($\alpha = 1$). Coordinate descent is applied to solve the problem. Specifically, suppose we have current estimates $\tilde{\beta_0}$ and $\tilde{\beta}_\ell$ $\forall j\in 1,]\ldots,p$. By computing the gradient at $\beta_j = \tilde{\beta}_j$ and simple calculus, the update is $$ \tilde{\beta}_j \leftarrow \frac{S(\frac{1}{N}\sum_{i=1}^N x_{ij}(y_i-\tilde{y}_i^{(j)}),\lambda \alpha)}{1+\lambda(1-\alpha)}, $$ where $\tilde{y}_i^{(j)} = \tilde{\beta}_0 + \sum_{\ell \neq j} x_{i\ell} \tilde{\beta}_\ell$, and $S(z, \gamma)$ is the soft-thresholding operator with value $\text{sign}(z)(|z|-\gamma)_+$. This formula above applies when the `x` variables are standardized to have unit variance (the default); it is slightly more complicated when they are not. Note that for "family=gaussian", `glmnet` standardizes $y$ to have unit variance before computing its lambda sequence (and then unstandardizes the resulting coefficients); if you wish to reproduce/compare results with other software, best to supply a standardized $y$ first (Using the "1/N" variance formula). `glmnet` provides various options for users to customize the fit. We introduce some commonly used options here and they can be specified in the `glmnet` function. * `alpha` is for the elastic-net mixing parameter $\alpha$, with range $\alpha \in [0,1]$. $\alpha = 1$ is the lasso (default) and $\alpha = 0$ is the ridge. * `weights` is for the observation weights. Default is 1 for each observation. (Note: `glmnet` rescales the weights to sum to N, the sample size.) * `nlambda` is the number of $\lambda$ values in the sequence. Default is 100. * `lambda` can be provided, but is typically not and the program constructs a sequence. When automatically generated, the $\lambda$ sequence is determined by `lambda.max` and `lambda.min.ratio`. The latter is the ratio of smallest value of the generated $\lambda$ sequence (say `lambda.min`) to `lambda.max`. The program then generated `nlambda` values linear on the log scale from `lambda.max` down to `lambda.min`. `lambda.max` is not given, but easily computed from the input $x$ and $y$; it is the smallest value for `lambda` such that all the coefficients are zero. For `alpha=0` (ridge) `lambda.max` would be $\infty$; hence for this case we pick a value corresponding to a small value for `alpha` close to zero.) * `standardize` is a logical flag for `x` variable standardization, prior to fitting the model sequence. The coefficients are always returned on the original scale. Default is `standardize=TRUE`. For more information, type `help(glmnet)` or simply `?glmnet`. As an example, we set $\alpha = 0.2$ (more like a ridge regression), and give double weights to the latter half of the observations. To avoid too long a display here, we set `nlambda` to 20. In practice, however, the number of values of $\lambda$ is recommended to be 100 (default) or more. In most cases, it does not come with extra cost because of the warm-starts used in the algorithm, and for nonlinear models leads to better convergence properties. ```{r} fit = glmnet(x, y, alpha = 0.2, weights = c(rep(1,50),rep(2,50)), nlambda = 20) ``` We can then print the `glmnet` object. ```{r} print(fit) ``` This displays the call that produced the object `fit` and a three-column matrix with columns `Df` (the number of nonzero coefficients), `%dev` (the percent deviance explained) and `Lambda` (the corresponding value of $\lambda$). (Note that the `digits` option can used to specify significant digits in the printout.) Here the actual number of $\lambda$'s here is less than specified in the call. The reason lies in the stopping criteria of the algorithm. According to the default internal settings, the computations stop if either the fractional change in deviance down the path is less than $10^{-5}$ or the fraction of explained deviance reaches $0.999$. From the last few lines , we see the fraction of deviance does not change much and therefore the computation ends when meeting the stopping criteria. We can change such internal parameters. For details, see the Appendix section or type `help(glmnet.control)`. We can plot the fitted object as in the previous section. There are more options in the `plot` function. Users can decide what is on the X-axis. `xvar` allows three measures: "norm" for the $\ell_1$-norm of the coefficients (default), "lambda" for the log-lambda value and "dev" for %deviance explained. Users can also label the curves with variable sequence numbers simply by setting `label = TRUE`. Let's plot "fit" against the log-lambda value and with each curve labeled. ```{r} plot(fit, xvar = "lambda", label = TRUE) ``` Now when we plot against %deviance we get a very different picture. This is percent deviance explained on the training data. What we see here is that toward the end of the path this value are not changing much, but the coefficients are "blowing up" a bit. This lets us focus attention on the parts of the fit that matter. This will especially be true for other models, such as logistic regression. ```{r} plot(fit, xvar = "dev", label = TRUE) ``` We can extract the coefficients and make predictions at certain values of $\lambda$. Two commonly used options are: * `s` specifies the value(s) of $\lambda$ at which extraction is made. * `exact` indicates whether the exact values of coefficients are desired or not. That is, if `exact = TRUE`, and predictions are to be made at values of `s` not included in the original fit, these values of `s` are merged with `object$lambda`, and the model is refit before predictions are made. If `exact=FALSE` (default), then the predict function uses linear interpolation to make predictions for values of `s` that do not coincide with lambdas used in the fitting algorithm. A simple example is: ```{r} fit = glmnet(x, y) any(fit$lambda == 0.5) coef.apprx = coef(fit, s = 0.5, exact = FALSE) coef.exact = coef(fit, s = 0.5, exact = TRUE, x=x, y=y) cbind2(coef.exact, coef.apprx) ``` The left column is for `exact = TRUE` and the right for `FALSE`. We see from the above that 0.5 is not in the sequence and that hence there are some difference, though not much. Linear interpolation is mostly enough if there are no special requirements. Notice that with `exact=TRUE` we have to supply by named argument any data that was used in creating the original fit, in this case `x` and `y`. Users can make predictions from the fitted object. In addition to the options in `coef`, the primary argument is `newx`, a matrix of new values for `x`. The `type` option allows users to choose the type of prediction: * "link" gives the fitted values * "response" the sames as "link" for "gaussian" family. * "coefficients" computes the coefficients at values of `s` * "nonzero" retuns a list of the indices of the nonzero coefficients for each value of `s`. For example, ```{r} predict(fit, newx = x[1:5,], type = "response", s = 0.05) ``` gives the fitted values for the first 5 observations at $\lambda = 0.05$. If multiple values of `s` are supplied, a matrix of predictions is produced. Users can customize K-fold cross-validation. In addition to all the `glmnet` parameters, `cv.glmnet` has its special parameters including `nfolds` (the number of folds), `foldid` (user-supplied folds), `type.measure`(the loss used for cross-validation): * "deviance" or "mse" uses squared loss * "mae" uses mean absolute error As an example, ```{r} cvfit = cv.glmnet(x, y, type.measure = "mse", nfolds = 20) ``` does 20-fold cross-validation, based on mean squared error criterion (default though). Parallel computing is also supported by `cv.glmnet`. To make it work, users must register parallel beforehand. We give a simple example of comparison here. Unfortunately, the package `doMC` is not available on Windows platforms (it is on others), so we cannot run the code here, but we make it looks as if we have. ```{r, eval=FALSE} require(doMC) registerDoMC(cores=2) X = matrix(rnorm(1e4 * 200), 1e4, 200) Y = rnorm(1e4) ``` ```{r, eval=FALSE} system.time(cv.glmnet(X, Y)) ``` ```{r, echo=FALSE} structure(c(2.44, 0.08, 2.518, 0, 0), class = "proc_time", .Names = c("user.self", "sys.self", "elapsed", "user.child", "sys.child")) ``` ```{r, eval=FALSE} system.time(cv.glmnet(X, Y, parallel = TRUE)) ``` ```{r, echo=FALSE} structure(c(0.508999999999999, 0.057, 1.56699999999999, 1.941, 0.1), class = "proc_time", .Names = c("user.self", "sys.self", "elapsed", "user.child", "sys.child")) ``` As suggested from the above, parallel computing can significantly speed up the computation process especially for large-scale problems. Functions `coef` and `predict` on cv.glmnet object are similar to those for a `glmnet` object, except that two special strings are also supported by `s` (the values of $\lambda$ requested): * "lambda.1se": the largest $\lambda$ at which the MSE is within one standard error of the minimal MSE. * "lambda.min": the $\lambda$ at which the minimal MSE is achieved. ```{r} cvfit$lambda.min coef(cvfit, s = "lambda.min") predict(cvfit, newx = x[1:5,], s = "lambda.min") ``` Users can control the folds used. Here we use the same folds so we can also select a value for $\alpha$. ```{r} foldid=sample(1:10,size=length(y),replace=TRUE) cv1=cv.glmnet(x,y,foldid=foldid,alpha=1) cv.5=cv.glmnet(x,y,foldid=foldid,alpha=.5) cv0=cv.glmnet(x,y,foldid=foldid,alpha=0) ``` There are no built-in plot functions to put them all on the same plot, so we are on our own here: ```{r} par(mfrow=c(2,2)) plot(cv1);plot(cv.5);plot(cv0) plot(log(cv1$lambda),cv1$cvm,pch=19,col="red",xlab="log(Lambda)",ylab=cv1$name) points(log(cv.5$lambda),cv.5$cvm,pch=19,col="grey") points(log(cv0$lambda),cv0$cvm,pch=19,col="blue") legend("topleft",legend=c("alpha= 1","alpha= .5","alpha 0"),pch=19,col=c("red","grey","blue")) ``` We see that lasso (`alpha=1`) does about the best here. We also see that the range of lambdas used differs with alpha. #### Coefficient upper and lower bounds These are recently added features that enhance the scope of the models. Suppose we want to fit our model, but limit the coefficients to be bigger than -0.7 and less than 0.5. This is easily achieved via the `upper.limits` and `lower.limits` arguments: ```{r} tfit=glmnet(x,y,lower=-.7,upper=.5) plot(tfit) ``` These are rather arbitrary limits; often we want the coefficients to be positive, so we can set only `lower.limit` to be 0. (Note, the lower limit must be no bigger than zero, and the upper limit no smaller than zero.) These bounds can be a vector, with different values for each coefficient. If given as a scalar, the same number gets recycled for all. #### Penalty factors This argument allows users to apply separate penalty factors to each coefficient. Its default is 1 for each parameter, but other values can be specified. In particular, any variable with `penalty.factor` equal to zero is not penalized at all! Let $v_j$ denote the penalty factor for $j$ th variable. The penalty term becomes $$ \lambda \sum_{j=1}^p \boldsymbol{v_j} P_\alpha(\beta_j) = \lambda \sum_{j=1}^p \boldsymbol{v_j} \left[ (1-\alpha)\frac{1}{2} \beta_j^2 + \alpha |\beta_j| \right]. $$ Note the penalty factors are internally rescaled to sum to nvars. This is very useful when people have prior knowledge or preference over the variables. In many cases, some variables may be so important that one wants to keep them all the time, which can be achieved by setting corresponding penalty factors to 0: ```{r} p.fac = rep(1, 20) p.fac[c(5, 10, 15)] = 0 pfit = glmnet(x, y, penalty.factor = p.fac) plot(pfit, label = TRUE) ``` We see from the labels that the three variables with 0 penalty factors always stay in the model, while the others follow typical regularization paths and shrunken to 0 eventually. Some other useful arguments. `exclude` allows one to block certain variables from being the model at all. Of course, one could simply subset these out of `x`, but sometimes `exclude` is more useful, since it returns a full vector of coefficients, just with the excluded ones set to zero. There is also an `intercept` argument which defaults to `TRUE`; if `FALSE` the intercept is forced to be zero. #### Customizing plots Sometimes, especially when the number of variables is small, we want to add variable labels to a plot. Since `glmnet` is intended primarily for wide data, this is not supprted in `plot.glmnet`. However, it is easy to do, as the following little toy example shows. We first generate some data, with 10 variables, and for lack of imagination and ease we give them simple character names. We then fit a glmnet model, and make the standard plot. ```{r} set.seed(101) x=matrix(rnorm(1000),100,10) y=rnorm(100) vn=paste("var",1:10) fit=glmnet(x,y) plot(fit) ``` We wish to label the curves with the variable names. Here s a simple way to do this, using the `axis` command in R (and a little research into how to customize it). We need to have the positions of the coefficients at the end of the path, and we need to make some space using the `par` command, so that our labels will fit in. This requires knowing how long your labels are, but here they are all quite short. ```{r} par(mar=c(4.5,4.5,1,4)) plot(fit) vnat=coef(fit) vnat=vnat[-1,ncol(vnat)] # remove the intercept, and get the coefficients at the end of the path axis(4, at=vnat,line=-.5,label=vn,las=1,tick=FALSE, cex.axis=0.5) ``` We have done nothing here to avoid overwriting of labels, in the event that they are close together. This would be a bit more work, but perhaps best left alone, anyway. ### Multiresponse Gaussian Family The multiresponse Gaussian family is obtained using `family = "mgaussian"` option in `glmnet`. It is very similar to the single-response case above. This is useful when there are a number of (correlated) responses - the so-called "multi-task learning" problem. Here the sharing involves which variables are selected, since when a variable is selected, a coefficient is fit for each response. Most of the options are the same, so we focus here on the differences with the single response model. Obviously, as the name suggests, $y$ is not a vector, but a matrix of quantitative responses in this section. The coefficients at each value of lambda are also a matrix as a result. Here we solve the following problem: $$ \min_{(\beta_0, \beta) \in \mathbb{R}^{(p+1)\times K}}\frac{1}{2N} \sum_{i=1}^N ||y_i -\beta_0-\beta^T x_i||^2_F+\lambda \left[ (1-\alpha)||\beta||_F^2/2 + \alpha\sum_{j=1}^p||\beta_j||_2\right]. $$ Here $\beta_j$ is the jth row of the $p\times K$ coefficient matrix $\beta$, and we replace the absolute penalty on each single coefficient by a group-lasso penalty on each coefficient K-vector $\beta_j$ for a single predictor $x_j$. We use a set of data generated beforehand for illustration. ```{r} data(MultiGaussianExample) ``` We fit the data, with an object "mfit" returned. ```{r} mfit = glmnet(x, y, family = "mgaussian") ``` For multiresponse Gaussian, the options in `glmnet` are almost the same as the single-response case, such as `alpha`, `weights`, `nlambda`, `standardize`. A exception to be noticed is that `standardize.response` is only for `mgaussian` family. The default value is `FALSE`. If `standardize.response = TRUE`, it standardizes the response variables. To visualize the coefficients, we use the `plot` function. ```{r} plot(mfit, xvar = "lambda", label = TRUE, type.coef = "2norm") ``` Note that we set `type.coef = "2norm"`. Under this setting, a single curve is plotted per variable, with value equal to the $\ell_2$ norm. The default setting is `type.coef = "coef"`, where a coefficient plot is created for each response (multiple figures). `xvar` and `label` are two other options besides ordinary graphical parameters. They are the same as the single-response case. We can extract the coefficients at requested values of $\lambda$ by using the function `coef` and make predictions by `predict`. The usage is similar and we only provide an example of `predict` here. ```{r} predict(mfit, newx = x[1:5,], s = c(0.1, 0.01)) ``` The prediction result is saved in a three-dimensional array with the first two dimensions being the prediction matrix for each response variable and the third indicating the response variables. We can also do k-fold cross-validation. The options are almost the same as the ordinary Gaussian family and we do not expand here. ```{r} cvmfit = cv.glmnet(x, y, family = "mgaussian") ``` We plot the resulting `cv.glmnet` object "cvmfit". ```{r} plot(cvmfit) ``` To show explicitly the selected optimal values of $\lambda$, type ```{r} cvmfit$lambda.min cvmfit$lambda.1se ``` As before, the first one is the value at which the minimal mean squared error is achieved and the second is for the most regularized model whose mean squared error is within one standard error of the minimal. Prediction for `cv.glmnet` object works almost the same as for `glmnet` object. We omit the details here. [Back to Top](#top) ## Logistic Regression Logistic regression is another widely-used model when the response is categorical. If there are two possible outcomes, we use the binomial distribution, else we use the multinomial. ### Binomial Models For the binomial model, suppose the response variable takes value in $\mathcal{G}=\{1,2\}$. Denote $y_i = I(g_i=1)$. We model $$\mbox{Pr}(G=2|X=x)=\frac{e^{\beta_0+\beta^Tx}}{1+e^{\beta_0+\beta^Tx}},$$ which can be written in the following form $$\log\frac{\mbox{Pr}(G=2|X=x)}{\mbox{Pr}(G=1|X=x)}=\beta_0+\beta^Tx,$$ the so-called "logistic" or log-odds transformation. The objective function for the penalized logistic regression uses the negative binomial log-likelihood, and is $$ \min_{(\beta_0, \beta) \in \mathbb{R}^{p+1}} -\left[\frac{1}{N} \sum_{i=1}^N y_i \cdot (\beta_0 + x_i^T \beta) - \log (1+e^{(\beta_0+x_i^T \beta)})\right] + \lambda \big[ (1-\alpha)||\beta||_2^2/2 + \alpha||\beta||_1\big]. $$ Logistic regression is often plagued with degeneracies when $p > N$ and exhibits wild behavior even when $N$ is close to $p$; the elastic-net penalty alleviates these issues, and regularizes and selects variables as well. Our algorithm uses a quadratic approximation to the log-likelihood, and then coordinate descent on the resulting penalized weighted least-squares problem. These constitute an outer and inner loop. For illustration purpose, we load pre-generated input matrix `x` and the response vector `y` from the data file. ```{r} data(BinomialExample) ``` The input matrix $x$ is the same as other families. For binomial logistic regression, the response variable $y$ should be either a factor with two levels, or a two-column matrix of counts or proportions. Other optional arguments of `glmnet` for binomial regression are almost same as those for Gaussian family. Don't forget to set `family` option to "binomial". ```{r} fit = glmnet(x, y, family = "binomial") ``` Like before, we can print and plot the fitted object, extract the coefficients at specific $\lambda$'s and also make predictions. For plotting, the optional arguments such as `xvar` and `label` are similar to the Gaussian. We plot against the deviance explained and show the labels. ```{r} plot(fit, xvar = "dev", label = TRUE) ``` Prediction is a little different for logistic from Gaussian, mainly in the option `type`. "link" and "response" are never equivalent and "class" is only available for logistic regression. In summary, * "link" gives the linear predictors * "response" gives the fitted probabilities * "class" produces the class label corresponding to the maximum probability. * "coefficients" computes the coefficients at values of `s` * "nonzero" retuns a list of the indices of the nonzero coefficients for each value of `s`. For "binomial" models, results ("link", "response", "coefficients", "nonzero") are returned only for the class corresponding to the second level of the factor response. In the following example, we make prediction of the class labels at $\lambda = 0.05, 0.01$. ```{r} predict(fit, newx = x[1:5,], type = "class", s = c(0.05, 0.01)) ``` For logistic regression, `cv.glmnet` has similar arguments and usage as Gaussian. `nfolds`, `weights`, `lambda`, `parallel` are all available to users. There are some differences in `type.measure`: "deviance" and "mse" do not both mean squared loss and "class" is enabled. Hence, * "mse" uses squared loss. * "deviance" uses actual deviance. * "mae" uses mean absolute error. * "class" gives misclassification error. * "auc" (for two-class logistic regression ONLY) gives area under the ROC curve. For example, ```{r} cvfit = cv.glmnet(x, y, family = "binomial", type.measure = "class") ``` It uses misclassification error as the criterion for 10-fold cross-validation. We plot the object and show the optimal values of $\lambda$. ```{r} plot(cvfit) ``` ```{r} cvfit$lambda.min cvfit$lambda.1se ``` `coef` and `predict` are simliar to the Gaussian case and we omit the details. We review by some examples. ```{r} coef(cvfit, s = "lambda.min") ``` As mentioned previously, the results returned here are only for the second level of the factor response. ```{r} predict(cvfit, newx = x[1:10,], s = "lambda.min", type = "class") ``` Like other GLMs, glmnet allows for an "offset". This is a fixed vector of N numbers that is added into the linear predictor. For example, you may have fitted some other logistic regression using other variables (and data), and now you want to see if the present variables can add anything. So you use the predicted logit from the other model as an offset in. ### Multinomial Models For the multinomial model, suppose the response variable has $K$ levels ${\cal G}=\{1,2,\ldots,K\}$. Here we model $$\mbox{Pr}(G=k|X=x)=\frac{e^{\beta_{0k}+\beta_k^Tx}}{\sum_{\ell=1}^Ke^{\beta_{0\ell}+\beta_\ell^Tx}}.$$ Let ${Y}$ be the $N \times K$ indicator response matrix, with elements $y_{i\ell} = I(g_i=\ell)$. Then the elastic-net penalized negative log-likelihood function becomes $$ \ell(\{\beta_{0k},\beta_{k}\}_1^K) = -\left[\frac{1}{N} \sum_{i=1}^N \Big(\sum_{k=1}^Ky_{il} (\beta_{0k} + x_i^T \beta_k)- \log \big(\sum_{k=1}^K e^{\beta_{0k}+x_i^T \beta_k}\big)\Big)\right] +\lambda \left[ (1-\alpha)||\beta||_F^2/2 + \alpha\sum_{j=1}^p||\beta_j||_q\right]. $$ Here we really abuse notation! $\beta$ is a $p\times K$ matrix of coefficients. $\beta_k$ refers to the kth column (for outcome category k), and $\beta_j$ the jth row (vector of K coefficients for variable j). The last penalty term is $||\beta_j||_q$, we have two options for q: $q\in \{1,2\}$. When q=1, this is a lasso penalty on each of the parameters. When q=2, this is a grouped-lasso penalty on all the K coefficients for a particular variables, which makes them all be zero or nonzero together. The standard Newton algorithm can be tedious here. Instead, we use a so-called partial Newton algorithm by making a partial quadratic approximation to the log-likelihood, allowing only $(\beta_{0k}, \beta_k)$ to vary for a single class at a time. For each value of $\lambda$, we first cycle over all classes indexed by $k$, computing each time a partial quadratic approximation about the parameters of the current class. Then the inner procedure is almost the same as for the binomial case. This is the case for lasso (q=1). When q=2, we use a different approach, which we wont dwell on here. For the multinomial case, the usage is similar to logistic regression, and we mainly illustrate by examples and address any differences. We load a set of generated data. ```{r} data(MultinomialExample) ``` The optional arguments in `glmnet` for multinomial logistic regression are mostly similar to binomial regression except for a few cases. The response variable can be a `nc >= 2` level factor, or a `nc`-column matrix of counts or proportions. Internally glmnet will make the rows of this matrix sum to 1, and absorb the total mass into the weight for that observation. `offset` should be a `nobs x nc` matrix if there is one. A special option for multinomial regression is `type.multinomial`, which allows the usage of a grouped lasso penalty if `type.multinomial = "grouped"`. This will ensure that the multinomial coefficients for a variable are all in or out together, just like for the multi-response Gaussian. ```{r} fit = glmnet(x, y, family = "multinomial", type.multinomial = "grouped") ``` We plot the resulting object "fit". ```{r} plot(fit, xvar = "lambda", label = TRUE, type.coef = "2norm") ``` The options are `xvar`, `label` and `type.coef`, in addition to other ordinary graphical parameters. `xvar` and `label` are the same as other families while `type.coef` is only for multinomial regression and multiresponse Gaussian model. It can produce a figure of coefficients for each response variable if `type.coef = "coef"` or a figure showing the $\ell_2$-norm in one figure if `type.coef = "2norm"` We can also do cross-validation and plot the returned object. ```{r} cvfit=cv.glmnet(x, y, family="multinomial", type.multinomial = "grouped", parallel = TRUE) plot(cvfit) ``` Note that although `type.multinomial` is not a typical argument in `cv.glmnet`, in fact any argument that can be passed to `glmnet` is valid in the argument list of `cv.glmnet`. We also use parallel computing to accelerate the calculation. Users may wish to predict at the optimally selected $\lambda$: ```{r} predict(cvfit, newx = x[1:10,], s = "lambda.min", type = "class") ``` [Back to Top](#top) ## Poisson Models Poisson regression is used to model count data under the assumption of Poisson error, or otherwise non-negative data where the mean and variance are proportional. Like the Gaussian and binomial model, the Poisson is a member of the exponential family of distributions. We usually model its positive mean on the log scale: $\log \mu(x) = \beta_0+\beta' x$. The log-likelihood for observations $\{x_i,y_i\}_1^N$ is given my $$ l(\beta|X, Y) = \sum_{i=1}^N \left(y_i (\beta_0+\beta' x_i) - e^{\beta_0+\beta^Tx_i}\right). $$ As before, we optimize the penalized log-lielihood: $$ \min_{\beta_0,\beta} -\frac1N l(\beta|X, Y) + \lambda \left((1-\alpha) \sum_{i=1}^N \beta_i^2/2) +\alpha \sum_{i=1}^N |\beta_i|\right). $$ Glmnet uses an outer Newton loop, and an inner weighted least-squares loop (as in logistic regression) to optimize this criterion. First, we load a pre-generated set of Poisson data. ```{r} data(PoissonExample) ``` We apply the function `glmnet` with the `"poisson"` option. ```{r} fit = glmnet(x, y, family = "poisson") ``` The optional input arguments of `glmnet` for `"poisson"` family are similar to those for others. `offset` is a useful argument particularly in Poisson models. When dealing with rate data in Poisson models, the counts collected are often based on different exposures, such as length of time observed, area and years. A poisson rate $\mu(x)$ is relative to a unit exposure time, so if an observation $y_i$ was exposed for $E_i$ units of time, then the expected count would be $E_i\mu(x)$, and the log mean would be $\log(E_i)+\log(\mu(x))$. In a case like this, we would supply an *offset* $\log(E_i)$ for each observation. Hence `offset` is a vector of length `nobs` that is included in the linear predictor. Other families can also use options, typically for different reasons. (Warning: if `offset` is supplied in `glmnet`, offsets must also also be supplied to `predict` to make reasonable predictions.) Again, we plot the coefficients to have a first sense of the result. ```{r} plot(fit) ``` Like before, we can extract the coefficients and make predictions at certain $\lambda$'s by using `coef` and `predict` respectively. The optional input arguments are similar to those for other families. In function `predict`, the option `type`, which is the type of prediction required, has its own specialties for Poisson family. That is, * "link" (default) gives the linear predictors like others * "response" gives the fitted mean * "coefficients" computes the coefficients at the requested values for `s`, which can also be realized by `coef` function * "nonzero" returns a a list of the indices of the nonzero coefficients for each value of `s`. For example, we can do as follows. ```{r} coef(fit, s = 1) predict(fit, newx = x[1:5,], type = "response", s = c(0.1,1)) ``` We may also use cross-validation to find the optimal $\lambda$'s and thus make inferences. ```{r} cvfit = cv.glmnet(x, y, family = "poisson") ``` Options are almost the same as the Gaussian family except that for `type.measure`, * "deviance" (default) gives the deviance * "mse" stands for mean squared error * "mae" is for mean absolute error. We can plot the `cv.glmnet` object. ```{r} plot(cvfit) ``` We can also show the optimal $\lambda$'s and the corresponding coefficients. ```{r} opt.lam = c(cvfit$lambda.min, cvfit$lambda.1se) coef(cvfit, s = opt.lam) ``` The `predict` method is similar and we do not repeat it here. [Back to Top](#top) ## Cox Models The Cox proportional hazards model is commonly used for the study of the relationship beteween predictor variables and survival time. In the usual survival analysis framework, we have data of the form $(y_1, x_1, \delta_1), \ldots, (y_n, x_n, \delta_n)$ where $y_i$, the observed time, is a time of failure if $\delta_i$ is 1 or right-censoring if $\delta_i$ is 0. We also let $t_1 < t_2 < \ldots < t_m$ be the increasing list of unique failure times, and $j(i)$ denote the index of the observation failing at time $t_i$. The Cox model assumes a semi-parametric form for the hazard $$ h_i(t) = h_0(t) e^{x_i^T \beta}, $$ where $h_i(t)$ is the hazard for patient $i$ at time $t$, $h_0(t)$ is a shared baseline hazard, and $\beta$ is a fixed, length $p$ vector. In the classic setting $n \geq p$, inference is made via the partial likelihood $$ L(\beta) = \prod_{i=1}^m \frac{e^{x_{j(i)}^T \beta}}{\sum_{j \in R_i} e^{x_j^T \beta}}, $$ where $R_i$ is the set of indices $j$ with $y_j \geq t_i$ (those at risk at time $t_i$). Note there is no intercept in the Cox mode (its built into the baseline hazard, and like it, would cancel in the partial likelihood.) We penalize the negative log of the partial likelihood, just like the other models, with an elastic-net penalty. We use a pre-generated set of sample data and response. Users can load their own data and follow a similar procedure. In this case $x$ must be an $n\times p$ matrix of covariate values - each row corresponds to a patient and each column a covariate. $y$ is an $n \times 2$ matrix, with a column "time" of failure/censoring times, and "status" a 0/1 indicator, with 1 meaning the time is a failure time, and zero a censoring time. ```{r} data(CoxExample) y[1:5,] ``` The `Surv` function in the package `survival` can create such a matrix. Note, however, that the `coxph` and related linear models can handle interval and other fors of censoring, while glmnet can only handle right censoring in its present form. We apply the `glmnet` function to compute the solution path under default settings. ```{r} fit = glmnet(x, y, family = "cox") ``` All the standard options are available such as `alpha`, `weights`, `nlambda` and `standardize`. Their usage is similar as in the Gaussian case and we omit the details here. Users can also refer to the help file `help(glmnet)`. We can plot the coefficients. ```{r} plot(fit) ``` As before, we can extract the coefficients at certain values of $\lambda$. ```{r} coef(fit, s = 0.05) ``` Since the Cox Model is not commonly used for prediction, we do not give an illustrative example on prediction. If needed, users can refer to the help file by typing `help(predict.glmnet)`. Also, the function `cv.glmnet` can be used to compute $k$-fold cross-validation for the Cox model. The usage is similar to that for other families except for two main differences. One is that `type.measure` only supports "deviance"(also default), which gives the partial-likelihood. The other is in the option `grouped`. `grouped = TRUE` obtains the CV partial likelihood for the Kth fold by subtraction; by subtracting the log partial likelihood evaluated on the full dataset from that evaluated on the on the (K-1)/K dataset. This makes more efficient use of risk sets. With `grouped=FALSE` the log partial likelihood is computed only on the Kth fold, which is only reasonable if each fold has a large number of observations. ```{r} cvfit = cv.glmnet(x, y, family = "cox") ``` Once fit, we can view the optimal $\lambda$ value and a cross validated error plot to help evaluate our model. ```{r} plot(cvfit) ``` As previously, the left vertical line in our plot shows us where the CV-error curve hits its minimum. The right vertical line shows us the most regularized model with CV-error within 1 standard deviation of the minimum. We also extract such optimal $\lambda$'s. ```{r} cvfit$lambda.min cvfit$lambda.1se ``` We can check the active covariates in our model and see their coefficients. ```{r} coef.min = coef(cvfit, s = "lambda.min") active.min = which(coef.min != 0) index.min = coef.min[active.min] ``` ```{r} index.min coef.min ``` [Back to Top](#top) ## Sparse Matrices Our package supports sparse input matrices, which allow efficient storage and operations of large matrices but with only a few nonzero entries. It is available for all families except for the `cox` family. The usage of sparse matrices (inherit from class `"sparseMatrix"` as in package `Matrix`) in `glmnet ` is the same as if a regular matrix is provided. We load a set of sample data created beforehand. ```{r} data(SparseExample) ``` It loads `x`, a 100*20 sparse input matrix and `y`, the response vector. ```{r} class(x) ``` Users can create a sparse matrix with the function `sparseMatrix` by providing the locations and values of the nonzero entries. Alternatively, `Matrix` function can also be used to contruct a sparse matrix by setting `sparse = TRUE`, but this defeats the purpose somewhat. We can fit the model the same way as before. ```{r} fit = glmnet(x, y) ``` We also do the cross-validation and plot the resulting object. ```{r} cvfit = cv.glmnet(x, y) plot(cvfit) ``` The usage of other functions are similar and we do not expand here. Note that sparse matrices can also be used for `newx`, the new input matrix in the `predict` function. For example, ```{r} i = sample(1:5, size = 25, replace = TRUE) j = sample(1:20, size = 25, replace = TRUE) x = rnorm(25) nx = sparseMatrix(i = i, j = j, x = x, dims = c(5, 20)) predict(cvfit, newx = nx, s = "lambda.min") ``` [Back to Top](#top) ## Appendix 0: Convergence Criteria Glmnet uses a convergence criterion that focuses not on coefficient change but rather the impact of the change on the fitted values, and hence the loss part of the objective. The net result is a weighted norm of the coefficient change vector. For gaussian models it uses the following. Suppose observation $i$ has weight $w_i$. Let $v_j$ be the (weighted) sum-of-squares for variable $x_j$: $$v_j=\sum_{i=1}^Nw_ix_{ij}^2.$$ If there is an intercept in the model, these $x_j$ will be centered by the weighted mean, and hence this would be a weighted variance. After $\hat\beta_j^o$ has been updated to $\hat\beta_j^n$, we compute $\Delta_j=v_j(\hat\beta_j^o-\hat\beta_j^n)^2$. After a complete cycle of coordinate descent, we look at $\Delta_{max}=\max_j\Delta_j$. Why this measure? We can write $$\Delta_j=\frac1N\sum_{i=1}^N w_j(x_{ij}\hat\beta_j^o-x_{ij}\hat\beta_j^n)^2,$$ which measures the weighted sum of squares of changes in fitted values for this term. This measures the impact of the change in this coefficient on the fit. If the largest such change is negligible, we stop. For logistic regression, and other non-Gaussian models it is similar for the inner loop. Only now the weights for each observation are more complex. For example, for logisitic regression the weights are those that arise from the current Newton step, namely $w_i^*=w_i\hat p_i(1-\hat p_i)$. Here $\hat p_i$ are the fitted probabilities as we entered the current inner loop. The intuition is the same --- it measures the impact of the coefficient change on the current weighted least squares loss, or quadratic approximation to the log-likelihood loss. What about outer-loop convergence? We use the same measure, except now $\hat\beta^o$ is the coefficient vector before we entered this inner loop, and $\hat\beta^n$ the converged solution for this inner loop. Hence if this Newton step had no impact, we declare outer-loop convergence. [Back to Top](#top) ## Appendix 1: Internal Parameters Our package has a set of internal parameters which control some aspects of the computation of the path. The *factory default* settings are expected to serve in most cases, and users do not need to make changes unless there are special requirements. There are several parameters that users can change: `fdev` - minimum fractional change in deviance for stopping path; factory default = 1.0e-5 `devmax` - maximum fraction of explained deviance for stopping path; factory default = 0.999 * `eps` - minimum value of lambda.min.ratio (see glmnet); factory default= 1.0e-6 * `big` - large floating point number; factory default = 9.9e35. Inf in definition of upper.limit is set to big * `mnlam` - minimum number of path points (lambda values) allowed; factory default = 5 * `pmin` - minimum null probability for any class; factory default = 1.0e-5 * `exmx` - maximum allowed exponent; factory default = 250.0 * `prec` - convergence threshold for multi-response bounds adjustment solution; factory default = 1.0e-10 * `mxit` - maximum iterations for multiresponse bounds adjustment solution; factory default = 100 * `factory` - If `TRUE`, reset all the parameters to the factory default; default is `FALSE` We illustrate the usage by an example. Note that any changes made hold for the duration of the R session, or unless they are changed by the user with a subsequent call to `glmnet.control`. ```{r} data(QuickStartExample) fit = glmnet(x, y) print(fit) ``` We can change the minimum fractional change in deviance for stopping path and compare the results. ```{r} glmnet.control(fdev = 0) fit = glmnet(x, y) print(fit) ``` We set `fdev = 0` to continue all along the path, even without much change. The length of the sequence becomes 100, which is the default of `nlambda`. Users can also reset to the default settings. ```{r} glmnet.control(factory = TRUE) ``` The current settings are obtained as follows. ```{r} glmnet.control() ``` [Back to Top](#top) ## Appendix 2: Comparison with Other Packages Some people may want to use `glmnet` to solve the Lasso or elastic-net problem at a single $\lambda$. We compare here the solution by `glmnet` with other packages (such as CVX), and also as an illustration of parameter settings in this situation. __Warning__: Though such problems can be solved by `glmnet`, it is __not recommended__ and is not the spirit of the package. `glmnet` fits the __entire__ solution path for Lasso or elastic-net problems efficiently with various techniques such as warm start. Those advantages will disappear if the $\lambda$ sequence is forced to be only one value. Nevertheless, we still illustrate with a typical example in linear model in the following for the purpose of comparison. Given $X, Y$ and $\lambda_0 > 0$, we want to find $\beta$ such that $$ \min_{\beta} ||Y - X\beta||_2^2 + \lambda_0 ||\beta||_1, $$ where, say, $\lambda_0 = 8$. We first solve using `glmnet`. Notice that there is no intercept term in the objective function, and the columns of $X$ are not necessarily standardized. Corresponding parameters have to be set to make it work correctly. In addition, there is a $1/(2n)$ factor before the quadratic term by default, we need to adjust $\lambda$ accordingly. For the purpose of comparison, the `thresh` option is specified to be 1e-20. However, this is not necessary in many practical applications. ```{r, echo=FALSE} data(QuickStartExample) ``` ```{r,eval=FALSE} fit = glmnet(x, y, intercept = F, standardize = F, lambda = 8/(2*dim(x)[1]), thresh = 1e-20) ``` We then extract the coefficients (with no intercept). ```{r,eval=FALSE} beta_glmnet = as.matrix(predict(fit, type = "coefficients")[-1,]) ``` In linear model as here this approach worked because we were using squared error loss, but with any nonlinear family, it will probably fail. The reason is we are not using step length optimization, and so rely on very good warm starts to put us in the quadratic region of the loss function. Alternatively, a more stable and __strongly recommended__ way to perform this task is to first fit the entire Lasso or elastic-net path without specifying `lambda`, but then provide the requested $\lambda_0$ to `predict` function to extract the corresponding coefficients. In fact, if $\lambda_0$ is not in the $\lambda$ sequence generated by `glmnet`, the path will be refitted along a new $\lambda$ sequence that includes the requested value $\lambda_0$ and the old sequence, and the coefficients will be returned at $\lambda_0$ based on the new fit. Remember to set `exact = TRUE` in `predict` function to get the exact solution. Otherwise, it will be approximated by linear interpolation. ```{r} fit = glmnet(x, y, intercept = F, standardize = F, thresh = 1e-20) beta_glmnet = as.matrix(predict(fit, s = 8/(2*dim(x)[1]), type = "coefficients", exact = TRUE, x=x, y=y)[-1,]) ``` We also use CVX, a general convex optimization solver, to solve this specific Lasso problem. Users could also call CVX from R using the `CVXfromR` package and solve the problem as follows. ```{r, eval=FALSE} library(CVXfromR) setup.dir = "change/this/to/your/cvx/directory" n = dim(x)[1]; p = dim(x)[2] cvxcode = paste("variables beta(p)", "minimize(square_pos(norm(y - x * beta, 2)) + lambda * norm(beta, 1))", sep = ";") Lasso = CallCVX(cvxcode, const.var = list(p = p, x = x, y = y, lambda = 8), opt.var.names = "beta", setup.dir = setup.dir, matlab.call = "change/this/to/path/to/matlab") beta_CVX = Lasso$beta ``` For convenience here, the results were saved in `CVXResult.RData`, and we simply load in the results. ```{r} data(CVXResults) ``` In addition, we use `lars` to solve the same problem. ```{r,message=FALSE} require(lars) ``` ```{r} fit_lars = lars(x, y, type = "lasso", intercept = F, normalize = F) beta_lars = predict(fit_lars, s = 8/2, type = "coefficients", mode = "lambda")$coefficients ``` The results are listed below up to 6 decimal digits (due to convergence thresholds). ```{r} cmp = round(cbind(beta_glmnet, beta_lars, beta_CVX), digits = 6) colnames(cmp) = c("beta_glmnet", "beta_lars", "beta_CVX") cmp ``` [Back to Top](#top) ## References

Jerome Friedman, Trevor Hastie and Rob Tibshirani. (2008).
Regularization Paths for Generalized Linear Models via Coordinate Descent
Journal of Statistical Software, Vol. 33(1), 1-22 Feb 2010.

Noah Simon, Jerome Friedman, Trevor Hastie and Rob Tibshirani. (2011).
Regularization Paths for Cox's Proportional Hazards Model via Coordinate Descent
Journal of Statistical Software, Vol. 39(5) 1-13.

Robert Tibshirani, Jacob Bien, Jerome Friedman, Trevor Hastie, Noah Simon, Jonathan Taylor, Ryan J. Tibshirani. (2010).
Strong Rules for Discarding Predictors in Lasso-type Problems
Journal of the Royal Statistical Society: Series B (Statistical Methodology), 74(2), 245-266.

Noah Simon, Jerome Friedman and Trevor Hastie (2013).
A Blockwise Descent Algorithm for Group-penalized Multiresponse and Multinomial Regression
(in arXiv, submitted)

glmnet/MD50000644000176200001440000001147313260416321012054 0ustar liggesusersa97db8cb687239b9642e386b733d3119 *ChangeLog 1f795902131b77b29a51f7d686d14581 *DESCRIPTION 6951bd3e6cc1255a0f4475045bed81da *NAMESPACE 1edccac1b5d30969fd2f1b2ffa94b97a *R/auc.R 8cd96999dce298c1d81ce51ea2f6d2a3 *R/auc.mat.R 16f2b919bf4c1d9cab30fdee7ea96276 *R/check_dots.R e7e655e803c97c24570ebd8c02ba0cac *R/coef.cv.glmnet.R a16cd12557b27556201fc32e8d4319b3 *R/coef.glmnet.R ab05dba77ad585b2ac3a465c26fc2b00 *R/coefnorm.R 17a422b91b14230b7d706477f8267268 *R/coxnet.R 2ccec532ed801467c3b8bd11cc7dd66f *R/coxnet.deviance.R 8bf05bf08d4b874fcb4456dbdfe6010b *R/cv.coxnet.R 0b4d265e0adb729068debfa5fb2ad66f *R/cv.elnet.R 8ca89bbd3f48595f7b5258acefa6a65b *R/cv.fishnet.R dc2e3e3357e1af1c58cb877b05340f38 *R/cv.glmnet.R ba393a6458f40c8a1302d65377fd4351 *R/cv.lognet.R de57bf19f3742a940e422b3a09f1b266 *R/cv.mrelnet.R c47390a98d30ffb700526bb12492ffc8 *R/cv.multnet.R 8dda152ed0e4711772c2050bb8f4809a *R/cvcompute.R 8ef7ab66018802423172b580402ee1ef *R/cvtype.R 9122de61fa4d2a75394c586d8cdb9e46 *R/deviance.glmnet.R 5e8e13577afc19d8fbff162063f5d676 *R/elnet.R 0c6c0b1dfa5c98b55f2e9e097df3747d *R/error.bars.R a4660a7abf8a28e207417120e5b10957 *R/fishnet.R ebce52c8995ee16c058c2aa93bdcf582 *R/fix.lam.R dd14d7acb21ae8f1bb87a54ea763950b *R/getcoef.R c1a8bceef71c915555f8bffc7298137e *R/getcoef.multinomial.R 2b84e336f22867611f544943e7e573eb *R/getmin.R 46cb9bf31ba0f941ac1dfdd977e85eb1 *R/glmnet.R aca5c064807b440612d91fdbb32e450b *R/glmnet.control.R 1fc24d371e7db200baff9922fe5118a4 *R/glmnet_softmax.R 5bb185a77e6a3cdae7401bd4ffcaf8f7 *R/jerr.R 65abc981c18160e0a229da5225aeb812 *R/jerr.coxnet.R 5acd474cede565ec9bff39674d9cdac0 *R/jerr.elnet.R 0ee642ef97444c8b0c05b43face38094 *R/jerr.fishnet.R cb426164b68fd511d50afddd54af550f *R/jerr.lognet.R 955ddc9c91f5cb11e10bce2feb17b4aa *R/jerr.mrelnet.R 35d0ef784889516a12be47ac8d464de5 *R/lambda.interp.R de7722522b536bc2b8d48e8f1892f76f *R/lognet.R de3fcbceced4117b989ef8083113da6c *R/mrelnet.R 17d20a46471df38f1d1c6bb7cb16421a *R/na.mean.R 874f190461e3637bb4fe16c7da03ea6c *R/nonzeroCoef.R 1eb20644889d12fca9e5f08ec9f9a0f3 *R/onAttach.R cd90d1f98f6ecfc775bab8da01426724 *R/plot.cv.glmnet.R 915c43284bcaa4d071c7ef3c15c5f7f8 *R/plot.glmnet.R c98385ade8c0a01e1fa668bd2031cb52 *R/plot.mrelnet.R 6178cc23ed168be78844a2f39b265f35 *R/plot.multnet.R f4901c6d2d94d9ed3f1868359c852e74 *R/plotCoef.R 359325321622088462ea97006c27ce4a *R/predict.coxnet.R 4b2aa41adb3d2df3293901edb52e5942 *R/predict.cv.glmnet.R 1d5a5ecd2fec8be7783685ac742470e9 *R/predict.elnet.R 7b778805f434dcd321cd742dabc0e452 *R/predict.fishnet.R d9a433c5dd03b5b88ca55e39b0b05b89 *R/predict.glmnet.R d688634ea8fd7c9b9520338a4ced6304 *R/predict.lognet.R cde7e5a39f219f2674da839969f2ed4b *R/predict.mrelnet.R d2194ee89ecbe97838eb24f90bf68cb8 *R/predict.multnet.R ea696d8bc26ce7a5900ec3e52cad8ccb *R/print.glmnet.R b9badc67791d4c312f4045cf0c41d43f *R/response.coxnet.R 8b945ab1cb9a14d10fed2265eb839876 *R/rmult.R 0d040824da1ffcd1edb57b252f6b1f6e *R/zeromat.R 7ae8c234b9f2af29c028f64aba4b4de4 *build/vignette.rds 058ca4ea844ab733e99395fa1488546b *data/BinomialExample.RData 7a404bc6a255ac95a6cc06cf4fe6ddbf *data/CVXResults.RData 64d84fd86c91dfde6cbda5f13da82327 *data/CoxExample.RData 2740a6e77cb5875cca0de3f5a6b2c2ed *data/MultiGaussianExample.RData f00302d6b4d512cd1f24c30c21335211 *data/MultinomialExample.RData c4f36770e60c6421603e9933930fec06 *data/PoissonExample.RData beaffe6c0ae597f8803216e3bbd4a2d1 *data/QuickStartExample.RData 7056d5f98a624c060d0522045f1b68f8 *data/SparseExample.RData c22d19c217bc163a2c38b84add608c31 *inst/CITATION f486f9f7f486424fa8d8e05a38e9e6d5 *inst/doc/Coxnet.R b93977cfd7edb18aa6d6dab4e522c823 *inst/doc/Coxnet.pdf 89bb275bc27d5cebcf61d4f0517fb5d5 *inst/doc/Coxnet.rnw 253a8e5f2c15a25d9a93304a93efb1d8 *inst/doc/glmnet_beta.R 00c86e4be7821baf08475b30b9f3e86b *inst/doc/glmnet_beta.Rmd 7bca4128c7957cb9d807f62b25b4474d *inst/doc/glmnet_beta.pdf 74832d552d67eabb5dc9d7a65439d58a *inst/mortran/glmnet5dp.m 4b562f8e16199091b797e15c24b6b258 *man/beta_CVX.Rd f22fd5a94c9054701f6513fc529266a5 *man/cv.glmnet.Rd a9f31f3162f2729793d2e034a4279a25 *man/deviance.glmnet.Rd f892acb3258f3c07f90b03c8360e9ff6 *man/glmnet-internal.Rd eba35b10bb644adb48d2a12d03e43e67 *man/glmnet-package.Rd 723b99bd77410294af190cde7e2121c1 *man/glmnet.Rd 965bbbf6c2b71ff7721e7cfacbf544da *man/glmnet.control.Rd 3a208aa1c7bc1417a6349acc551c1b92 *man/plot.cv.glmnet.Rd 5de6c76ddeec5b531e92e3326268e02c *man/plot.glmnet.Rd 91f320356e8862f4659dcf4acfda8a7c *man/predict.cv.glmnet.Rd 6fb656a71d7150bcc16b0fac9861d840 *man/predict.glmnet.Rd ec4cf2278b0e3cace7980b6d05506f53 *man/print.glmnet.Rd f5eec0fb44dfb60125cfd1cd92aff446 *src/glmnet5dp.f a3983812e8e4ad189c7f96733eb5e553 *src/glmnet_init.c 89bb275bc27d5cebcf61d4f0517fb5d5 *vignettes/Coxnet.rnw bbb84222f5172db7113f5f9f07214ed9 *vignettes/VignetteExample.rdata 00c86e4be7821baf08475b30b9f3e86b *vignettes/glmnet_beta.Rmd b30880e44478a7130a9711434eec8c40 *vignettes/glmnet_beta.html glmnet/build/0000755000176200001440000000000013251400020012622 5ustar liggesusersglmnet/build/vignette.rds0000644000176200001440000000040013251400020015153 0ustar liggesusers}N0 3Z4'}7oDJ)5*ē%A_~2!ęHR ɌØuS1joKz~Rgs8XnP#y߶dJrrKzTAK( 0927:wuӖœsT%Tq`Z QhH֋"b@]Ec+线h]e'iNCG[(L+s?W/-.Oglmnet/DESCRIPTION0000644000176200001440000000206513260416320013246 0ustar liggesusersPackage: glmnet Type: Package Title: Lasso and Elastic-Net Regularized Generalized Linear Models Version: 2.0-16 Date: 2018-03-12 Author: Jerome Friedman [aut, cre], Trevor Hastie [aut, cre], Rob Tibshirani [aut, cre], Noah Simon [aut, ctb], Balasubramanian Narasimhan [ctb], Junyang Qian [ctb] Maintainer: Trevor Hastie Depends: Matrix (>= 1.0-6), utils, foreach Imports: methods Suggests: survival, knitr, lars Description: Extremely efficient procedures for fitting the entire lasso or elastic-net regularization path for linear regression, logistic and multinomial regression models, Poisson regression and the Cox model. Two recent additions are the multiple-response Gaussian, and the grouped multinomial regression. The algorithm uses cyclical coordinate descent in a path-wise fashion, as described in the paper linked to via the URL below. License: GPL-2 VignetteBuilder: knitr URL: http://www.jstatsoft.org/v33/i01/. NeedsCompilation: yes Packaged: 2018-03-12 04:20:32 UTC; hastie Repository: CRAN Date/Publication: 2018-04-02 12:06:40 UTC glmnet/ChangeLog0000644000176200001440000001116013251377617013325 0ustar liggesusers2018-03-12 Trevor Hastie version 2.0-16 * Additional fixes to mortran; current mortran src is in inst/mortran * Mortran uses double precision, and variables are initialized to avoid -Wall warnings * cleaned up repeat code in CV by creating a utility function 2018-01-31 Trevor Hastie version 2.0-15 * Naras fixed up the mortran so that generic fortran compiler can run without any configure 2017-09-21 Trevor Hastie version 2.0-13 * Cleaned up some bugs to do with exact prediction * newoffset created problems all over - fixed these 2017-09-05 Trevor Hastie version 2.0-11 * Added protection with exact=TRUE calls to coef and predict. See help file for more details 2017-05-05 Trevor Hastie version 2.0-10 * Two iterations to fix to fix native fortran registration. 2017-04-25 Trevor Hastie version 2.0-8 * included native registration of fortran 2016-08-25 Trevor Hastie version 2.0-7 * constant y blows up elnet; error trap included * fixed lambda.interp which was returning NaNs under degenerate circumstances. 2016-03-24 Trevor Hastie version 2.0-6 * added some code to extract time and status gracefully from a Surv object 2016-02-21 Trevor Hastie version 2.0-3 * changed the usage of predict and coef with exact=TRUE. The user is strongly encouraged to supply the original x and y values, as well as any other data such as weights that were used in the original fit. 2015-04-07 Trevor Hastie version 2.0-1 * Major upgrade to CV; let each model use its own lambdas, then predict at original set. * fixed some minor bugs 2014-07-30 Trevor Hastie version 1.9-9 * fixed subsetting bug in lognet when some weights are zero and x is sparse 2014-05-23 Trevor Hastie version 1.9-8 * fixed bug in multivariate response model (uninitialized variable), leading to valgrind issues * fixed issue with multinomial response matrix and zeros * Added a link to a glmnet vignette 2014-04-02 Trevor Hastie version 1.9-6 * fixed bug in predict.glmnet, predict.multnet and predict.coxnet, when s= argument is used with a vector of values. It was not doing the matrix multiply correctly * changed documentation of glmnet to explain logistic response matrix 2013-08-02 Trevor Hastie version 1.9-5 * added parallel capabilities, and fixed some minor bugs 2013-03-01 Trevor Hastie version 1.9-3 * added intercept option 2013-02-10 Trevor Hastie version 1.9-1 * added upper and lower bounds for coefficients * added glmnet.control for setting sytems parameters * fixed serious bug in coxnet 2012-12-31 Trevor Hastie version 1.8-5 * added exact=TRUE option for prediction and coef functions 2012-7-01 Trevor Hastie Major new release * added mgaussian family for multivariate response * added grouped option for multinomial family 2012-4-26 Trevor Hastie * nasty bug fixed in fortran - removed reference to dble * check class of newx and make dgCmatrix if sparse 2011-8-15 Trevor Hastie * lognet added a classnames component to the object * predict.lognet(type="class") now returns a character vector/matrix 2011-6-23 Trevor Hastie * predict.glmnet : fixed bug with type="nonzero" * glmnet: Now x can inherit from "sparseMatrix" rather than the very specific "dgCMatrix", and this will trigger sparse mode for glmnet 2010-11-01 Trevor Hastie * glmnet.Rd (lambda.min) : changed value to 0.01 if nobs ### Note that this starts from glmnet_1.4 glmnet/man/0000755000176200001440000000000013240602077012314 5ustar liggesusersglmnet/man/plot.cv.glmnet.Rd0000644000176200001440000000271312106116342015453 0ustar liggesusers\name{plot.cv.glmnet} \alias{plot.cv.glmnet} \title{plot the cross-validation curve produced by cv.glmnet} \description{ Plots the cross-validation curve, and upper and lower standard deviation curves, as a function of the \code{lambda} values used.} \usage{ \method{plot}{cv.glmnet}(x, sign.lambda, ...) } \arguments{ \item{x}{fitted \code{"cv.glmnet"} object} \item{sign.lambda}{Either plot against \code{log(lambda)} (default) or its negative if \code{sign.lambda=-1}.} \item{\dots}{Other graphical parameters to plot} } \details{ A plot is produced, and nothing is returned.} \references{Friedman, J., Hastie, T. and Tibshirani, R. (2008) \emph{Regularization Paths for Generalized Linear Models via Coordinate Descent}} \author{Jerome Friedman, Trevor Hastie and Rob Tibshirani\cr Maintainer: Trevor Hastie } \seealso{\code{glmnet} and \code{cv.glmnet}.} \examples{ set.seed(1010) n=1000;p=100 nzc=trunc(p/10) x=matrix(rnorm(n*p),n,p) beta=rnorm(nzc) fx= (x[,seq(nzc)] \%*\% beta) eps=rnorm(n)*5 y=drop(fx+eps) px=exp(fx) px=px/(1+px) ly=rbinom(n=length(px),prob=px,size=1) cvob1=cv.glmnet(x,y) plot(cvob1) title("Gaussian Family",line=2.5) frame() set.seed(1011) par(mfrow=c(2,2),mar=c(4.5,4.5,4,1)) cvob2=cv.glmnet(x,ly,family="binomial") plot(cvob2) title("Binomial Family",line=2.5) set.seed(1011) cvob3=cv.glmnet(x,ly,family="binomial",type="class") plot(cvob3) title("Binomial Family",line=2.5) } \keyword{models} \keyword{regression} glmnet/man/plot.glmnet.Rd0000644000176200001440000000364711774477541015100 0ustar liggesusers\name{plot.glmnet} \alias{plot.glmnet} \alias{plot.multnet} \alias{plot.mrelnet} \title{plot coefficients from a "glmnet" object} \description{ Produces a coefficient profile plot of the coefficient paths for a fitted \code{"glmnet"} object. } \usage{ \method{plot}{glmnet}(x, xvar = c("norm", "lambda", "dev"), label = FALSE, ...) \method{plot}{multnet}(x, xvar = c("norm", "lambda", "dev"), label = FALSE,type.coef=c("coef","2norm"), ...) \method{plot}{mrelnet}(x, xvar = c("norm", "lambda", "dev"), label = FALSE,type.coef=c("coef","2norm"), ...) } \arguments{ \item{x}{fitted \code{"glmnet"} model} \item{xvar}{What is on the X-axis. \code{"norm"} plots against the L1-norm of the coefficients, \code{"lambda"} against the log-lambda sequence, and \code{"dev"} against the percent deviance explained.} \item{label}{If \code{TRUE}, label the curves with variable sequence numbers.} \item{type.coef}{If \code{type.coef="2norm"} then a single curve per variable, else if \code{type.coef="coef"}, a coefficient plot per response} \item{\dots}{Other graphical parameters to plot} } \details{ A coefficient profile plot is produced. If \code{x} is a multinomial model, a coefficient plot is produced for each class. } \references{Friedman, J., Hastie, T. and Tibshirani, R. (2008) \emph{Regularization Paths for Generalized Linear Models via Coordinate Descent}} \author{Jerome Friedman, Trevor Hastie and Rob Tibshirani\cr Maintainer: Trevor Hastie } \seealso{\code{glmnet}, and \code{print}, \code{predict} and \code{coef} methods.} \examples{ x=matrix(rnorm(100*20),100,20) y=rnorm(100) g2=sample(1:2,100,replace=TRUE) g4=sample(1:4,100,replace=TRUE) fit1=glmnet(x,y) plot(fit1) plot(fit1,xvar="lambda",label=TRUE) fit3=glmnet(x,g4,family="multinomial") plot(fit3,pch=19) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{models} \keyword{regression} glmnet/man/glmnet-internal.Rd0000644000176200001440000000301313240602077015700 0ustar liggesusers\name{glmnet-internal} \title{Internal glmnet functions} \alias{auc} \alias{auc.mat} \alias{coxnet.deviance} \alias{cvtype} \alias{cvcompute} \alias{getcoef} \alias{getcoef.multinomial} \alias{response.coxnet} \alias{fix.lam} \alias{error.bars} \alias{getmin} \alias{elnet} \alias{mrelnet} \alias{lognet} \alias{fishnet} \alias{coefnorm} \alias{coxnet} \alias{cv.lognet} \alias{cv.elnet} \alias{cv.multnet} \alias{cv.mrelnet} \alias{cv.coxnet} \alias{cv.fishnet} \alias{lambda.interp} \alias{nonzeroCoef} \alias{rmult} \alias{glmnet_softmax} \alias{jerr} \alias{jerr.elnet} \alias{jerr.lognet} \alias{jerr.fishnet} \alias{jerr.coxnet} \alias{jerr.mrelnet} \alias{plotCoef} \alias{zeromat} \alias{na.mean} \alias{check_dots} \description{Internal glmnet functions} \usage{ fix.lam(lam) lambda.interp(lambda,s) nonzeroCoef(beta, bystep=FALSE) glmnet_softmax(x) } \author{Trevor Hastie} \details{These are not intended for use by users. \code{lambda.interp} does linear interpolation of the lambdas to obtain a prediction at a new point s. \code{glmnet_softmax} does the classification for multinomial models. \code{nonzeroCoef} determines in an efficient manner which variables are nonzero in each fit. \code{jerr} prints out error messages from the fortran. \code{plotCoef} is called by the \code{plot} method for \code{glmnet} objects. \code{check_dots} is used in \code{coef} and \code{predict} with argument \code{exact=TRUE}, to make sure user supplies original data used to fit the \code{"glmnet"} object. } \keyword{internal} glmnet/man/predict.glmnet.Rd0000644000176200001440000001212513157063576015537 0ustar liggesusers\name{predict.glmnet} \alias{coef.glmnet} \alias{predict.glmnet} \alias{predict.elnet} \alias{predict.lognet} \alias{predict.multnet} \alias{predict.mrelnet} \alias{predict.fishnet} \alias{predict.coxnet} \title{make predictions from a "glmnet" object.} \description{ Similar to other predict methods, this functions predicts fitted values, logits, coefficients and more from a fitted \code{"glmnet"} object. } \usage{ \method{predict}{glmnet}(object, newx, s = NULL, type=c("link","response","coefficients","nonzero","class"), exact = FALSE, newoffset, ...) \method{coef}{glmnet}(object,s=NULL, exact=FALSE, ...) } \arguments{ \item{object}{Fitted \code{"glmnet"} model object.} \item{newx}{Matrix of new values for \code{x} at which predictions are to be made. Must be a matrix; can be sparse as in \code{Matrix} package. This argument is not used for \code{type=c("coefficients","nonzero")}} \item{s}{Value(s) of the penalty parameter \code{lambda} at which predictions are required. Default is the entire sequence used to create the model. } \item{type}{Type of prediction required. Type \code{"link"} gives the linear predictors for \code{"binomial"}, \code{"multinomial"}, \code{"poisson"} or \code{"cox"} models; for \code{"gaussian"} models it gives the fitted values. Type \code{"response"} gives the fitted probabilities for \code{"binomial"} or \code{"multinomial"}, fitted mean for \code{"poisson"} and the fitted relative-risk for \code{"cox"}; for \code{"gaussian"} type \code{"response"} is equivalent to type \code{"link"}. Type \code{"coefficients"} computes the coefficients at the requested values for \code{s}. Note that for \code{"binomial"} models, results are returned only for the class corresponding to the second level of the factor response. Type \code{"class"} applies only to \code{"binomial"} or \code{"multinomial"} models, and produces the class label corresponding to the maximum probability. Type \code{"nonzero"} returns a list of the indices of the nonzero coefficients for each value of \code{s}.} \item{exact}{This argument is relevant only when predictions are made at values of \code{s} (lambda) \emph{different} from those used in the fitting of the original model. If \code{exact=FALSE} (default), then the predict function uses linear interpolation to make predictions for values of \code{s} (lambda) that do not coincide with those used in the fitting algorithm. While this is often a good approximation, it can sometimes be a bit coarse. With \code{exact=TRUE}, these different values of \code{s} are merged (and sorted) with \code{object$lambda}, and the model is refit before predictions are made. In this case, it is required to supply the original data \code{x=} and \code{y=} as additional named arguments to \code{predict()} or \code{coef()}. The workhorse \code{predict.glmnet()} needs to \code{update} the model, and so needs the data used to create it. The same is true of \code{weights}, \code{offset}, \code{penalty.factor}, \code{lower.limits}, \code{upper.limits} if these were used in the original call. Failure to do so will result in an error.} \item{newoffset}{If an offset is used in the fit, then one must be supplied for making predictions (except for \code{type="coefficients"} or \code{type="nonzero"})} \item{\dots}{This is the mechanism for passing arguments like \code{x=} when \code{exact=TRUE}; see\code{exact} argument.} } \details{The shape of the objects returned are different for \code{"multinomial"} objects. This function actually calls \code{NextMethod()}, and the appropriate predict method is invoked for each of the three model types. \code{coef(...)} is equivalent to \code{predict(type="coefficients",...)}} \value{The object returned depends on type.} \references{Friedman, J., Hastie, T. and Tibshirani, R. (2008) \emph{Regularization Paths for Generalized Linear Models via Coordinate Descent}, \url{https://web.stanford.edu/~hastie/Papers/glmnet.pdf}\cr \emph{Journal of Statistical Software, Vol. 33(1), 1-22 Feb 2010}\cr \url{http://www.jstatsoft.org/v33/i01/}\cr Simon, N., Friedman, J., Hastie, T., Tibshirani, R. (2011) \emph{Regularization Paths for Cox's Proportional Hazards Model via Coordinate Descent, Journal of Statistical Software, Vol. 39(5) 1-13}\cr \url{http://www.jstatsoft.org/v39/i05/} } \author{Jerome Friedman, Trevor Hastie and Rob Tibshirani\cr Maintainer: Trevor Hastie } \seealso{\code{glmnet}, and \code{print}, and \code{coef} methods, and \code{cv.glmnet}.} \examples{ x=matrix(rnorm(100*20),100,20) y=rnorm(100) g2=sample(1:2,100,replace=TRUE) g4=sample(1:4,100,replace=TRUE) fit1=glmnet(x,y) predict(fit1,newx=x[1:5,],s=c(0.01,0.005)) predict(fit1,type="coef") fit2=glmnet(x,g2,family="binomial") predict(fit2,type="response",newx=x[2:5,]) predict(fit2,type="nonzero") fit3=glmnet(x,g4,family="multinomial") predict(fit3,newx=x[1:3,],type="response",s=0.01) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{models} \keyword{regression} glmnet/man/cv.glmnet.Rd0000644000176200001440000001777213240602077014516 0ustar liggesusers\name{cv.glmnet} \alias{cv.glmnet} \title{Cross-validation for glmnet} \description{Does k-fold cross-validation for glmnet, produces a plot, and returns a value for \code{lambda}} \usage{ cv.glmnet(x, y, weights, offset, lambda, type.measure, nfolds, foldid, grouped, keep, parallel, ...) } \arguments{ \item{x}{\code{x} matrix as in \code{glmnet}.} \item{y}{response \code{y} as in \code{glmnet}.} \item{weights}{Observation weights; defaults to 1 per observation} \item{offset}{Offset vector (matrix) as in \code{glmnet}} \item{lambda}{Optional user-supplied lambda sequence; default is \code{NULL}, and \code{glmnet} chooses its own sequence} \item{nfolds}{number of folds - default is 10. Although \code{nfolds} can be as large as the sample size (leave-one-out CV), it is not recommended for large datasets. Smallest value allowable is \code{nfolds=3}} \item{foldid}{an optional vector of values between 1 and \code{nfold} identifying what fold each observation is in. If supplied, \code{nfold} can be missing.} \item{type.measure}{loss to use for cross-validation. Currently five options, not all available for all models. The default is \code{type.measure="deviance"}, which uses squared-error for gaussian models (a.k.a \code{type.measure="mse"} there), deviance for logistic and poisson regression, and partial-likelihood for the Cox model. \code{type.measure="class"} applies to binomial and multinomial logistic regression only, and gives misclassification error. \code{type.measure="auc"} is for two-class logistic regression only, and gives area under the ROC curve. \code{type.measure="mse"} or \code{type.measure="mae"} (mean absolute error) can be used by all models except the \code{"cox"}; they measure the deviation from the fitted mean to the response.} \item{grouped}{This is an experimental argument, with default \code{TRUE}, and can be ignored by most users. For all models except the \code{"cox"}, this refers to computing \code{nfolds} separate statistics, and then using their mean and estimated standard error to describe the CV curve. If \code{grouped=FALSE}, an error matrix is built up at the observation level from the predictions from the \code{nfold} fits, and then summarized (does not apply to \code{type.measure="auc"}). For the \code{"cox"} family, \code{grouped=TRUE} obtains the CV partial likelihood for the Kth fold by \emph{subtraction}; by subtracting the log partial likelihood evaluated on the full dataset from that evaluated on the on the (K-1)/K dataset. This makes more efficient use of risk sets. With \code{grouped=FALSE} the log partial likelihood is computed only on the Kth fold} \item{keep}{If \code{keep=TRUE}, a \emph{prevalidated} array is returned containing fitted values for each observation and each value of \code{lambda}. This means these fits are computed with this observation and the rest of its fold omitted. The \code{folid} vector is also returned. Default is {keep=FALSE}} \item{parallel}{If \code{TRUE}, use parallel \code{foreach} to fit each fold. Must register parallel before hand, such as \code{doMC} or others. See the example below.} \item{\dots}{Other arguments that can be passed to \code{glmnet}} } \details{The function runs \code{glmnet} \code{nfolds}+1 times; the first to get the \code{lambda} sequence, and then the remainder to compute the fit with each of the folds omitted. The error is accumulated, and the average error and standard deviation over the folds is computed. Note that \code{cv.glmnet} does NOT search for values for \code{alpha}. A specific value should be supplied, else \code{alpha=1} is assumed by default. If users would like to cross-validate \code{alpha} as well, they should call \code{cv.glmnet} with a pre-computed vector \code{foldid}, and then use this same fold vector in separate calls to \code{cv.glmnet} with different values of \code{alpha}. Note also that the results of \code{cv.glmnet} are random, since the folds are selected at random. Users can reduce this randomness by running \code{cv.glmnet} many times, and averaging the error curves. } \value{an object of class \code{"cv.glmnet"} is returned, which is a list with the ingredients of the cross-validation fit. \item{lambda}{the values of \code{lambda} used in the fits.} \item{cvm}{The mean cross-validated error - a vector of length \code{length(lambda)}.} \item{cvsd}{estimate of standard error of \code{cvm}.} \item{cvup}{upper curve = \code{cvm+cvsd}.} \item{cvlo}{lower curve = \code{cvm-cvsd}.} \item{nzero}{number of non-zero coefficients at each \code{lambda}.} \item{name}{a text string indicating type of measure (for plotting purposes).} \item{glmnet.fit}{a fitted glmnet object for the full data.} \item{lambda.min}{value of \code{lambda} that gives minimum \code{cvm}.} \item{lambda.1se}{largest value of \code{lambda} such that error is within 1 standard error of the minimum.} \item{fit.preval}{if \code{keep=TRUE}, this is the array of prevalidated fits. Some entries can be \code{NA}, if that and subsequent values of \code{lambda} are not reached for that fold} \item{foldid}{if \code{keep=TRUE}, the fold assignments used} } \references{Friedman, J., Hastie, T. and Tibshirani, R. (2008) \emph{Regularization Paths for Generalized Linear Models via Coordinate Descent}, \url{https://web.stanford.edu/~hastie/Papers/glmnet.pdf}\cr \emph{Journal of Statistical Software, Vol. 33(1), 1-22 Feb 2010}\cr \url{http://www.jstatsoft.org/v33/i01/}\cr Simon, N., Friedman, J., Hastie, T., Tibshirani, R. (2011) \emph{Regularization Paths for Cox's Proportional Hazards Model via Coordinate Descent, Journal of Statistical Software, Vol. 39(5) 1-13}\cr \url{http://www.jstatsoft.org/v39/i05/} } \author{Jerome Friedman, Trevor Hastie and Rob Tibshirani\cr Noah Simon helped develop the 'coxnet' function.\cr Jeffrey Wong and B. Narasimhan helped with the parallel option\cr Maintainer: Trevor Hastie \email{hastie@stanford.edu}} \seealso{\code{glmnet} and \code{plot}, \code{predict}, and \code{coef} methods for \code{"cv.glmnet"} object.} \examples{ set.seed(1010) n=1000;p=100 nzc=trunc(p/10) x=matrix(rnorm(n*p),n,p) beta=rnorm(nzc) fx= x[,seq(nzc)] \%*\% beta eps=rnorm(n)*5 y=drop(fx+eps) px=exp(fx) px=px/(1+px) ly=rbinom(n=length(px),prob=px,size=1) set.seed(1011) cvob1=cv.glmnet(x,y) plot(cvob1) coef(cvob1) predict(cvob1,newx=x[1:5,], s="lambda.min") title("Gaussian Family",line=2.5) set.seed(1011) cvob1a=cv.glmnet(x,y,type.measure="mae") plot(cvob1a) title("Gaussian Family",line=2.5) set.seed(1011) par(mfrow=c(2,2),mar=c(4.5,4.5,4,1)) cvob2=cv.glmnet(x,ly,family="binomial") plot(cvob2) title("Binomial Family",line=2.5) frame() set.seed(1011) cvob3=cv.glmnet(x,ly,family="binomial",type.measure="class") plot(cvob3) title("Binomial Family",line=2.5) \dontrun{ set.seed(1011) cvob3a=cv.glmnet(x,ly,family="binomial",type.measure="auc") plot(cvob3a) title("Binomial Family",line=2.5) set.seed(1011) mu=exp(fx/10) y=rpois(n,mu) cvob4=cv.glmnet(x,y,family="poisson") plot(cvob4) title("Poisson Family",line=2.5) # Multinomial n=500;p=30 nzc=trunc(p/10) x=matrix(rnorm(n*p),n,p) beta3=matrix(rnorm(30),10,3) beta3=rbind(beta3,matrix(0,p-10,3)) f3=x\%*\% beta3 p3=exp(f3) p3=p3/apply(p3,1,sum) g3=rmult(p3) set.seed(10101) cvfit=cv.glmnet(x,g3,family="multinomial") plot(cvfit) title("Multinomial Family",line=2.5) # Cox beta=rnorm(nzc) fx=x[,seq(nzc)]\%*\%beta/3 hx=exp(fx) ty=rexp(n,hx) tcens=rbinom(n=n,prob=.3,size=1)# censoring indicator y=cbind(time=ty,status=1-tcens) # y=Surv(ty,1-tcens) with library(survival) foldid=sample(rep(seq(10),length=n)) fit1_cv=cv.glmnet(x,y,family="cox",foldid=foldid) plot(fit1_cv) title("Cox Family",line=2.5) # Parallel require(doMC) registerDoMC(cores=4) x = matrix(rnorm(1e5 * 100), 1e5, 100) y = rnorm(1e5) system.time(cv.glmnet(x,y)) system.time(cv.glmnet(x,y,parallel=TRUE)) } } \keyword{models} \keyword{regression} glmnet/man/beta_CVX.Rd0000644000176200001440000000114412507270651014242 0ustar liggesusers\name{beta_CVX} \alias{x} \alias{y} \alias{beta_CVX} \title{Simulated data for the glmnet vignette} \description{ Simple simulated data, used to demonstrate the features of glmnet } \usage{ data(BinomialExample) data(CVXResults) data(CoxExample) data(MultiGaussianExample) data(MultinomialExample) data(PoissonExample) data(QuickStartExample) data(SparseExample) } \format{ Data objects used to demonstrate features in the glmnet vignette } \details{ Theses datasets are artificial, and ere used to test out some of the features of glmnet. } \examples{ data(QuickStartExample) glmnet(x,y) } \keyword{datasets} glmnet/man/glmnet.Rd0000644000176200001440000003605613240602077014103 0ustar liggesusers\name{glmnet} \alias{glmnet} \title{fit a GLM with lasso or elasticnet regularization} \description{ Fit a generalized linear model via penalized maximum likelihood. The regularization path is computed for the lasso or elasticnet penalty at a grid of values for the regularization parameter lambda. Can deal with all shapes of data, including very large sparse data matrices. Fits linear, logistic and multinomial, poisson, and Cox regression models. } \usage{ glmnet(x, y, family=c("gaussian","binomial","poisson","multinomial","cox","mgaussian"), weights, offset=NULL, alpha = 1, nlambda = 100, lambda.min.ratio = ifelse(nobs=2} level factor, or a matrix with \code{nc} columns of counts or proportions. For either \code{"binomial"} or \code{"multinomial"}, if \code{y} is presented as a vector, it will be coerced into a factor. For \code{family="cox"}, \code{y} should be a two-column matrix with columns named 'time' and 'status'. The latter is a binary variable, with '1' indicating death, and '0' indicating right censored. The function \code{Surv()} in package \pkg{survival} produces such a matrix. For \code{family="mgaussian"}, \code{y} is a matrix of quantitative responses.} \item{family}{Response type (see above)} \item{weights}{observation weights. Can be total counts if responses are proportion matrices. Default is 1 for each observation} \item{offset}{A vector of length \code{nobs} that is included in the linear predictor (a \code{nobs x nc} matrix for the \code{"multinomial"} family). Useful for the \code{"poisson"} family (e.g. log of exposure time), or for refining a model by starting at a current fit. Default is \code{NULL}. If supplied, then values must also be supplied to the \code{predict} function.} \item{alpha}{The elasticnet mixing parameter, with \eqn{0\le\alpha\le 1}. The penalty is defined as \deqn{(1-\alpha)/2||\beta||_2^2+\alpha||\beta||_1.} \code{alpha=1} is the lasso penalty, and \code{alpha=0} the ridge penalty.} \item{nlambda}{The number of \code{lambda} values - default is 100.} \item{lambda.min.ratio}{Smallest value for \code{lambda}, as a fraction of \code{lambda.max}, the (data derived) entry value (i.e. the smallest value for which all coefficients are zero). The default depends on the sample size \code{nobs} relative to the number of variables \code{nvars}. If \code{nobs > nvars}, the default is \code{0.0001}, close to zero. If \code{nobs < nvars}, the default is \code{0.01}. A very small value of \code{lambda.min.ratio} will lead to a saturated fit in the \code{nobs < nvars} case. This is undefined for \code{"binomial"} and \code{"multinomial"} models, and \code{glmnet} will exit gracefully when the percentage deviance explained is almost 1.} \item{lambda}{A user supplied \code{lambda} sequence. Typical usage is to have the program compute its own \code{lambda} sequence based on \code{nlambda} and \code{lambda.min.ratio}. Supplying a value of \code{lambda} overrides this. WARNING: use with care. Avoid supplying a single value for \code{lambda} (for predictions after CV use \code{predict()} instead). Supply instead a decreasing sequence of \code{lambda} values. \code{glmnet} relies on its warms starts for speed, and its often faster to fit a whole path than compute a single fit.} \item{standardize}{Logical flag for x variable standardization, prior to fitting the model sequence. The coefficients are always returned on the original scale. Default is \code{standardize=TRUE}. If variables are in the same units already, you might not wish to standardize. See details below for y standardization with \code{family="gaussian"}.} \item{intercept}{Should intercept(s) be fitted (default=TRUE) or set to zero (FALSE)} \item{thresh}{Convergence threshold for coordinate descent. Each inner coordinate-descent loop continues until the maximum change in the objective after any coefficient update is less than \code{thresh} times the null deviance. Defaults value is \code{1E-7}.} \item{dfmax}{Limit the maximum number of variables in the model. Useful for very large \code{nvars}, if a partial path is desired.} \item{pmax}{Limit the maximum number of variables ever to be nonzero} \item{exclude}{Indices of variables to be excluded from the model. Default is none. Equivalent to an infinite penalty factor (next item).} \item{penalty.factor}{Separate penalty factors can be applied to each coefficient. This is a number that multiplies \code{lambda} to allow differential shrinkage. Can be 0 for some variables, which implies no shrinkage, and that variable is always included in the model. Default is 1 for all variables (and implicitly infinity for variables listed in \code{exclude}). Note: the penalty factors are internally rescaled to sum to nvars, and the lambda sequence will reflect this change.} \item{lower.limits}{Vector of lower limits for each coefficient; default \code{-Inf}. Each of these must be non-positive. Can be presented as a single value (which will then be replicated), else a vector of length \code{nvars}} \item{upper.limits}{Vector of upper limits for each coefficient; default \code{Inf}. See \code{lower.limits}} \item{maxit}{Maximum number of passes over the data for all lambda values; default is 10^5.} \item{type.gaussian}{Two algorithm types are supported for (only) \code{family="gaussian"}. The default when \code{nvar<500} is \code{type.gaussian="covariance"}, and saves all inner-products ever computed. This can be much faster than \code{type.gaussian="naive"}, which loops through \code{nobs} every time an inner-product is computed. The latter can be far more efficient for \code{nvar >> nobs} situations, or when \code{nvar > 500}.} \item{type.logistic}{If \code{"Newton"} then the exact hessian is used (default), while \code{"modified.Newton"} uses an upper-bound on the hessian, and can be faster.} \item{standardize.response}{This is for the \code{family="mgaussian"} family, and allows the user to standardize the response variables} \item{type.multinomial}{If \code{"grouped"} then a grouped lasso penalty is used on the multinomial coefficients for a variable. This ensures they are all in our out together. The default is \code{"ungrouped"}} } \details{ The sequence of models implied by \code{lambda} is fit by coordinate descent. For \code{family="gaussian"} this is the lasso sequence if \code{alpha=1}, else it is the elasticnet sequence. For the other families, this is a lasso or elasticnet regularization path for fitting the generalized linear regression paths, by maximizing the appropriate penalized log-likelihood (partial likelihood for the "cox" model). Sometimes the sequence is truncated before \code{nlambda} values of \code{lambda} have been used, because of instabilities in the inverse link functions near a saturated fit. \code{glmnet(...,family="binomial")} fits a traditional logistic regression model for the log-odds. \code{glmnet(...,family="multinomial")} fits a symmetric multinomial model, where each class is represented by a linear model (on the log-scale). The penalties take care of redundancies. A two-class \code{"multinomial"} model will produce the same fit as the corresponding \code{"binomial"} model, except the pair of coefficient matrices will be equal in magnitude and opposite in sign, and half the \code{"binomial"} values. Note that the objective function for \code{"gaussian"} is \deqn{1/2 RSS/nobs + \lambda*penalty,} and for the other models it is \deqn{-loglik/nobs + \lambda*penalty.} Note also that for \code{"gaussian"}, \code{glmnet} standardizes y to have unit variance (using 1/n rather than 1/(n-1) formula) before computing its lambda sequence (and then unstandardizes the resulting coefficients); if you wish to reproduce/compare results with other software, best to supply a standardized y. The coefficients for any predictor variables with zero variance are set to zero for all values of lambda. The latest two features in glmnet are the \code{family="mgaussian"} family and the \code{type.multinomial="grouped"} option for multinomial fitting. The former allows a multi-response gaussian model to be fit, using a "group -lasso" penalty on the coefficients for each variable. Tying the responses together like this is called "multi-task" learning in some domains. The grouped multinomial allows the same penalty for the \code{family="multinomial"} model, which is also multi-responsed. For both of these the penalty on the coefficient vector for variable j is \deqn{(1-\alpha)/2||\beta_j||_2^2+\alpha||\beta_j||_1.} When \code{alpha=1} this is a group-lasso penalty, and otherwise it mixes with quadratic just like elasticnet. A small detail in the Cox model: if death times are tied with censored times, we assume the censored times occurred just \emph{before} the death times in computing the Breslow approximation; if users prefer the usual convention of \emph{after}, they can add a small number to all censoring times to achieve this effect. } \value{ An object with S3 class \code{"glmnet","*" }, where \code{"*"} is \code{"elnet"}, \code{"lognet"}, \code{"multnet"}, \code{"fishnet"} (poisson), \code{"coxnet"} or \code{"mrelnet"} for the various types of models. \item{call}{the call that produced this object} \item{a0}{Intercept sequence of length \code{length(lambda)}} \item{beta}{For \code{"elnet"}, \code{"lognet"}, \code{"fishnet"} and \code{"coxnet"} models, a \code{nvars x length(lambda)} matrix of coefficients, stored in sparse column format (\code{"CsparseMatrix"}). For \code{"multnet"} and \code{"mgaussian"}, a list of \code{nc} such matrices, one for each class.} \item{lambda}{The actual sequence of \code{lambda} values used. When \code{alpha=0}, the largest lambda reported does not quite give the zero coefficients reported (\code{lambda=inf} would in principle). Instead, the largest \code{lambda} for \code{alpha=0.001} is used, and the sequence of \code{lambda} values is derived from this.} \item{dev.ratio}{The fraction of (null) deviance explained (for \code{"elnet"}, this is the R-square). The deviance calculations incorporate weights if present in the model. The deviance is defined to be 2*(loglike_sat - loglike), where loglike_sat is the log-likelihood for the saturated model (a model with a free parameter per observation). Hence dev.ratio=1-dev/nulldev.} \item{nulldev}{Null deviance (per observation). This is defined to be 2*(loglike_sat -loglike(Null)); The NULL model refers to the intercept model, except for the Cox, where it is the 0 model.} \item{df}{The number of nonzero coefficients for each value of \code{lambda}. For \code{"multnet"}, this is the number of variables with a nonzero coefficient for \emph{any} class.} \item{dfmat}{For \code{"multnet"} and \code{"mrelnet"} only. A matrix consisting of the number of nonzero coefficients per class} \item{dim}{dimension of coefficient matrix (ices)} \item{nobs}{number of observations} \item{npasses}{total passes over the data summed over all lambda values} \item{offset}{a logical variable indicating whether an offset was included in the model} \item{jerr}{error flag, for warnings and errors (largely for internal debugging).} } \references{Friedman, J., Hastie, T. and Tibshirani, R. (2008) \emph{Regularization Paths for Generalized Linear Models via Coordinate Descent}, \url{https://web.stanford.edu/~hastie/Papers/glmnet.pdf}\cr \emph{Journal of Statistical Software, Vol. 33(1), 1-22 Feb 2010}\cr \url{http://www.jstatsoft.org/v33/i01/}\cr Simon, N., Friedman, J., Hastie, T., Tibshirani, R. (2011) \emph{Regularization Paths for Cox's Proportional Hazards Model via Coordinate Descent, Journal of Statistical Software, Vol. 39(5) 1-13}\cr \url{http://www.jstatsoft.org/v39/i05/}\cr Tibshirani, Robert., Bien, J., Friedman, J.,Hastie, T.,Simon, N.,Taylor, J. and Tibshirani, Ryan. (2012) \emph{Strong Rules for Discarding Predictors in Lasso-type Problems, JRSSB vol 74},\cr \url{http://statweb.stanford.edu/~tibs/ftp/strong.pdf}\cr \emph{Stanford Statistics Technical Report}\cr \emph{Glmnet Vignette} \url{https://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html} } \author{Jerome Friedman, Trevor Hastie, Noah Simon and Rob Tibshirani\cr Maintainer: Trevor Hastie \email{hastie@stanford.edu}} \seealso{\code{print}, \code{predict}, \code{coef} and \code{plot} methods, and the \code{cv.glmnet} function.} \examples{ # Gaussian x=matrix(rnorm(100*20),100,20) y=rnorm(100) fit1=glmnet(x,y) print(fit1) coef(fit1,s=0.01) # extract coefficients at a single value of lambda predict(fit1,newx=x[1:10,],s=c(0.01,0.005)) # make predictions #multivariate gaussian y=matrix(rnorm(100*3),100,3) fit1m=glmnet(x,y,family="mgaussian") plot(fit1m,type.coef="2norm") #binomial g2=sample(1:2,100,replace=TRUE) fit2=glmnet(x,g2,family="binomial") #multinomial g4=sample(1:4,100,replace=TRUE) fit3=glmnet(x,g4,family="multinomial") fit3a=glmnet(x,g4,family="multinomial",type.multinomial="grouped") #poisson N=500; p=20 nzc=5 x=matrix(rnorm(N*p),N,p) beta=rnorm(nzc) f = x[,seq(nzc)]\%*\%beta mu=exp(f) y=rpois(N,mu) fit=glmnet(x,y,family="poisson") plot(fit) pfit = predict(fit,x,s=0.001,type="response") plot(pfit,y) #Cox set.seed(10101) N=1000;p=30 nzc=p/3 x=matrix(rnorm(N*p),N,p) beta=rnorm(nzc) fx=x[,seq(nzc)]\%*\%beta/3 hx=exp(fx) ty=rexp(N,hx) tcens=rbinom(n=N,prob=.3,size=1)# censoring indicator y=cbind(time=ty,status=1-tcens) # y=Surv(ty,1-tcens) with library(survival) fit=glmnet(x,y,family="cox") plot(fit) # Sparse n=10000;p=200 nzc=trunc(p/10) x=matrix(rnorm(n*p),n,p) iz=sample(1:(n*p),size=n*p*.85,replace=FALSE) x[iz]=0 sx=Matrix(x,sparse=TRUE) inherits(sx,"sparseMatrix")#confirm that it is sparse beta=rnorm(nzc) fx=x[,seq(nzc)]\%*\%beta eps=rnorm(n) y=fx+eps px=exp(fx) px=px/(1+px) ly=rbinom(n=length(px),prob=px,size=1) system.time(fit1<-glmnet(sx,y)) system.time(fit2n<-glmnet(x,y)) } \keyword{models} \keyword{regression} glmnet/man/glmnet.control.Rd0000644000176200001440000000375712337161370015566 0ustar liggesusers\name{glmnet.control} \alias{glmnet.control} \title{internal glmnet parameters} \description{ View and/or change the factory default parameters in glmnet } \usage{ glmnet.control(fdev=1.0e-5, devmax=0.999, eps=1.0e-6, big=9.9e35, mnlam=5, pmin=1.0e-9, exmx=250.0,prec=1e-10,mxit=100,factory=FALSE) } \arguments{ \item{fdev}{minimum fractional change in deviance for stopping path; factory default = 1.0e-5} \item{devmax}{maximum fraction of explained deviance for stopping path; factory default = 0.999} \item{eps}{minimum value of lambda.min.ratio (see glmnet); factory default= 1.0e-6} \item{big}{large floating point number; factory default = 9.9e35. Inf in definition of upper.limit is set to big} \item{mnlam}{minimum number of path points (lambda values) allowed; factory default = 5} \item{pmin}{minimum probability for any class. factory default = 1.0e-9. Note that this implies a pmax of 1-pmin.} \item{exmx}{maximum allowed exponent. factory default = 250.0} \item{prec}{convergence threshold for multi response bounds adjustment solution. factory default = 1.0e-10} \item{mxit}{maximum iterations for multiresponse bounds adjustment solution. factory default = 100} \item{factory}{If \code{TRUE}, reset all the parameters to the factory default; default is \code{FALSE}} } \details{ If called with no arguments, \code{glmnet.control()} returns a list with the current settings of these parameters. Any arguments included in the call sets those parameters to the new values, and then silently returns. The values set are persistent for the duration of the R session. } \value{ A list with named elements as in the argument list } \author{Jerome Friedman, Trevor Hastie\cr Maintainer: Trevor Hastie \email{hastie@stanford.edu}} \seealso{\code{glmnet}} \examples{ glmnet.control(fdev=0)#continue along path even though not much changes glmnet.control() # view current settings glmnet.control(factory=TRUE) # reset all the parameters to their default } \keyword{models} \keyword{regression} glmnet/man/print.glmnet.Rd0000644000176200001440000000232311020347225015217 0ustar liggesusers\name{print.glmnet} \alias{print.glmnet} \title{print a glmnet object} \description{ Print a summary of the glmnet path at each step along the path. } \usage{ \method{print}{glmnet}(x, digits = max(3, getOption("digits") - 3), ...) } \arguments{ \item{x}{fitted glmnet object} \item{digits}{significant digits in printout} \item{\dots}{additional print arguments} } \details{ The call that produced the object \code{x} is printed, followed by a three-column matrix with columns \code{Df}, \code{\%dev} and \code{Lambda}. The \code{Df} column is the number of nonzero coefficients (Df is a reasonable name only for lasso fits). \code{\%dev} is the percent deviance explained (relative to the null deviance). } \value{ The matrix above is silently returned} \references{Friedman, J., Hastie, T. and Tibshirani, R. (2008) \emph{Regularization Paths for Generalized Linear Models via Coordinate Descent}} \author{Jerome Friedman, Trevor Hastie and Rob Tibshirani\cr Maintainer: Trevor Hastie } \seealso{\code{glmnet}, \code{predict} and \code{coef} methods.} \examples{ x=matrix(rnorm(100*20),100,20) y=rnorm(100) fit1=glmnet(x,y) print(fit1) } \keyword{models} \keyword{regression} glmnet/man/deviance.glmnet.Rd0000644000176200001440000000267511706344602015662 0ustar liggesusers\name{deviance.glmnet} \alias{deviance.glmnet} \title{Extract the deviance from a glmnet object} \description{ Compute the deviance sequence from the glmnet object } \usage{ \method{deviance}{glmnet}(object,...) } \arguments{ \item{object}{fitted glmnet object} \item{\dots}{additional print arguments} } \details{ A glmnet object has components \code{dev.ratio} and \code{nulldev}. The former is the fraction of (null) deviance explained. The deviance calculations incorporate weights if present in the model. The deviance is defined to be 2*(loglike_sat - loglike), where loglike_sat is the log-likelihood for the saturated model (a model with a free parameter per observation). Null deviance is defined to be 2*(loglike_sat -loglike(Null)); The NULL model refers to the intercept model, except for the Cox, where it is the 0 model. Hence dev.ratio=1-deviance/nulldev, and this \code{deviance} method returns (1-dev.ratio)*nulldev. } \value{(1-dev.ratio)*nulldev} \references{Friedman, J., Hastie, T. and Tibshirani, R. (2008) \emph{Regularization Paths for Generalized Linear Models via Coordinate Descent}} \author{Jerome Friedman, Trevor Hastie and Rob Tibshirani\cr Maintainer: Trevor Hastie } \seealso{\code{glmnet}, \code{predict}, \code{print}, and \code{coef} methods.} \examples{ x=matrix(rnorm(100*20),100,20) y=rnorm(100) fit1=glmnet(x,y) deviance(fit1) } \keyword{models} \keyword{regression} glmnet/man/predict.cv.glmnet.Rd0000644000176200001440000000374313157063576016154 0ustar liggesusers\name{predict.cv.glmnet} \alias{coef.cv.glmnet} \alias{predict.cv.glmnet} \title{make predictions from a "cv.glmnet" object.} \description{ This function makes predictions from a cross-validated glmnet model, using the stored \code{"glmnet.fit"} object, and the optimal value chosen for \code{lambda}. } \usage{ \method{predict}{cv.glmnet}(object, newx, s=c("lambda.1se","lambda.min"),...) \method{coef}{cv.glmnet}(object,s=c("lambda.1se","lambda.min"),...) } \arguments{ \item{object}{Fitted \code{"cv.glmnet"} object.} \item{newx}{Matrix of new values for \code{x} at which predictions are to be made. Must be a matrix; can be sparse as in \code{Matrix} package. See documentation for \code{predict.glmnet}.} \item{s}{Value(s) of the penalty parameter \code{lambda} at which predictions are required. Default is the value \code{s="lambda.1se"} stored on the CV \code{object}. Alternatively \code{s="lambda.min"} can be used. If \code{s} is numeric, it is taken as the value(s) of \code{lambda} to be used.} \item{\dots}{Not used. Other arguments to predict. } } \details{This function makes it easier to use the results of cross-validation to make a prediction.} \value{The object returned depends the \dots argument which is passed on to the \code{predict} method for \code{glmnet} objects.} \references{Friedman, J., Hastie, T. and Tibshirani, R. (2008) \emph{Regularization Paths for Generalized Linear Models via Coordinate Descent, Journal of Statistical Software, Vol. 33, Issue 1, Feb 2010}\cr \url{http://www.jstatsoft.org/v33/i01/} } \author{Jerome Friedman, Trevor Hastie and Rob Tibshirani\cr Maintainer: Trevor Hastie } \seealso{\code{glmnet}, and \code{print}, and \code{coef} methods, and \code{cv.glmnet}.} \examples{ x=matrix(rnorm(100*20),100,20) y=rnorm(100) cv.fit=cv.glmnet(x,y) predict(cv.fit,newx=x[1:5,]) coef(cv.fit) coef(cv.fit,s="lambda.min") predict(cv.fit,newx=x[1:5,],s=c(0.001,0.002)) } \keyword{models} \keyword{regression} glmnet/man/glmnet-package.Rd0000644000176200001440000000466213157063576015506 0ustar liggesusers\name{glmnet-package} \alias{glmnet-package} \docType{package} \title{ Elastic net model paths for some generalized linear models } \description{ This package fits lasso and elastic-net model paths for regression, logistic and multinomial regression using coordinate descent. The algorithm is extremely fast, and exploits sparsity in the input x matrix where it exists. A variety of predictions can be made from the fitted models. } \details{ \tabular{ll}{ Package: \tab glmnet\cr Type: \tab Package\cr Version: \tab 1.0\cr Date: \tab 2008-05-14\cr License: \tab What license is it under?\cr } Very simple to use. Accepts \code{x,y} data for regression models, and produces the regularization path over a grid of values for the tuning parameter \code{lambda}. Only 5 functions: \code{glmnet}\cr \code{predict.glmnet}\cr \code{plot.glmnet}\cr \code{print.glmnet}\cr \code{coef.glmnet} } \author{Jerome Friedman, Trevor Hastie and Rob Tibshirani\cr Maintainer: Trevor Hastie } \references{Friedman, J., Hastie, T. and Tibshirani, R. (2008) \emph{Regularization Paths for Generalized Linear Models via Coordinate Descent}, \url{https://web.stanford.edu/~hastie/Papers/glmnet.pdf}\cr \emph{Journal of Statistical Software, Vol. 33(1), 1-22 Feb 2010}\cr \url{http://www.jstatsoft.org/v33/i01/}\cr Simon, N., Friedman, J., Hastie, T., Tibshirani, R. (2011) \emph{Regularization Paths for Cox's Proportional Hazards Model via Coordinate Descent, Journal of Statistical Software, Vol. 39(5) 1-13}\cr \url{http://www.jstatsoft.org/v39/i05/}\cr Tibshirani, Robert., Bien, J., Friedman, J.,Hastie, T.,Simon, N.,Taylor, J. and Tibshirani, Ryan. (2012) \emph{Strong Rules for Discarding Predictors in Lasso-type Problems, JRSSB, vol 74},\cr \url{http://statweb.stanford.edu/~tibs/ftp/strong.pdf}\cr \emph{Stanford Statistics Technical Report}\cr \emph{Glmnet Vignette} \url{https://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html} } \keyword{models} \keyword{regression} \keyword{ package } \examples{ x=matrix(rnorm(100*20),100,20) y=rnorm(100) g2=sample(1:2,100,replace=TRUE) g4=sample(1:4,100,replace=TRUE) fit1=glmnet(x,y) predict(fit1,newx=x[1:5,],s=c(0.01,0.005)) predict(fit1,type="coef") plot(fit1,xvar="lambda") fit2=glmnet(x,g2,family="binomial") predict(fit2,type="response",newx=x[2:5,]) predict(fit2,type="nonzero") fit3=glmnet(x,g4,family="multinomial") predict(fit3,newx=x[1:3,],type="response",s=0.01) }