From d83a7bae52399f8a92c7bfeb1d77d676938be2f3 Mon Sep 17 00:00:00 2001 From: Wenzel Jakob Date: Sun, 30 Sep 2012 00:34:29 -0400 Subject: [PATCH] MLT documentation improvements --- data/tests/test_bsdf.xml | 20 +- doc/images/integrator_mlt_sketch.pdf | 1624 ++++++++++++++++++++++++ doc/main.bib | 11 + include/mitsuba/bidir/util.h | 9 + include/mitsuba/render/mipmap.h | 11 +- src/integrators/bdpt/bdpt_proc.cpp | 14 +- src/integrators/mlt/mlt.cpp | 90 +- src/integrators/mlt/mlt_proc.cpp | 2 +- src/integrators/photonmapper/sppm.cpp | 17 +- src/integrators/pssmlt/pssmlt.cpp | 25 +- src/integrators/pssmlt/pssmlt_proc.cpp | 18 +- src/libbidir/pathsampler.cpp | 35 +- src/libbidir/vertex.cpp | 1 + src/librender/scene.cpp | 21 +- src/mtsgui/common.h | 4 +- src/mtsgui/mainwindow.cpp | 19 +- src/mtsgui/resources/docs.xml | 91 -- 17 files changed, 1827 insertions(+), 185 deletions(-) create mode 100644 doc/images/integrator_mlt_sketch.pdf diff --git a/data/tests/test_bsdf.xml b/data/tests/test_bsdf.xml index 5b8b4ba4..ceaaee9a 100644 --- a/data/tests/test_bsdf.xml +++ b/data/tests/test_bsdf.xml @@ -2,6 +2,16 @@ to be tested for consistency. This is done using the testcase 'test_chisquare' --> + + + + + + + + + + @@ -118,16 +128,6 @@ - - - - - - - - - - diff --git a/doc/images/integrator_mlt_sketch.pdf b/doc/images/integrator_mlt_sketch.pdf new file mode 100644 index 00000000..533098c9 --- /dev/null +++ b/doc/images/integrator_mlt_sketch.pdf @@ -0,0 +1,1624 @@ +%PDF-1.4 % +1 0 obj <> endobj 2 0 obj <>stream + + + + + application/pdf + + + bidir-figures + + + + + 2012-09-30T00:03:44-04:00 + 2012-09-30T00:03:44-04:00 + 2012-09-30T00:03:44-04:00 + Adobe Illustrator CS5 + + + + 256 + 192 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAwAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXni2R806trE2rXF0LXT72SxstOimmtVjWJYmMjmM W0ztKwWReZKj4WTYhjqNbqZxnwjYBuhAUiPLGr3uleab/wArSrd3ulwWqajBqsz+sLf15Cn1WVuJ larJJIsjsdqg/Z3y9DmlkhvzDDJGizmOSORBJGwdG3VlIII9iMzGCna3tndqz2s8dwiMUdonVwGH UEqTvgBtJCthQwL8xfN+q6LqWnrYSzwWyK/12YWn1m1aWUqLaCRgAwkcghURwxLKAGLKMVTzyi3n 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 VUxV/9k= + + + + + + uuid:aa1e03d7-92ba-3d42-97c2-e45c757e7b62 + xmp.did:E52CEF86762068118083FB9D46BF58D6 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + xmp.iid:08801174072068118083FB9D46BF58D6 + xmp.did:08801174072068118083FB9D46BF58D6 + uuid:5D20892493BFDB11914A8590D31508C8 + default + + + + + saved + xmp.iid:F77F117407206811808395135875560F + 2011-11-20T20:27:55-05:00 + Adobe Illustrator CS5 + / + + + saved + xmp.iid:01801174072068118083FB9D46BF58D6 + 2012-09-28T20:08:21-04:00 + Adobe Illustrator CS5 + / + + + saved + xmp.iid:02801174072068118083FB9D46BF58D6 + 2012-09-28T20:17:35-04:00 + Adobe Illustrator CS5 + / + + + saved + xmp.iid:03801174072068118083FB9D46BF58D6 + 2012-09-28T20:19:23-04:00 + Adobe Illustrator CS5 + / + + + saved + xmp.iid:04801174072068118083FB9D46BF58D6 + 2012-09-28T20:30:17-04:00 + Adobe Illustrator CS5 + / + + + saved + xmp.iid:07801174072068118083FB9D46BF58D6 + 2012-09-29T21:23:02-04:00 + Adobe Illustrator CS5 + / + + + saved + xmp.iid:08801174072068118083FB9D46BF58D6 + 2012-09-29T21:23:44-04:00 + Adobe Illustrator CS5 + / + + + saved + xmp.iid:E52CEF86762068118083FB9D46BF58D6 + 2012-09-30T00:03:36-04:00 + Adobe Illustrator CS5 + / + + + + + + Print + + + False + True + 1 + + 6.712986 + 5.227112 + Inches + + + + + MinionPro-Regular + Minion Pro + Regular + Open Type + Version 2.068;PS 2.000;hotconv 1.0.57;makeotf.lib2.0.21895 + False + MinionPro-Regular.otf + + + MinionPro-Semibold + Minion Pro + Semibold + Open Type + Version 2.068;PS 2.000;hotconv 1.0.57;makeotf.lib2.0.21895 + False + MinionPro-Semibold.otf + + + MinionPro-Bold + Minion Pro + Bold + Open Type + Version 2.068;PS 2.000;hotconv 1.0.57;makeotf.lib2.0.21895 + False + MinionPro-Bold.otf + + + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + CMYK Red + RGB + PROCESS + 236 + 28 + 36 + + + CMYK Yellow + RGB + PROCESS + 255 + 241 + 0 + + + CMYK Green + RGB + PROCESS + 0 + 165 + 81 + + + CMYK Cyan + RGB + PROCESS + 0 + 173 + 238 + + + CMYK Blue + RGB + PROCESS + 46 + 49 + 145 + + + CMYK Magenta + RGB + PROCESS + 235 + 0 + 139 + + + C=15 M=100 Y=90 K=10 + RGB + PROCESS + 190 + 30 + 45 + + + C=0 M=90 Y=85 K=0 + RGB + PROCESS + 238 + 64 + 54 + + + C=0 M=80 Y=95 K=0 + RGB + PROCESS + 240 + 90 + 40 + + + C=0 M=50 Y=100 K=0 + RGB + PROCESS + 246 + 146 + 30 + + + C=0 M=35 Y=85 K=0 + RGB + PROCESS + 250 + 175 + 64 + + + C=5 M=0 Y=90 K=0 + RGB + PROCESS + 249 + 236 + 49 + + + C=20 M=0 Y=100 K=0 + RGB + PROCESS + 214 + 222 + 35 + + + C=50 M=0 Y=100 K=0 + RGB + PROCESS + 139 + 197 + 63 + + + C=75 M=0 Y=100 K=0 + RGB + PROCESS + 55 + 179 + 74 + + + C=85 M=10 Y=100 K=10 + RGB + PROCESS + 0 + 147 + 69 + + + C=90 M=30 Y=95 K=30 + RGB + PROCESS + 0 + 104 + 56 + + + C=75 M=0 Y=75 K=0 + RGB + PROCESS + 41 + 180 + 115 + + + C=80 M=10 Y=45 K=0 + RGB + PROCESS + 0 + 166 + 156 + + + C=70 M=15 Y=0 K=0 + RGB + PROCESS + 38 + 169 + 224 + + + C=85 M=50 Y=0 K=0 + RGB + PROCESS + 27 + 117 + 187 + + + C=100 M=95 Y=5 K=0 + RGB + PROCESS + 43 + 56 + 143 + + + C=100 M=100 Y=25 K=25 + RGB + PROCESS + 38 + 34 + 97 + + + C=75 M=100 Y=0 K=0 + RGB + PROCESS + 101 + 45 + 144 + + + C=50 M=100 Y=0 K=0 + RGB + PROCESS + 144 + 39 + 142 + + + C=35 M=100 Y=35 K=10 + RGB + PROCESS + 158 + 31 + 99 + + + C=10 M=100 Y=50 K=0 + RGB + PROCESS + 217 + 28 + 92 + + + C=0 M=95 Y=20 K=0 + RGB + PROCESS + 236 + 41 + 123 + + + C=25 M=25 Y=40 K=0 + RGB + PROCESS + 193 + 180 + 154 + + + C=40 M=45 Y=50 K=5 + RGB + PROCESS + 154 + 132 + 121 + + + C=50 M=50 Y=60 K=25 + RGB + PROCESS + 113 + 101 + 88 + + + C=55 M=60 Y=65 K=40 + RGB + PROCESS + 90 + 74 + 66 + + + C=25 M=40 Y=65 K=0 + RGB + PROCESS + 195 + 153 + 107 + + + C=30 M=50 Y=75 K=10 + RGB + PROCESS + 168 + 124 + 79 + + + C=35 M=60 Y=80 K=25 + RGB + PROCESS + 138 + 93 + 59 + + + C=40 M=65 Y=90 K=35 + RGB + PROCESS + 117 + 76 + 40 + + + C=40 M=70 Y=100 K=50 + RGB + PROCESS + 96 + 56 + 19 + + + C=50 M=70 Y=80 K=70 + RGB + PROCESS + 59 + 35 + 20 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + RGB + PROCESS + 35 + 31 + 32 + + + C=0 M=0 Y=0 K=90 + RGB + PROCESS + 64 + 64 + 65 + + + C=0 M=0 Y=0 K=80 + RGB + PROCESS + 88 + 89 + 91 + + + C=0 M=0 Y=0 K=70 + RGB + PROCESS + 109 + 110 + 112 + + + C=0 M=0 Y=0 K=60 + RGB + PROCESS + 128 + 129 + 132 + + + C=0 M=0 Y=0 K=50 + RGB + PROCESS + 146 + 148 + 151 + + + C=0 M=0 Y=0 K=40 + RGB + PROCESS + 166 + 168 + 171 + + + C=0 M=0 Y=0 K=30 + RGB + PROCESS + 187 + 189 + 191 + + + C=0 M=0 Y=0 K=20 + RGB + PROCESS + 208 + 210 + 211 + + + C=0 M=0 Y=0 K=10 + RGB + PROCESS + 230 + 231 + 232 + + + C=0 M=0 Y=0 K=5 + RGB + PROCESS + 241 + 241 + 242 + + + + + + Brights + 1 + + + + C=0 M=100 Y=100 K=0 + RGB + PROCESS + 236 + 28 + 36 + + + C=0 M=75 Y=100 K=0 + RGB + PROCESS + 241 + 101 + 34 + + + C=0 M=10 Y=95 K=0 + RGB + PROCESS + 255 + 221 + 21 + + + C=85 M=10 Y=100 K=0 + RGB + PROCESS + 0 + 161 + 75 + + + C=100 M=90 Y=0 K=0 + RGB + PROCESS + 34 + 64 + 153 + + + C=60 M=90 Y=0 K=0 + RGB + PROCESS + 127 + 63 + 151 + + + + + + + + + Adobe PDF library 9.90 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 5 0 obj <>/ExtGState<>/Font<>/Pattern<>/ProcSet[/PDF/Text]/Properties<>>>/XObject<>>>/TrimBox[0.0 0.0 483.335 376.352]/Type/Page>> endobj 6 0 obj <>stream +HWˮ$GWܜ|nH`X1k$9'g{l`퉬̬̈zۿǻ}Q}wGQV~ZG-7~s{W柷;*cZJm7>uNjywX-Kv{Y|@ūs3[eo7KkfCpqG٭|N]eaA/yUKevkq pqϼE em xPByb wXe؆2;>N9xdcRG$q?hF3f"x,o߫×kDo_bb?8(.pe:veNE{h[>nhaG0;H^fo 3u1DprCz1I:JYY*ZY9{ۑ6L 9z _7 4-qN[5kTo`q+ #fǟY}L_m@j:Xeԅx.`kc&:;} h0-;Qfd' AY'eܥvuػ +@tR3p(rg W @ 'y+-O8Ɯ[`vքW|@7d:.gљ;ے> w6א+Q ]v*މXjx5 +jy4uLo@1Z^ՐS=CBv-Xҍ md\KXYi,k]UY#װ+戩rNI & P!o!`$2}Uȝ2!Mb98|pSpׇ6}=c KN$\:CHW*I4WWS))d@90t38$T8th6Yu1O m4hO) . D*]5D1HCuu#q*>K$ Z;TdsAEQc+/+bɊ z >lB3t&6t ѵ֡9GODm:^7.\M{@^/ +10r3rȁH uA ; dg382Dyj،J\0jq/xvubbv~Lg!4FAM\BN0`@@atKa҉@"蝉 +#BbFP\'B`]H=nKCzς\ + [F+B 1ilF$LRlv>Ѿe2!=;iJw2hƋ2 ~rO _SpS󶸕S9F~.BD5{2̂seK4}# 0?7]峫|vGWϮ]e! :. yI0aKe!-;Chߜ0[HK##jL~1%0>Ld㔽!!*BLu3C,1Ȫ ?n[nm%5$Ƕ}ǜi*\-Nә._-P }k iN[-ݙti4jO%OH>׶Ř @[^ՠ[3l}I4c}jCP_ާ{KhKSVZAVFcP9vØho<p++FG٘"83JP^{(gJJ^PpF=\Jbw;}@@ԧ!FUg_4+v cg~ʐ Ք!e0k~;KU:PPWS^5'\cpf㤐&L]ӎ9=G!7բ}5 S/*" L=׳ʙrk-cu<' rG$9-u\q`s]ܣj`#PQ̬S7KzLӼw%=yEÈ#s{~Pu>`}#-_ < t- }^,LQ|y\) LcI2d|"]73 CEj _FM5Yæp2&w;^@,ؙ R[}( +M:ca{x9qM|Ǟ?Cp .TnR'!^|w3tN\":޿Osٗh+@~J:aGX=5hJOˠ<{]kkJ,XUׇ/|& `& tr0 (Fo:h?5՟?_PJٖ;_r_z]`^2y7$Rs˳J}1g 2^&_l؀'{ܶ#kl((]3rO +j$=ËjJ^T,ʆG:Jnk0A?3*eȎź'1o?16$q/Wy2|%<2~Wc \CA6 +`&3,Vndz̆L8O]qA>+4P'?p|It+.G do_LATR-5_Te㐆=4]DoNߙϧ:ii߭7 jY??m5X9K 8j3E m}yqP-w_c sK''E'ҕK[vm5#T5ki5d[ pncUd3P4ZSO1|C9f&Hέz3ԘA.>+60U9j`ԦmqjmAnNjǢXSԩTm#FթUKwFYaT[z1\(QRcY@=YQr7=V=x?n7r}ݏö=iBUo%0.82j@Dȕ{5ez z0PUJփf`w cu ЀqoE"4i=U"$m\AC  +bKTnT<.XhW9>h!t@e[eCT + Y}1hU׶m=KԵ^D-,uUx#&G<#~ԕǩM>$VR\D)$(R+29Le K"$}Wn^\8AKwfXu$ܹ0EQ5 5D#aTtp +ldM+.wz*H-i'wA nBTUv醷E8GvbHh6M!^!VYjMɮl͢4jHQa1St;ԟIw4fQ%e/uU2YhNԙ|iV\t<[1b|VZCKeFBn>(O3e_͟U~UڕU#++GV鏬Ϭ".xEyĉWPW^鏼? ;VrݮR/2/X=J. O*z( ~8qU2$OJPܹ"}R2[k$*YWo{ӅS4*NK-+zb)/PJiLdrshQnRsؔs҂^f6f|2U՛%Vwh'W!vҝjҰDJ 7*no7ҫ+z^s{"!6K,!f@3(sNݯ siw ~C._9 xJ.1..h̒@TR^*J,x e0xTjFcj|ܭhO63AH^dl{mLv Ɛ `Hly'u~iU__&%u*OX֑0|aYzX0$#Aj'3zL ̓'0;- |P +FbJ&ҥϡwiwC2_A<Cg/F($\f6ir*}ew(c] lKք SΛ +yL[ Xقle ʰ1z3e<7th +y4&5ΤM(MY x<{8U\9P_&ӪONk a^?v]aPFjJeDܩr N$4^DxGBt8nS,MDշ|9S~^w-~۪]շmD9AOj@̒뙭M%'2+Q2X%vr^ČZŨxG"? k@ Iͷ ?+ 'tv N@uY# gM-ziCvxkvf7}"j(=sfCq-'-53)dC\JCC T%?h-N4B^ɮc 4jU[=7f$^$F`1inWKѹ "r:~q;%VZs@Vƈv͈6:J 2 @no9}nW [7/O7uxww?>g_|vt٣}M[.U +Fȩ{oaa???AϏ?o6s'UA'c^{W|@u|׏w#r|P}WFZvq ꍶiwy |MSB{t 3Ijʻ^] }6źÛi!5lLlf1g Cm td?8cAJI(: ߬2Ud𓆞y'ॉgmq؂ǀ +.e=J#|7J%q۹w&-J\@[Jmb67ڡVχ_:r!MK V-|^bRe}/(BYp#p7 |vTmC$0liiض{e݉aarwLje'ҍ,Syy&w26YXɇDa yLp@#6bT].rl|`U L5܋`OenC9W0=?W9WB,S$Ss$k.q_Ek>LR(,Ck߱ !sքIz@hfB a,4%jz 4 p/NS&1M} |cH==HHȬ.)Ų`9y$WFޕc z$|ZDʏ/jTDo?gٵx!@V9 hH@Vr?d#3,Šg rcdlImB?hwLK +-"g0Y"T0[]xԧ0bgǹ6Rҭ)qN ?Z_&;MߚGyUN橔[6"j*3 h<%^AbX-/HGoɀG=|GMZO92.dž]%yὖDx˘ +t 0i C L 7?xw/ +I +:e\aވGĬq+~+RZY!KOlDzxFc=Dh v=2|_ݧ%(?Xڈ C).peH]]en:p!=?ZWH˷-.@S8.^$Y)}<`jt"`>`x^VzG& :4nWc5"rh _V]kt&ZFA]R +0BfIYxW4̅C}FNV HԾG2Ʀw&Є7 'n9-@p=4lx%YM\'>AObdvC<9X-73g2uV\?l[^ q#(j>z"] 2Y{K3 ҈κTMDeV'U.:=G]*"حjBh #춎)'x*XQfXhT#24%y_5SS2 +po7U]K˹%փRU 6=bMݲBs߲+aC ǩ.)(u;*=ehO 3AMTٸ|xvvKpH[lo|XSs4B4<{b.-E +OTRG E-̯:l_*V=S1rveVVF^Hp]4$q!sjDFL H}S Wuw t-M>Uqm/?́P7*Seq闚PGgp>3Q@f\c)dE/;4۬]dq=0j&*PB]%5۳mJhQ~zJZ)u$$e Ij+8"Kz/xr r՛>yoO9"8WIB4<Ѓ[N:lA7J纰QNR(!q +uIiLmc]lKW(U^߳hYR3Ad8@8LOY2GbR&}e_l!mT[\lCPsp Yٗ @j2>6b7=-b#Qp֝֟g\F^rynߪ8Ps8†ߦ|g~ \T)38G%kLM7%"{ϵpۆfȴbqRlc ȏJn Rk? ?.7q|ŀuS9!R٭77 M6m@O1ދYdUD4lVN^~@g̟wKaep-'^(l?!:zǛ|oU|L=R[Y"̔T5( wx.B LiP4AY.ug*Gz*hg/wWa_[xyvǏ_΂jNn>]c+}tETDAN_BUEЧ{g⡅)lMaOUXmեE3wY{>#!o'{;64Es[k_f}[Է*S¬Cxyy]{o "mGh/JTX(Ĭ!#Rmy}/$=<΀\ENT7،ê3| 3|TH/jiqaz6c@;OSB8ӉЛ!mx$M1Bm7wez+ΨGRQ~17+}&bܕҳAl-gE|IT쪿Wahu 5:1CZӸi*ԲUuu {R<<,~9Yxz)ca/(M!?7 tq4wrsvSwhc +ZD1]l2 MOmvP`!w[*OLC +GS{I֖z%[o=R\|âj-mQ|7IʢE\ѺרpTu!b<t&z3`i.nNwK3,se2'2T-Q1Hcj̏G;am8/od 1"o`Xv$b!v/7ʓ"^K~=`j^3Z͡؟#͹}Uޚ;ިf_Va皌 "78(#dBh./>qTGgEu(&;!tomo. [ަxm_v_H]7 rJ^G:LS+4lPXS +}~AR_v ~2c9[ģp=`\ZtgTWU3fvTV & 6tM*h_a_[MN8@$YN8]vG8 ~(\IDQ\9=)kIC8?U2޹b`ٕe<B}W2*vah1Pmzpy=*쭮HV7t$;C *UXt!Pì0 >oB=Q}`\jvvɘ+޶+'#R󲶢 zyT"u꽊S=<ܸ(2% d.D14}}y,+"UˈKoM,8Y%$"ԛuY/ +jKn(d'Ag/zQ*\CF,:ߛ}ufZ +.|mֽ.C/;k}eQR%+v%FӔc3A@]s|E5h·Uӻ].SP[p,fh{ HK}0Ȁ=8z:$"qj0Y +eP2tRg69gDl܎jvRLO;Ja)mr'BnOvZ^].+>Y(Gq^~9BZʕ7C/8CݔSviNck cvL!֖Wdr<~} W:= 2tKdV!蓟L`) +|+A9<:]MmY^ԫVV◯%ovU>R4n/]ij;c_~k˜z?DvE)ftFՅWw\Wy%:T'v #&K_ʼ9H5vɤJƽ'ϧPk6XXPœi@u`%Wَ8B;r'6n\?2jVcɺllfȉͰpM m^z _'U(]b-s]A߀(_н4N^r){zqZ(Iy;Mv|C^:&%ły&*٧L:[e=]~JUTVIPydoW{CƙϮRR|?z֕l.ף-Щ{(6hiDl9{| 09tʦ.7N[5ؙaXx)%@/\[%m\̭ +:+Jg֤k9R%rgrWyՌu_;RKR̚GN/P?R5S]7+gؚhB2=̆85 UmoO()֛,wAVBS dҌS.+/zYR5tXQXQ +_=*êlPr{j#o!6i\* rmIM +D<263/[4b#m{ +f0,*a_CyVy\L!S1cvuƸhn]'٫n%zqR ӾO}`gu~D \pwƕpŕmQ8&%vKglGSkhR7ڒQ1yM/S It1C36jP3Y+Aש& |q:˖zJDv!K>=M$߹8ó^W>hC@y N?QƑ[WԪ, Ք? +mj̖ +>Wm_stowCR븏$880>LAP@a~6zue#O|\.(?ӏ| +եl0 6YhĤҏ^A|s\Qa@؇Dlza:]"HA8ueעawo[.57̙*Y8%MCo#!dstץZM;@p_) +z #,iuC(PDTQ(6hN 1V,Ĝ> 23CߍKvy fRM30V]Q'JKS:_ $0Y뚘bbC4=.uq kTkcLU!"y 9)sӇx:EB O9V"&,S ʯ ?}Y гeA=_IJ;>e*"e՜#Y]a4,|]x{r@򍦃ᆳ.zc!Er~}~eKQb9unA,#%mƞ2 +}^x^S}MLVduŗ5 cJdU쇽 iCeF>IJ> bF3zq bkS'1vlpdQ>rεY'g+})/e] O n7_cpIyrѪ[i,bOUXl ok AF 8%~{Xp {y1iR;Y7X3[,@!_otFvtFS_4 (t'D]n #ctZhJeMV +/8tm{v n:YBO22[<arbRBkA있Qpo[|پ)r*Rם8. +zII0ӳr}KD\Q}rj<5]_ hcSnrsݻ%徥ʣŹ0gdzMcQvKM +3fsnNټtuݐ yWvY-Mۢu'%/'!-m0GW {HˀB-X;=fsJxw턦wzƤؒp=׺%&Z'e?uSȆW;ff v.cɱ|Nv qsy g%!nO +NbQ`Ś!YDm%;2?$MQ(f6ôQǶ&ySL:(OY||Z$G)!FmGEmR0m֧޴܅i:I ۰ZZۉ`Ƕ4uCX]ѤNFF; +J eOq3ؓ'ޜo6sǂLDjQ57-Jw때\6Z>P7= L:kfpPȺ=c|x?CŸ:0]s:Htf\^No_ >EWA hߕQX!*" +_ cxDt}UPz ݊ڏK'Osծ+Pz vOy_zI4m(Oi>U;j5BUsWvE%/hYEJ{-yFh =}sEՅWۛSWK t+Zۓ [v6s.v@\36nN%X WͤIKu{hJ +FZ;Pyb~ }ax֨@|ND?.p.UFHEh?L/uj s@U>A||w&$h!I7CJ=h)ĢfS-XA_CwETV7 l̈!p=ѪҼUEc\FkNQHJߥkA@c5ͿCʠmmW3i$gNtFca܌x=&[" X-|ҁjHŵg=zР˦f e xST3?>=/iNN9cp]R20|1'w83B -"@i@5hڙ' kEh,֔ +oMKƏHe 5WkE[4q.y#NKuNo!a]>؎dhάkua`&sGQJ2C@6ۏv;eB +1/0WzJ0bƭwԽ%\ʺ#TQ:gnw0g]B[$yN(-ݝdjInۚ;;uvݟ& Oo\ӪsF@b(<^׳F.-7(΄~߅:.J0kGS;:}Bg}g4ҡ~ xkh9 >ՉjXS]_פ־ZiS9~U3QJЃAJ̈gk!tvF@@i54apaԧK'J׬!՛V1~f3Wk'ڎL;L;HHzVI'aGu$Y@x~WQp!`^#нC&|:#<A +J&WH4L{Ú"]EeHy?A-#!:p /_[ZHs9bau~0Q7Gb̭5X߀_W Oخ9(9~~ I<뙄P9A!}&&C8SyZ{b[pl0unR dov 5G`NvdhIdSUb1K׵Ii66:n*;wJbBYYütkr%s(zf *tP2UM9A̖廬AV?pzZ]cRX:jJes#w>qu$ <O0c5*/FܷʺW (Ơ*Ji.:,|P,˾E4 V >ΝhShVuεݮ{un=9w6|SScl.'d3_t>eh|@r{xl9>SI4<]LߜҒk%*. ["2-j dhbQYb;xjQb +7W6V>*LB8?9rLl@n_yZ1Ht̾QfSqx߯NoEw,zk̴ fOQ D9cuzqvA]ҀgoI7O/۵ c_aa8z sϴ6՜f!ê:wgZGZMO6;Lsg`w$IXIM:"oizaN\"ĸXI>^ByU\)!kATBJ/a;`C.CY^{% Ift5](av-J|l) +Q/sVϿ_1ܖ\X _ʕ?ٗ *QSV  N|˜k +U. P=79ߐoѩ5XS;|Gwf{gK7qh=qT'nߖh^x؍U}S~\-j_ uKc)yP3+OVV +=s֙ ѵ˦'OYEKMlД1iei<{_JXG]# `;1H+Nk+TL5 ;fDSacajC}N DmmD6 %:u.C4_9)67HpGA8@87ցK[(t +}jDNC[Is8UڴЩJh~ʣYC̡`LE8+p kبPɽ +-5Pw<-P8:TOۮ;WH{k'u.-% +Ch+ @"'7B~4mԜxG]U310Ә*a i'f -W<()*/*R9LJ(_߸pm\ C~*p4OWwraK,HbȢ%dȌ whl PR;iXunoFrS]Z ^L0UBv]8ﶗ/ZsC/ΤD{md va˄*5>~SmoA˪pF"s`j!>б(`ۡ.%"kǑ & +@lIy`h&$am~h8)p3*?'hsaBQm4} wq^>>R"OͰcU+1$b9.C!_Sms<\1LLwQ,_h,<>= Unj`\k/ciTN#uOuaQ;P5 nO -+"hɇiozGS-GI-e FC!hJz=1]k2jʫ$%G[w*GbDh,K0K $;4+*A3h\RuFUvߊj! {R3֥0p^޻\.rne60G䑫;%˖DkΌd݁13X}O}2uxKn +«lxIl/l 󶟝*KY'$R5A uo{uZI#UˁS_7Bh:#w84Y^61-h?6P MLE +P"cy3Wݸ_EDR=N>hWU ҩ@8avFfm |arw<g66Gm"V&ac⍋=vYS܊!C#ޗ } ͮİvBotfuPsED{T6V8\ȵ)Ƹœ`? # 1'ym ޺q$Wlt`*1s/np$Z^\ U[XcRHw!{{CwɝuX)e<1:"unk j" +#jS +#Oe1El2 Ż^f{ݬ2Lkky^}VOAKT|eA-g|GbGU/IߌyvFKNc+{17)`фHj|>{t>ތz|t a\l'Guξ ia]WN{{rtV|&<5la&b{|LֳMZmo;dЕwaVZ/EySR=N>9#rɁzѲRT<fI EFVs땛ksN$}f0mkI(qk͸{rxvx^wnòS@Q-P)iwp(t\p.݋[9B0 zd5ZI^HzsBF0dݥW,֩$B2+ 9Νxq vw 0 +,V,+WôT謞%&y0y*Gx.$Ψ|԰!xcKJeӻxq{DYO~j!32 y5HDo`B ;l<28c\=:zlGIY(i*-7qd,MDݽ M0h? + >,sҊa8ص^|Z)˝ptf^9T5-&aΖs: ]Эr ҹl6i\^(D/1M9N>x[z-lhLK*D+F*t1%ub"LmѮ*k{ʋ"Xf6ΉZf^.yW=m9&399|)r!=[> G-B(pwrt+LeV0ap*3ln8DPMn2?%@*ɶa=gTkǣy!D[([>xxwX ʼm1$_z/q.5 +u+1cZ/h˖/9LIbA?iFdw~/}Gav%2o'Y4 *(֧GpѬMW0z2ZNmiK]B5ˆێXʒX|@PQZ;!#u4k•KQ7'(@H.DRN$%>.d[J]zծeMK*ʉy'~RX7r䟂CQ*|=w+ItEyyGHt=W!W0tIRʁR{X$)ݢ"K_%B>hig8) )|rh+dTu49J_%gn]YZ}X갷gLB)3tti#I㯘h$g[{i,$u!م\C^eݥ ]-=< %$u6غuMZuiI¥GiF( +N&]溩i! o܄)wLOnIflC+LXԞ~+<e[F&ɐTCv֝+|2om5YW2[v%7:YQ3=!EaseyLAb3R.pk-7߆ںs?P*J=_A܁X=zȧt/]l!v,@b(h0tV5E] n[pn:lV .H坣=dؤRygǖV̱j'u əΓoܰ  + b.$&Io'\fKe=h KI2?툤R~b@%wҒ4hjl^a{(hE¹6R:Yڼes$%pӕTתH뚞N!4 - ͒.{R)Hl0q Sos; J(':/rV8 }Ev^ͩe, Ceخ + wSᦁ冣q ilŋY:zW$ _Q04RUNPʘ̰$ՎY?ݥ{(t[1;]CLWM|Kz[5F|JCGHx +$vEBƱ 5?ֲ/#4'Z:72{NF6ε*_ӗ2'ZL#*w9HCXAYsDI}ތW>]] {&EI!A46921+2:yEֈ+<$r ZThsQSI"#-ʖ$-ⱛi0P %CGp`8 ^ԝeivQeaTGlzl't|KL䵎6>ӱMu MU:I'L/K"I`wOi@V>-A'8gZE`ql@3_XY?TMQ6N;KBs݉ fJǭs}2ư.rC&e8 q)σyTedbSWD_MI_ 1h +E.r6ѻG YV}mC ,'q0k}` Nb/LC!&tKI^v GB.rR63f0C"Tp[LZ2E[j6ס=bO>o#R5JFĩ/_>elUTu#-lk{JYf&#c5m>i݂V%kQ!Xk.~-O5-WH 3ɾjjCch{fMsAMܤFQ1TBC9c%rJ4 ^aTKOԆD +;Slݮc{- f3Y} ² 8`yY*ϵ +ESe,jCvB҆ØYaD֕ t2`qԦݥ ~-aH0A|޴a˔(ި=%Wju +wQSTwh KwF,p%dgHyS MNr)r +xRMbuF!>sUp#9cq +*} ++ɚ + _@k? Z3c.tD҃m6{=NpLEuį6ھ 2 gͩD[S5$GEPB;yKeZϔ|LlW3I&6i_ի&xxp!r-yg0VQ xs@ba'f:qC+aS8X=Rr93i5CWY;jyY1yQFN2HX Dp!,EwSHBq} /=I3'%U,۷;IC~IFghXKKﱁ*P}]X wC 7PW"Jl/jΦ nXB* +Y$@k2lGjnz%\ϸƜMZF2]/(^͇RHVOD5&kC삝(-ҾʇE߽ +%>fjJ.MavߩצA^96>ddzOB:> wlۻc2c1j)hz:%k&$,\n,rQ -CcC* o(]sB܃ǣ&Sv1liXzV=.xg. +ԄT*2c |`Mv)Tgz +C)<(th(!G5Bղr% +$P (QwuH+lܘ zu=5&nx%\5qo~K҂}!tdb}pgծT/+j7CiHmŦa.O=NR&_ftXOdG5ۿF٥,?bdn+>We,tDw$*?$iSRzy{g^ a$pMTdg 0%Wx6)!链<r1 +Zߓw{tPGki!bGf!x#D_U*u: ׃uxg㏟Qr V8qBnt*+Y~eRJf廠$q{4\Ls60S_/I"0`7׹z"'Y!a$rI]0)bšy\>.2gG&R[Fg҉$JG}L2qzwNg:t LwKȟ8ldˆenN"LШBxI~Vt'+H:k(39{?OWfA1N ,4zfI5̻%й|)Zoc6m0X S駅 |2tQs9)U AJnL/1bk,QZ^]Օx7*֐5W4͏1xjh:avlsV5 Sx-4`b-%%.*__z54(dQ۔!vtva0%~xђ]7Y&{?-xdS! ,U~d~a3afZqIoܟ͜ OPj2A"47F?D[)4&V5a ]iL*kpdfDIf!kTrȞ@X+DSZ~l)|‚pLc*KLN1-[\DS'UtDU] KځϹj@Swcϣ ˹ Uf)"w̞l*9VX%ba6zc&m7+>C`5@P%4MgSѷi$/csbM+?[un/5"r0F4̏ Xw1pLʼ͟J`MVIaȎE\C~ 6+6E D l;~=4K#4Y`Ya.Q + [M|ѓ_0:VeU೮-j9Rs]Dޛyð[.c{ 3RH'7\,ioX~хWL5%F'Aa4p Oi<><,>ptrHw'W, 2cQ=w^ ^Ԍ2Bup }ymGavlxB=׷"o{kT2MO];m*{/({Rw|~>^0}Bճ_@Q>,sho=(- vȬEb鿼,GJ>/#|m)T2;>1a(nUKuXSj&02O4.aaN^\_B=y]]˽ e%Z ?^U E.Uj-JՈʘh i%Q“uHҾqsD|b4&ؽ`7^>iTx]g8}2;ْ,] Nx3 -gmj吉[z 3bSc."Q;>~sw2]ж9^zjg9}[YB 'Gi%;Ii}n70_!t2gY"Q+/DaK1u-Y <߁;p^yܫ'vs7wq~`z7o3$8Z? 螂+x_<=~W~<ʃ$y9nl 1FUVuh1 +[Ԃ+df{ Q^Y>wz:+t +*Ar j]W4ݲ|' a8wVl;t>$7epYhIȇK0k ×SwKh;ew*s[sKuM Fȟ&x\mNv5mwjpr 7}#n792HĴyvI}hbu^qE>93ȼ[|KM:iTRUny &!+v,_u,56.>{5%1NwlKg3ƽi]_9䲞V(Z$YaUo}^U8"e)Vl҉p`6jm jM)ܪi?jv{7S~bqqkuxblO=6΋ntn[R\MߪO![ib|C!mъ8'FA *EG$Yz_i& ;vNZ1B]Q$DYShf^)|NUN4GEh1@eai!LWBѡ)⽧Fx"=2Ya˶9ܢB*ʏe2s5E'WBG;"7|DM!Nӟgo +T y +5@|mk&I:{j!df|\U#Dac8ʩ?C&gD &o~K8F"Fn>Q(inw S[@a t_ ދfQBkN5$]IN7_߰<5N]R E +wQWtWF:&umH +fu,z.\Ԯ+ +{<O+9|p^1:_×K[99sʪˣ=nUoTM9nzۢu9c@89 &av k>BȦbBƭNdpFXlI]k"KI?shܕ%xk?DU^& +5bkPo59FTc)4@Ix(r#/?ФUfKPrnSbOr:5 Աu2*0Un/?~z|}ؔf,.҈3I nג69 MrDUۈcA9j)y\A~5۩` :\xij#i`b: Sfc8rANbCeM=L1ߊ]CPfDY>GKh"ekPOҳ޾Wk%֮+Ϫ.dϙ^Дbu4׷qBٕpڕ\쬁0Km&ꂭFv]v j@A0s˪k{ΤDOIop`:7 +yw/Dn;^Mt(Qmj˸L/}z)OnT#a><#xTht%W7uKŽu9zbEqs;ja !N^L((^ AV[]8k(~S7B~b$4-#[[[?ܬ 5Y[7VƟa1DêvwR~ImxBvNU6*Y1?Ej[0nQ^C1{ ǰRT^uϹ-Bޟ1l!뜭8s^gnY65 2Ӻʣւ ak.W+=e@-*&,[fw) n/^5>r,P [-c:]CHN:vŗȔ/%ˎ\ν +o$zGUJJAu7NNdzo} "wsrT +zNnNl1?r~Xo׺o'u(#HJ]fw`FzE$#uzVo v*QװkT[cŲAȲ|S */k6y?/bۮͲIu n|*=+\WM .O]m|`x !! +?)?{zxW,o%B;˶&KBMoZS6Qe 1[(EM9;AЁvq&D!'rՒG.AlBs,xBxxh/+9+S2Y[kK,`6ZVOzaH:-J1OX3iW`>aY4TK%Z\<]ת|56AWFm@Ww&kl,^@rBI#80vK:!-K9D~|p/-8 # QN3WQް$NhmJm#L+FJ[bW'*I}59=3wV:}e'b=&LʃI=ˆ?#3&|54n|y 01_@]%vImt_?`.y;.x0<\g4"A66! }%~V:H^ޞS AuܲDjG"pTE=J1վ~% dr̗> ]f*&O#D~/ljO7:a\@D^rł,Y -Ø6r?!@I(tkgo cBQ9w+sF ."z0(GLR5 JNl8;snaX?UR)4$O]DX8pWI0puW\X  L ZYjԘ+%$(tQ3,#P? +EqO|E0AXYS{Y'M`veXygy/i@xA:EI+KF*Qd-h-EB!,& 7 pP˃g|^=|A}ه`Ek9#_3C&.|&́4[QRyAzgپ*{z$93B9_pGO-3)۷X[nG`e6|Ys>=GWzXNV5p9I(TMx$<΄ ;F__vv9̐+.})79uy(vA=䜒 *" 2dɷ 45Ͳ~iF0 I_/0#P`a9+i,h:֭-} +aN;pӵ: \Ma +#39]蓤voQ[)ɀ/!Ѥ^f@__=JmF 4]3(QZT&{l +Lcjj=box~BNj-h0I %7 $bL~ +K#inMd #$qh>PF3[JV1DTK;2Պ;K+Ԓ>/[/)J}ƭc}LU0{0O}Lm/;nX]Iť,їLnTAsڔd?BmG5ITL+5ۚ<9&Ό&hq| *p㣙̙>mUZh{(%y HJ m:o8e!12I'o!ǁiۈ4HDҹT&vlROL +n쉳 j%(6}MᗎQi?%m|]!m iөԎ9*d" VB>ޢրԘx ::S3BS«u^ٜ졌1 *o,P|R^%S=W##w R Y.ͅcX4,ӿ~[6~r]%8pSih$PGoo:.Ë45=C0Xxᧈ! `4K)J,FKPdavmd}ONc`(gZ2$MI3\t6-2Z6-*y|k,br|& JhjZ% A+ t +Dm9.k +nx30ĉ T6LR/uENnCqP4NInNIPXj=ԠZ@J_; a!vw]Gm 0 | ]aDNdT m6VV%ۭq](dz>u}ڻcM{兌?6oZ5MptshWEMfN3"VG Ё6U''fw&ry +;9 m{` fxo#gNŕ +A3,Sup{1ùt09UqTCeCi#2ğS;?w7o3`NBV<{,>.Ep΢Y8zRM`G,X"4Yc+v̦2B&ORֳ\܈ɅX 8ؘUĆpbD*tCe3>]zW#Y%s'(XL Bw [c3C XN,)POjAXDyö`b~"tNN_sن72nշt˶.L) ~(P$f,AfFڋ(ܾ0%mQΩQ]V W]ٱ|f=` jPCvC9pN眂} rhRhïΫ #.KnKT@ֱ@=Giښ^p}TpaD'+\e. O/Pb"pq?g aI"ޖK\Db+8*@TkHe :tn'B@}N zߡ!CsJᠴ){4uDfF0FKȳ% ~7UofY+fP#&04}"S2~8b==Qd59WT)o<̓vKS9nEOaNS +@=c;qąX7>qt(E_؜OIߏiVa` cK1:jZ>(1:n~mV@qtv.{y(1Tz0w1[^,qZY{{*vʁtu2U#\U|2P@E:,p3BCYX$y ?X8fbxT[2mq|!fesm ?jFq\temXѣa=,hݢ&_Ձ|-)H1ia0]&i+* Q0x9YEEa Lʗ3BUJܓoS)i2dRam7JM;D"ymxy>-%'MVV.pT6@jB6r`"Nk %g]Ag=ZW:72kC/id#s~߉˖T͊5oeC([.pUpB!ܱ`H푺8]s|:̈́^q*ٱ >~1o{G[#y"DEv/_^'w-ͷ8p}7fJY_(+ipȔ6oNܱ]&[]DdC-_,6GRqq>Z+?/BHIqЊb S9oF9 Y6zġ\ukCj$~auSaNgH gZJ+ZO'83$@Fᆦ%gU*IYR3FZcb'+,e\M BT[%䌞Յ0c |Ȏa>^Q ' J&=` F6{0| &rY-hm-_髨㲲ܽТvM8͌\=zX0ɧ63hú鶷jW1MW7w8ׅ'O;>>g_Bv2.&5QH^"|SцnlKCq2 lkFtt,cW]ށCE.<2~M#K / + ,?Ѕ (nW`WITZ;^ڵDk%"Y#"ROar/+-2\p/)7pj<1u}dp$eѼMnV4 *B,nJXxp#UW\^WFŃF/ցڅ1`Q*uN5,sQZTDUnDX<ԟS].PhGe܍2Ԁ7yPq "Jj춓;cW!ي ׎`Po1fS"x1Q3E*SrZ<ӇY⭖)]qXª9Hؖfk4V[ju'ڮ 7{z"WG/%錖-jԋӒ)P lؚL l1P FreI6|;R:.@ӣbdCI@o j vam/x,5x/ ^{P/%L[`P(+ű[:= ̇wzѕ0Гn MYpBފQ SFf%Ld9>+l̾1ph]i[3]*Ua{Fҝ}`힮mK~kIepXv1?n30 Us-ddKu5$m>&PT96Ě5A&c4^ HV5 =U $KQM9M{U x@>IqEh+o_nNБ +>YY͞Ho}_؝~_a2ssʅ.[*ܢ?+M A螼P3]-E|=:˸ӹx\n뱹c%$~-5=I5T6\AmD Ԭzӝ' ˽fAF@| xj<MtoWŴ|3xSy٧NKOΧ[+r@3tSիgף +-F66pq8dl#0>$C0kMo\Ʃ:/챷TOK-wo0jgS܌d Km4a2zFj}/}g|__@>b7bܒ6e~y+z^%3&}@R a̿al:]\7:`@qmٸseЄ4if< ,F%z'h| }7d`ݙݜ4 D@#/דĽzu5w$Q>@T1پ6Hq@ڻ\TvNXg{mɇ?O%ڷFġ51wɚXٱ-V_5,5_^s~N[&êJ+\VKyef/זmN5wL]i -+f&WfҤafnUhuڭS7p&_V;#݀ncV2ҏ`K}YeͰ#Qbe#d^,xhvG[ey:rٛǃ0岋./`DW)<$ZASAҽ=amu $鲈8Yä<]~F[_ yg?Aќ Vmf9/ 4  +@Npkwb/aҞ][)zo$(iׇ/:̗q]"L +؜` +;3zt;;O\ܘ«0^W@PN/*t#^~T\#Nlbia<8@c K!"3lt[aީ~yy!N^0_:~g纠ްc +sT T0UT{gT> ?/4~Wq8,uDg1K+}z<]r#6Mf(ްa\ejԋgX7/laŠ뮇sA~+ Өtw+*U>ql/C< %{Wa) +i:1C*>Dr6_V*T?mgY:/S z=n5pX|axyrV!`3vKe3Irdm-e6FJ C6h4hfGo^S .y=ZQL +7`Dϓ>)N(x7V" { N04KYs@4\M_H{Lڱ^J'Vl~_J_Iܶ L6FFwG!U]ըFV1G<(FY{pU3j[E9/N{&Q@*8Z~Yvr  +bq-5^ƝY%;i4MKXoo+\}\/I?7vht$a$]ҥֲIxo*g0s=[Kl̚9YyAٲ-b7]2&!laM!NAYIx@Ա/~8ՠz2!1 󢑵ws^,|Gds;~x|\/is\lOR]p=͈u L)YUnO`a`Kٮcrԁ ԭ܄plnX=r=5%Ihg;w!lњwBx5 +{1UpT D?'˖Y^,G~:s3% 7w-픅0P|Qv_Hjwڴ4^!jgE!`CiLbC]R:饸{MgK^&KfAhݍ&4QUX{Yg[{yG=ӅդFV`{ uZYe㕾-Dωl::gr?jcMYeYPN0fwx=6 +5B|{1Ne4ﹲ%[bTj.^A;\OIh96;-yexHs|U+ $hmlH՗t0kmmuʤ=OK24,۵\DDPvҦ뵔8WFnTpz; s7bʼnN7(չ%[xLE͆3"?5>a Qsٳb.u*։Esܜ4+_sX{R̟vk8}(.žv{zTJM "56{܄&Onj =ݗ~$ Xì_%n(.%0'8 X7e˩tx6ڪ',,XxxwAw:آu_zV' Z<s'qB +9X-m')r\$%qb &5u?ZZ'N)Ϡ(Rq;Ng @pyV(\IeC絊܀ex <Xp9Qm]`ĎY˄'|̫݌SLѼS?9O"c^55m=oRUT#fX`Dx D.H]~WAGfH>ךNLJ%GHɵᩞ0r>#>dv˩jH+,'vWJ} ŨHK)EOcnDt5Az(q Re>mMM7G | lel8'0=GEzx6 ͸&prMa$0v.3 k1pl$ڬ=7 0xU +y.whDLA4Z2ayכ~t*?l/1aJ]xuwCj*t?d_y/n.ն;m^зלV®1jmZ*l4|_y@S\2If `W +2jQ6ycH2}-wppe9iAsھV8>5rxW+[!NFGjM˃96ݰ[0j_Ehܬaλ1{6R'taK{+?咐_+lK{]M7+gDvrP"1nDy"Nʁqھ1 nKwvϫof8i EcuU [E?4(=֪D%4;2<י(!0JXةS҈u낄DAs1!ăʶxim]zyĻɛ`dӛDFH1|GM;+Qv_i ÎH/Цb"D:M*;/=i,itOn}k +lj:r:$ ,U1serꭁ'}sav׶AH\6$3Y O9sy&ڔ~o>iRVѴzYZful{ >.$#[˴.yx3,@^<, +zo/nܴ= ++dRxRf^>Y5U zt{}0xre%V2WZ\'zR10Vϐ#wkvuM:m\wj2#L܈ ڑ ;8V+"#_5J ׵9mLif% +u/Kf@ nQ+҉ ~ +PRES=d g\\j{k=`fCpT<oj̀|-iƟ_V5gܩ |ҢߢՏ<c"5 %P7?`ΚQ‡'4w/jDu?՜$B9.6龽2Yf^N+"VU9Q[H|ezII ^OҾ(@ߊT-&^ְV:iB8F +.9M] g -JiΣ +>4ۺυ?#N_7P3o*Y^* J0Jg0fܲR;Bӆ2qwckkeJse=~;M_/f㑏NfCϞ nL^5DgO^]r?@P##F߿GUcD2Ft 1LK78`5'7^7!ZTű>ؒTQEcO2bO=͈'5;ѴƷRi O3MM~) +`^i˯6 ;K3\Aa|逖bqTlC wOIQŒ +Y͸ݑWgd .K+6ݱ^&òOjTWIr9 8 3 ZG@"V}eçl [̺jB䆢s]Q+e0fi ;ɣ%9hM]ctnSiEY|!g5H 4g#FΐN#Y K-b20@JxOGW08Rh8$0Sf3`DAH8<>ucjŚffmsdzq%ۄGԊ][.n#YxZ1ka4[.q/}%KU͇-_[P5SڋeG5q<=4Dl_+>Ta{Zã,kjbxBdLt2]s鿂d.+c4z1?Ou2W,3+xH&}խWt={t 8"i#Wp~ ? +TPCzrifۼ>% R Z;{`1Iut#S Bl'cx zX'}?oec(P?1: !J4@0›(\͉^ c]?^7_Ԉ'jL.b:M9riz x-PDJ+=$uՒm3v՘ KoDɊƿ qwC_A4mW 1A rCn#5vp0+y !t-"tXJp,.[&&t~b,J-<1w`%Y:I +-v2t>ᩎa\&?+A/\@5~d1)ThMJȔC+R8Crշ֮-6ZަuOב+ SXA< =}ɓy' ![5UB.C^/YMv9H:4f +CWC] S$BOUR rҊ:T ^PZlܹ 6|W!s7!M5/y@X8w>^p2!R^>{>[5Ӛ-9LX\<8bjի?hgvś/lGL9*A]yw3ec|D0w]#k;֏[u^Oj>t_)/`]cjm T=-Z%uKcƗu~yBգe!WH$-[kp^,y:[\8<^NjY hLj`,!9 >5 ]){2m5m |&U?pW $>߹9ù1ATz`%_Ho' +;,[»(aai".$%j28ѻqOX:.㇓K4K# ~, 2[&uwEj؋>_]^TNFmxp4R֎㗖C`JS#fCvT0g:g`]1qEXmpDm&u]WIt\R 7E\I"2էZq>s>rd𚧩a^MUZT  +V<'zLnm.{mBS~PXL@OA|`܄h8@1-H&ѱYYb4ƚ.E+yϲD $Zc6߻ܦ(=qsVwS¼tW:guLu!#!#}/yP sjub0 +Xas^fćS %3q4p4fOzپ򤘑(Ӭ >"K7>=X퀨^fGSS .ۑI, 5L}fGI"url^|j1@kIɄhm@Ԥi P''ŠP`WeFPnp$떪Y +=[P[^ڢ͵DK- +,~cZ{1̹ !=&Ѓ OaZwП6{ӿ^  raH"l擫<$}OO)Qe+ۗ5r?Jg ^q@{`2]扡ݱ$1?DD·z7N}pb^ள1AO:Y}aAxX%3;nDGmգM-!h=[)=X=l'[?f8M=~V$Nԫ׻CNtXt\}ʫtAܞ]qb:OB/M]_V!7mS{>/@:j!|'{O~|O +[P5_Siqo)GM_~[]~?tl$o~t̡wah c,T$}3nq{|sj砤T!Zf(~g-Ke=93I*'9^$z ŤTAduͩ +-l4J#ǶYO߶َ|k$MrjkˎvLpd6)O?.qA!Lz^G N{/K A+a] *^1%6hVKΡ)qYmL"t \kY1RG2 UF6hXJ"BR]c[JNNMc]QR\7_lf-7xFr +waRxEwgČ[)&Үj2Uȱ=Ly6+SqY\G_>+U5_:nmJĞkpvBiiLàL1OX?MQBQT +jJYW5˰/?Du.Lw>>G=M/$k)3]Fu_>>>}gHO*ɕ+ǁ2DQ1 zES1PiEDqOPi,Uv oq{^*O,ykA]gF֣BQ]L11jWzֹ[Mmvկ=J\OB5+`?H*!+z[%΢{e+74[vnp[ZGCN8i^-TL01"]%{u.e6܁n:"NՀԇG$gc*.ΐp/r+L䅑S=4te'~=̢Nzy`짮Vk,l8]i׻mG1%5~8]^ȩ]}p8*i1^|޽}p]Pc;mݮ.\q3Qc"hT i^BEпȒKكBןuvR+~ n6.8"֘ YD 6'v(bq;nb" +yz !39p~Qn"\5El8}æ:(N ,L=>=9uwJU\hLݓMfWݘݗ#dL8 zNB$r0 (Xѹ2|Տ;b]EV|EF0%$ +#tHpH$~ʼOM!3z}nWSt}6o|Ta#\F. rN >VʟBs\;򟡦Ѕ_y +J|%_}!Nie Q['VI{8溑܊D8oW&/6w_m14p_\[6{.|)'ԳOV³^AVˊļ~ĝŁ5ꐜh;.ܻBgpY\ ZIa8!!m&{J*'nՈɪ֩/zuC2 +MSr*| : _~;~Ipa*7M<lTDg9 JuKx ܂9o 6:|I54s&5vCC0ICAByݡf+)1틛*N;H;5u< 컪fbV-En-~„Y"״;Tdɱ="m[Ԉ˶ ^ִد2 8s3,6ϪdKnl#ݣf M==i廥#1S|;$: =#}< 4p)ja:fO%ó'&BM$2dfpQ 7X,\mvzn乳f? +iуvaͧ>!%h,r"=G ~j2Ԝra[xTCa.ӱh/3#*%42])'SreҐ~'O'(dWn[K2}W`)S7 DlJ$8=_Y5tlJ8waUl.jJ( E!b+ +Cɱ4d9:"GpF# +iUk:uŶ-xRLC.EuFq:[O$[XZ2 R~ L +f'tC]!Vve>hijmඋV"ҋ )uq+@>唫YrJQRQ%9^jZ )'&)Op[W9i~ؘYzzVIN۪Zı*In\qxu ^Wr<{JլcD8#Kl}nTD*nE*F/xISCV6^0!\\ + `p-uXU<4D|opa)<_ SLp6-5Z/k,֧ @JQe:s>RtL4jT6#G5ώB܃Fw$NƗ@W,í\IrOW1x--/A(|r^L tԶ]/ٞwG!([gn(IbM+ğGLSRMTf jszDQ!>fabR8Kr|rxͧ.|٩Uj5e0r3\_MgBFj4)9_"zզ-23{E[~2Ѯ+} 7[Cno*)*k>S?j1[]?e8QUl_D5&=^"3Z^5Q/[9LJ],UQI"dqnn0nr'*,%¾c5 OgT,Sx+lvzG2TO9˾~˩g;=S|U`I݇ᱝ7 ~Q)0e`'WQ'@x1Ec Z!lj|Vk;,*gJ{IMDP)|5] 詠'鑘g~Z"?ˁ'^ؚX.|9:}׭JegBlT!. ]iP?=qncKn/LX՛Ddq(c|y0f#^0@FqbN/Z=cesT>kΑdHITeh<ou[4/DE=RҫM5\͌r{I0¹k,wkmIX$x)Cm;/C{ bU{ga>征K5w/t];q:,#f53gt):u{)k%g91Q ܔ}#|r*_%oʻ~a L" nxʺZ}ϩr+qFܒЃG$svCY +Ya;1d?y8N֫櫭IOط2آJV"Y6tamS"OڣMD]eeu4xM/@HZǹiFu<㋋MpaRq_CZO-? H +[P3Т(_퉅p! G`x0&ȫC^,Q7 bꔆ r ~=ַޢDG,14^Dsw<~FhkyKMdcaw[.7N}{-G4,>aBmnc΍ΌP wzE + ieC Xs,)fU \u٭{WZJϦL`UwK" 4@|qvp)6EU'G+B~0p}O>qy7.iz-a߳+ C9/CRiM J$mbn!)\Ώ;}ؒF\lXH?,M(u<>! !1" "5rg7ֹrxP|}4eEXxE'IM'׌ChfU3,>LbvhP<яBa.2}ʠ/slkaP,>ÌQfӪL+mv!ذnA`\Ӻdm2!84Un#_`u m)ll. >MGOʧvQ'7o,Q8K)Cj[,^"mODCP'Knp>./}3Std!b-\vˍTi^!\͉N1#ا !B\^zWV)uGj;WYKÑmܗb'dAba92$ +/&h!Ԋ'Z1  +yd8)Gl:D#ͅ5>ςE}9ч~d~5K]᠏b3#՘),( O$d ߨu_OȲ)Jr| +i )N +]-iv"rsGÜr}9-p4Bd'TS=%M) !x (c:v2QGA!ۦQB +iV95"!:x !@cKb$AX0)JCz\#|{Y|_#kIe xcW#aE#m?s; .v&rb_1XI3ݻ +LLgAT2'[-I 8S19$iƒƑ-9O)/bc yFL35uďXVG= ktMj4kk֕B^"rRHci& a|G!fz2^ix֛qd~";2O51;X$X*;l-̹[Rpry)O]8z|9^\W5 !#yʼnCh%Zcaާ %9ë΋`,ح(~QLbF<qAPvVI@M s>hKe= d"1н*ԇSyr Aä& Q +FlRɂsW݅כ_sVݐ6Е6{Ume“&1[C FJ"S&SzkTI+SC +ʷҢBd%z͊uP!Gvd ڡCA0=sm6`D L*C+!E^ 0@xOUک=eY@ K 6ǾuºWL[`;JiKe.[±5Bꚮ/tj+E.˽@5%k,Y=SPK~ 9j9ƫrȲ(İ+l;˝ +HOǃ_ @/ZSێ#znNu*+iTz^HVx (9"57.]-nCUOE39vcu|$ `7sn8(O|.83}p)23g(jD 8qCA{ 8N=6C=DS}m42 @]oY3aMJ9 + lzz["/x@.߂`}Zr: +=)"ӓ˺Қ}TSBуCZLiog4uJkK].~iHgCB'N9dAZ;OsҦ*i6s9'saLmP~Oe]  3x?zoCh\!IEGBQ(uJ˭Hй١U5|1*זZ(P:T>!+=UEsNŵ3pOn6}I~69eX?V^;Q/SHZz8bQ9>˻D$+j +YG%9(Z';k1o4׈B!$IjwWECLޔcﻣ`W{#U +ZZANRZ>{CmQgKQOo6Z2hbc5`GNL>Q6o9 !nX֍jX2&gӪSS(.7u̸2S[; ++h ]-PLd)kEs˞t.nIS|w{82M1nNv:0gI5&莎ZF/f[(YF3GF&'Pd}ݖɖ4Cxj0ko'c<(ֿZ,&,M7U-G0Z _/ +?AJs{>v?ר,0&nǟ5ZLm_ΫA;D>Ez! CՂvopfjֶz+ܕ">GͻI%sѢi;-|؂dD:x{/YIwud0%U†ʹ0_;|eW2((ըTZ:BؐuY-lu`Q LZ]i<;?2k QPޱA aV[6[HdHT1-(SX- 1GTO8涶 +ե=O?v01 b7L ۦD_&u-&Q叼Hʋ|s)hP9S- Up%/^o\R{E,$)EJ34߅Զ@bv|b&[K]oChǐqz]ɳ]5Ukp:ۉB*lThY_ +e+5UqR꯬V/㥯!F*LEau-QVeqX@G' pBWZ(p2^CQ22CExY8xj{\2, 'djz=[!P句iMJ7ȒXf?k0"â_ӂoeb +ҔM*/>8 @aX| 3ʡtp_͔ F>AGj0G~"6d"CSlj|/ ,C\Oe.4>M'sۢEkiyȣ cnTk`a9aR.$EV\5^aNɏ. Mz+tLq !]as͊W&{eA'5IJA/$ c2oY3q]%I8pߧ |3á-^fuD<@hpw%%_&9ڣl.}9x!+V!fąޅn*4nϣ3*QX:ݿ ʡ+؈.a7S+Pxrt m^N*}t 6s@]DjGg-L8JTHbl 4 tT >m7!v9kEX/+ۘ KEl_1K53p\!3 HF?L=z!sS߲P#8d(>&V?6v, t"r:lFLQD!HpP6̙֊ +++#* TCD4,ysP^mE޶6Ou/wVҼ$T~蚚V\K& Pò V NXDMlk{]ݱL]CPIm@6%7Ñ4dOѿ~j[ñEDSvidۜyCS\ Imz [[l' Ƚ>-}l{mƳ _ˢ̥ īySG`&ʦ=R7V2k;15S&(8,P%m_!u_'$ŶΣ )(Y&Fcu,zV}I[skk;g-J_ܡNEL*F=ۏxSPp'qxjF3LY׉dÂRx +==r!>b]__ϐcUmc ztJQ/OmĎ/2@+2A0AgԟGx>gB P~bPoq#HUNc$e6x700,FpehQ}f0w-D u޵j$> gC>T,>O( 呡a P KRpHPj#|+i--pN8neޱK#*ҕTm957U9&FN@t&dHCu%䧀BS!_jk?΢q,Aj!t@Ej0= W !T4B!fO˚7|>a iha:&wMMoĊ82>P+ ^9#mwJ(pЍ NG3IqiOs !}pVJJ^R$$4vؘҫIRS-hmqU&m"AD+\>~ȗ$ۼeܜR{R6aK>q0i(P{5U4+Ѡ+L}j_faG7?-{C =pT4ɰ>z)AJaeuŞE}4uE?,\NbQMׁblY/=w +"_%{°^j>cDͷKWVuxznLF U/]Rc3qf^ט$狵ӷW S%^3*)5R۩ƕтn$ոDe}H/s [5czUtΧ\|[3BWˉ%/:kz*m2aעViz(*u/*1'v0t״UZ9:o9asK +h4±БƫtO #-09MB #emhݎa+e"&KzeoafI5?mbD%Փyfa};h@Td@i,5i$YԠ`SyȖhq:[Pw2~ݶ3ҽ@J&#m%l$85 L9YG_Z0]ag퇍q+ NQ]TBި`G6z?͝}~ 3ׂR?bG.[VR|?IH܇ky%QE'J45KOrNA'W_ wnrn~U\S֎N+4\1MpĽw%PWA]뽤4`0 !z&%wmyZEblSQ1-:-dRōq*Ɋ>dfPLv`Tx)$J6_.+ +rӏUʆ!zqy(qzS^!){L,GiWL,b:tȴ#$#c?e.G-w(V۟6ɓS AlDG- H%2Ja =x鱤 :{X>rnj/v^n/gB*ރ\Ȇ,RǭC5չYeIJiFnGwIJkym"4lgW4VT=$jQG jMψӾ.3$AnUʐW~j$!z?I08@29%QU`(Nijl+4Ֆְ2|].i7. ]3=a(ǻt,i zNy8E R,*.{갡~ YϨ3 t,YCWr3G31Lth!͇rX!GhGMGȨa a^##Cs`H^LWvK,v$ `\ΰs[a9  +Ɓ"- s(ՕeA$OeGIU +#*RKpAQ1i~mS`X9)IAʱL^Ь}'hԊXa@%_R.uėx qb5`$0Я;5a(xp֙k(h 3ّV[(cYէ۪p6Vlǩ=)5(V$ɮ1 +jdQwuWcO5 M͚IuiP&$i؞iV#/w# +_6#ǭӃXFݺ2'*M|(s2Ey2..#ʂC )\4". ObSxpe.]PiX)3}Y_cF,ؕ>c6EʫcϷmb#ϧƦd`J8ͯV+]%Iv0lSq(Q6_mi8tg- +dЪ¥'82ݛ=kdv +,T& m0JxqW2yvPs@vКԀos/0і]Axh #O\s_CGP4$fT/:pۻ,25\-YKtm| +ar'Yz +De +7xK2ZWج(VnWRk _&$՗\W teHxI1"KU/Q֢}z=F6Hn9|ᰠ] +l8By {Fq!nfhC=вe@ɉB\QX."er\]f&88PQ>-!dWv-?~9Q$ܙ8aUC#bOO;ݢ"಍a;6sd]uy,ՁAPP.`QtoPJtͺ ޭ.|Le/_ݴe N +de?%e/5m9ASyKyl <.5 kկ\~j(-#oM¢>\e7.BbGk>u0ᨋ2,{SDm[x7 ҏu焐m 2F7IةV,GtсE `e(^ƖjmywW"m_'ᶋWASpouqNl29b 0~mA.sB f:&@³a2UW3!z 1b{FQ^K~80J{$8orq(JM\FqC'0!NR+R"JE/m *Z!1jPL9jߑMжES't%$JS˚zcH2zy y!*j/nF!w%6>M +o^j Ħ:d iO1U 7v |RO5ĕ0S;w?8Ŵ~\? =)22sHQHrLpT!-Ow6 P^QdZ_Q:Ǹ)jSb?Jۺ\[hCPQS-kyUV=7ھR +liOrPK ljC*_! !Oeě,i +^Smtv +؂a=b9T[0"}ZMHz& +lYs?C/<ڊ Tk" +y}}C|~V(Z[X-s) .EJ ZR۸嚘jɷRa>8BLAӒU?Q) +d&w楺X2l_9.bLʣTTX9)/_=pYU}Տ[w~YݰdKJ#5Sb@ تY4lY5rCB&-A'C>yWvY[ɿK0kd95XAZsݱGRI3]HYbNFO)79#֤S/RM%(t,.5#~t@0ujil شV! ++lz| +Eמ (SW#lNhޔM]2Q0UtY Nh~#$²\k~R2#xF)Z*t)L} +WHIxBr8uVe&+O<Uk#\6z`,Uwzv>)8/E1nldLh2󪖪ϐ>2]˗Mk!C+3UI<-xV|T0Q'ކ,&~y;1 +mv]UpMSgD +IR$9iڢ:[s{%L\UG_I{fG׳'L +BSlpXwZt߶/+0,q>6vT` @IS$UO=ۧԔcc6 ^rYG'o~> T 8Sf\>IF0׳ +†]LV31wu!B0}ytajaݿ={wD?*? ;FL\}C?㵽xWzӛ1{gR]`zE @4? G{]ܩ2r.Lim/[ O`X߆ʉQH8;ҧJ(XMuխ3E( PU%Ywtgn' Tu2r% e*fo{cc=ekqCԥxy#P>Uj\ٶ=z7zL&N +Aj\z;5 +9ͪPN{=1nsqt69AK/#ܤM8VFp^$d$B;qOӶ^)'JΩNl9Sd˗˕^3 qd#XNsm]0b;ܡ0NƨQDA ~bL1ω}QU A5|K=x[֐r?ոchXXϥ6` ii +2g\r؈$|UsDo)稫@ ș/>d3wro; xy +­#^Ia1 J2LqAI+luN7kY8yqHY[/ + [],#_ʛA5Zk#h8#$۰%S×}ߏDDC44 5AfH,*hM# RAwl#!n;V. tT<7GS fZ] x~uSr%E{ Q[!Zr *Lnx:{DlzuSb?8TRHMwqh>>:cLynGŘ$Hmw/|;U;^{3yMpKV(*}, WCJq6xQgxj-`ToNj[eJFn΄p_Xh'va : 'q +@d}d=Ym}&7TJK\%;R9 {/ڼT)k[ݶ0kDkOg >0j⇎0kN"e/#|LkK3o)څ/` `,VB!jW!iL@k8z#n1L8 Sd{olScX"e ud} ;npn0ZN"/+AW."Py% m3~=~:גg1Q,(}[8ӫz\|z!L U֜^uXJ%1&gd :zЖw25`vJ1d( +%ŲC^6ެnhO :GBk'[S +=$K&\4h[oq%#,vvR-ғվYro !ImErO#߸+{V2@/Gw]8jeflX,L^kNy.ӝMr`'Nݚ>rN _{mj"H٢h| O>c%QʯSOE׼gb@]ܦ Sɲ@H~N!k2ty8&IAo]}O5ksguE;eڧ> t +{#Dp&( `8 3fz$yEK};=hRW2KHG[2Txf0.4j{8_9TtkֻGDzugV)dz@ӱf⮲/.j35KH,˞Yeo'Mv(ǖ@+yw>/QH!Qa2~Q /OCOSnIܗiv /ͩP[8 -aUe;*AbJ\kUfƨYrr'eWltu '{")s'=T])~ܗ9c@ { +: )C< +˾!1om{ֽ ϖʇP/uCE'tM.zQrW}ghK:u76k-^'}[!nֲQ+bu}#20}wu<5gJnQ*/M\#Mfùo")XKV\wu#PXmw;[6Ě㼬˸L΁Ϣ&,CG5<NJI͋Kj ?*G!G iu <¹G2r!SĄ*N߾ȥϭ{*i\W''Tퟲכͪr=AH%{5:<ySrm#LC@K7lX +黻D52InaZvJ_?0ʬfa@b$=t 6 YֵԩS&fT{ڕwfjV5O&Tuov%:mv1YUJM9w؄^`J=كyiu0^o*Aa|תěmDRX:H8#Ժ(Yk(U&L=6МXm8˞nzme1ati2Fzp~FRx9be߽1Ce.:d!\mp3T瘛z2SI:Ise[nR9aV]VQ}em<?{I2$b v^oBJ'07>k6 Z9=i)Iű>jֆ,~U$Փ3c$~g +w*Į怃~["ʦ;TscR¢<֍cjiՅ"%TN5aw +Eԑݕ_e iۻ]^oyvM,֢Js#b ʲ(ŋ0!MS7>GЮ$p \U)8C.G89BƓwۅ`79 eh]} $Q[ѽ׮g0adD6^.0!֋!cY%? ^pSʐ`GfG+VETiVw!Zz±pd}Lz 4n™ڃ3^𳄥QνVLum9|02J={B0vhCgNE[YoS!4f*23HY#v%. &½znfab,2-)?ӆ;|u"@) :lPi2iDP;%Pi[SCi ځ +܀`"<267]h F\zs}E~WK{7H +Er5hq؝۔N="9WٕeǰDQӥ@yp3Sѫrj/+I01+Lk$ / +ž=8:@1 MgO)떆cX*O^8S'`aH&KŐPve+5U62C"'4j݌Ju1z(tv8UYBtX&ZX5khۦSP a}0Y,AvOrp $@܋F sgSoܕɬ:Sb )|ͺ\?Ed(,[ĒMń/ ARG^ቶO*}UUeN(Xef#p1c]9>5v K+W5㮐Cwώ +8 U1rתaQH}NtyI.۱cI^\6F -lKyzzWеiV4]T)s[c#g-D9KkwrJh +T|@m`G!Ve8#.e?!F[JwAe":b}]_[FeJ&4b=!C'ʋkԏAEvFU*aUiϪ2_U>zV*UUUUx']]!G^t2q8g]鯺'ҬYd +WYYVꓪ'Ui/^TWMod ϯIu5C9A,,؁v,*5 kbѿU*zO?@U QQ"yd/C˦0WVQ+TyE܌3NUix^/3ELr<#H3҇C-2/搁Jq]&rYU檚 5J j6`v/Ζ2boUh&?dUhNTOl)mF9! +̠GQ,Ұ@삨,>! *P&.xYGq2}rup߈@Z4Bnu[hqWc8V!yoF;\Dl(Z,^["g,1Yi?X)r)ck%bYOc4>kh)^VY,>$z oXhZfg_TsCz{Q3-F{@P2OIBM#R lG>V3W4=, -^i \$Loo[F'=8!7Sg#15|~ڭhB` B(^d;(31 3S"gUcN:l2ӪWol//;S!x³^TGI;Wi`(|=~-CZ@?C P l#3PCe* +ee7*:Wa6} UgM$p)dd l_8Q.ocT :TG,@H=d2k~4cezly,uDE4N pH%Ҽ.4"k$t0gTKO[!с_B*DV0U_v->vO[_%44ԑ[4N=V#ФT׸Jun!ox變ۼҁ8Tsd,Σqz$*sC?=I A] +'ѻFU_$MAk& sT2R[]P3$ n"a zt\ +0x{0BUd\}TayujHpz^9E7Xg9w}r])3I j*gatף|P.MՒ&g)rI9f)\M$R(0ɬnLX7yuLxvˎ?n ~ml/*kBQydDvzb|:! +[{%eN" ahLxm g{Ǜ!0y|Ǜb ̱Mw^Hl>.WNuKW|7w =%p݇oO?b_p*}{:Y/ép*wߝݏ>ϻ? {~ndsO:>+@~|d><.5wtHĘ&DߔxxE͚qܑM?6 7')t6KT걠@?A]s7-W`Qg@*YVϲvIg8RmE[u#|d|Y +rNXFgSUfġc!jӜu\L\q[+@σqjՑ mH=lgiضEx ܝxFa +WZc0 3Th=U;L?mT*^btܫaXB#G`\3\.Lv&lUpū"SЭPs +挫kOMԞZco%}]/UOC,y2 \KĎ ;rRirTRR^ypU9H~<7N=XJ.9U> jr1r7$} ])倇g !^n|e cpIZ%DssآG!FW,% fYڮ4TTαaovby9>:MψJC*Y"Ŗ-pP220߮'y+h +xGx~Yn$PT%8B*YM%$EYvz=!Z.af=< v{Da$!K*c/7dU -`RUYbYoAre桍&FAN@"Eu$K4sCp_<=?e ,hܷv{d1\:du-/1T\.uعn?18m5V=P8=y'Λ>b?Z4"潔X5M}[cR/I9Z +2˓.K|CЉJ^R)醶'!qnK|Dd_ⶹ12@G[HQE2,5rZ37#<DCS4ZHc11$6Mx!L0AC +Tp5U +|nnO_BbE[Imu9hXm]PUh믉^TO:*'e*p(EufvYUFyZ29D\_cdG3F,].܊ sǸ>((Uq6~4:t蚳w0yNCo|x? )@qQ40D%R N6BN-L^in <)8A{vRvo4Qev+D<5 0K+Y_xi'$ hh @669+*U抄 +s7P/K݃d/qGN2쫳d5Ɯ[!v|^>7@`N9SKB:ʯY#:}r@qtKR_'%OXp0`rt- "#6΢rJkꕦ)GYgA>w})Lu4~Xs=kM7AdUQG";; ꮏ#m +-NdFoRR栌i"&8-@ rpK}bs= +ǾFBwngYm7~mJ5S1ş&Wa![hWG[R4lfWNH^?g%^xF +?_FGJܒOgW%9*^.YL4%>Ț9YٗO5HNWf[n8];RLʫ*0mdpqڿmeM]S*p ))\MQ|u!zYQ89*ZYw ])Q뼜_QRh jڮCS7Z?'ن4V⁑h(RfJ [K]d*`@(4!΂f PAԮ~?V̝})Чj`9~2"gv-%sBg/S1i~yf&m\rU<2 p6h *D3~:MyzGb\A^ڏ 7$%~I_FzӮ棛Qbb%"m-IY͏2jЁX)íC;*ML"-*RaP@eJiUf y;$k3*\w LqɏSvѷ"bdmQW`KЈmDz<$=e ANJj&<BTu[B ֥`C1۹9XP`Cw7p1{Jsc N +>qsW`H@$`zVs-[ekV|*=wh43߂7xIG=޸,CҫQOO9iυCb13\kftܽʣ핕Ou5,HW|xQlD\ +^nd);m]yafFnffv +4 G۹պ&'ԛGj3*VoryV8PJ. Os-R6z.:S8,dz^<Χ_N:\l'vu}@3jha_Oxwԭ>N_1͐GqJnrDrb>K$8PƏ'8'Cj,QiZ4<#mU c,zUyqc2d[VŭC!zt|dK~X%ViSM5W(m!M ߇E;p%66{ o)T`(21qE)+Bs\k?XʵyP ǒ?R+s|ʽlMkחzVtid`_ZuRv>%[kNm;FZv/|O`-kbvWS0yU~JAu={z4ۥ :[4JAm\NKfOϻAOko]-jÜ9Dxc^JWg./{Ch\a ecͩ|ygEƞ +GϱX(1?0{RI_WQmcTWS, >@N!֗DȭZֵK13@++Lyf>cWG߲N~ċC((=[+8MmC#9*Y4QyÝLS(̭ NRZ ֨w%V):)^3x|d>!I^Y%Yצٖk"fw"+Cvn|gdXKG |}Fl1)͢q ?S'wxT=n'klUڲ1>&gT )4G*_6EhqےTΖ>`e4`0hZw`YU_%'r|e(E̛4>jFpMc\.&jpea]Ia4ȢO lϏ3OJl,]td=e%L><ߓG4NS?D|Xqj?3!3>zv:L@&Xz=<>;8J] ?}L=UcrpD (DOMfբMFJuHMkpTTb8eJ5xL,xz劍n +QPy~(tmP˛ JE1h\\C{ +vrs,4'qfM/+S4#jtAy敻bW[K>iy=PT"7Uա,*4 rF# 1/mI#צoX !íЛom\l*%Tk~R]oaA׍pކBVw oS׼@jKvB,C64'iBۉ uE.᚜PQ' RXw!]ͱ);,׍CAQsVb@rvߚ@SNi젶vܯɡj@$Kʮ(G^47MT0N{{;||b<-ȴc⇤^+&j?_@ @DzȰ3=.Xnγ +oO")JZOv;L⫔J?$pp_Ànrtk}R:BzNF%ɲ}Hc[0+ixCWPL@J,P,D|8@0TI4닇_-V] ;|~'ށ* wo}唙pIJ!Fpu/hp4lfCl2{j3rًM?:έd_(9:ζB_Pvs֔KpjTyk7,O+&,2;_Q7irBfle3q|8`'ja(g1QbkU7j 0 +mN- թѝZBT<5MHO\c{a5co_h,UY7m+~]#ߠ[𭎬1V;<\ϸܮxsg>χbS-[Q\&ӎ/lZGMM +$0SQo=E!LQXq42ęϨ C2/\?&vI͛ʄʴR8OQ0㋪ 5Iab*]I\'+nҌ9Qo!VkqP~{{ '_x>ׄ}? )x^ց4:J;/gnN\7;zKlZlVRO ĥ@w ˿t~?3 9DBBqD6 p|?7 e{]\O׃k5624{ rEF%ݢ1ڹ~iA47r.04 ;!JF7їr$K=鵃vEuY_]"dG 1i,a:UUuqEG~0 }͑EF\#Ĩ>6d[PʓԥACғ=j!C^BܑkcR#kPjid2y2--@K79k^Iæ[W0,?Jb3ڇyySO}0.sʀ.X)6Bz6!/Gƨ$V= WylKjS=ΙvWz4*!R?XwJ usY gGagh2my, +l%enl?Eԅ3 t YӏNLMLMT _O܍|uF$nhC*+ULYz#܂ WСo_zz62jt*":!VsXZSkƆDn1;|MѡG *j(G>ȯǵ6jR5 0cP!N5ML@ l%6.Df&VkP nY{cɖ(vӽ{rGaPDjQ$iz(z:R +t.k@ ^B\̥3\}C1;D1qͳ;#mcHS?e-h k]NH~@omj>'d _ߒ" {Ha~,~?*AMn56oDgMgvbc&0*o},EJ3?45A wѩ͑zKڎ$>=cwO4-$jS\]wr ty8w+ƅ5NōI<#Ğї"%Iϑpėp%ߢ[Z\9㩈>WžS v/ U>(8WVPF2ō82=} E*AK%i%ӹKg{gcG~oApx4mf* \ohǶy>  x|hbᰞn8B=TU*Rc9Af^N9Z.dW\g78IU;B{vP1n[Ýb9:US)Yq-uYNB*eP'Ջ$o3C LV]!Eǐ`gVQ6ԟūGOu$I@tߧ $3L+B ɱZd!`8L6 갸wŽbbE-5VvS lǐtpTGN_0ZJhQryNd5V9,QyGoE!-'`*)]P%43>' +e6sX{Bhm|L z < +}wv? s}ޚM\͠mT\.3:L/7s5O3ηYgsmv2iQ$o1WQ$ޢZZ h[&]ux0u͈1 *ÇmV}XVM4Yר:L]Z,=oyVzK)J,p +/x H/궳arqu>klޑITVnR%+ $[罡MM2 >~P2GHɴ"זVE9\2pbXzh0&hPQVC}Q, u彝D횃ퟭANr]$ %4Q6l*^8fIrv6I&&\Mw箽7@dn* f~JT垅此k]+'}@5;mW*j g,e  Ӛ%\׶V\P/o<'rwXGbӯdY9 3V.b}{^~ŀ:i JmҭâW^ 0z[D`0s|cMξ6u՝M;&}Jp}ՐP{L 儑Ty~FOS& ɇA $'̖3+>3-cV;-'o8ajS,Ip]nJg׭vt- ?ueV!p +, ~X0oxx|.l<>" ;~wu(Z*QF~z| $ +IRGT-2U/ ډ[d+k](*U>|?$w DN/+36T.2tp5n$)l_\?.:B&p2gK׿bN2[ ??r'SӹAS&sQsဤ) ZzpTaͻ]v%Bf`9"s<4r3;բmj؝p!N>ZO$;쾨 ۷e5Y w3LJ-{i꠆'o +xw(ƛ< ף؟t$<&sv|լTO^5'aߌL}k|||ﭴeq&jǡSY!ya/`m'!e]=%$DF=BzcܒtڕY:r .5XfolV(b-B3EB Ϙ W̱ цEEKC>f͔xk0x^汤isyN"RDs\[ su6/0vclD~eŗr(H)ٵwzœGz\wumBu-S:kR%<,bLGY%WQH>1C ҊtZ<ͧDDTtgZ%/PS#Q8e .͍@AGNgz 166cN + 8QP9({G~39P u m+: lo>Cu^"~ξkV|mC?g8tެ!Pf0 lˑW[WƄImPɹ +-5pw<1P8:TOۮ3WH{M\ZJW~)"'7B4mԜxGYU310Ә*a i'f 1W<( +)*/*9LJ(:_߸p::@4Ti6Tz.Ǖ 1K!" +!36:Kq)H~mwGw#1d0nIZnw&ϝ0م=[5^l93ᒞjO@bB\%'@K a5*־N-wbdyxњ}}Gt&E&+h&K s\&`U!*h~.ZVe53Ԝ#U]eS ]ODu@ (yVX[=L0Q 5bSNѯ+ ,Foɺ0Dh=P5 d7 ¯0lZ$,z +#m7i M_u}¼Fx^yGSMDEKl[ѱ "hRz4IN5@t)Qrtϒ9 "&) ;bDh*0k :힉*N34A4bNm]Aa"uډPx}>f/^l7>{.s:5gF@m;z /.V_@u渌p]>*eEw 0[n~v +m Ʌy1yME`]`Ƅt8uoN+iľj9pF[ggNSEe.2V q@^nbR.7UjLsϛ͔,"qZ*%N,=*36k[O. $Ԧr~֯jc3{ƺ/ai=֬.޸Гn r[1dHxDR#H+1uT\^zնrMrmo10&$-yxnp7~zIh[nc+l6:KD7[|-?^N *̭w +T{})OH;ߐ=ݡuX)eEMcuNwE1L0{ DxGdGLlc\0=d fAپ7r [>̣*AAy,.de&1,}һ-ք sgZO[/LOLwǡ}pjG QVsˁ_=~zz\=,ݿ/4n%qaU*X\b 9fL!Ņ` +|N {(dP9'02سŋ 1s$^  +&IWzC@~d#ZnUկD5_ie5EC8!f6qjٖ;Ak'lw3sX wLd;:32RҬj0ud;dөz:=#Ejұx `UQln: e60jO#NYc o-+l~>B2%#Y1w|wM$ @A'C\U8)Wъt_ڳ +)12וWiePs֏Àg"]vUK ҼZ,.h_)20&YHWG"g } |+o.&IikVt~ú^Pm90ja^ +\ +(ӥ6WzA/[u|sHϫoa""}g>"jp;E_z<ϕ跗u#xKwN[>a]Se.-(Yko>ej%%[2ؠ7ql9[mՏ9GX^Mj'uÕ߻,'9|RSݩE\z*:n4yjE -"M66T/q@po.-I6pq~pLub8: ^Q.h +䚱w~Y_<_K$}bcl#{:.[cܸ0y}z[K5sF{ WIWf0g <ӱ]W[e9qLg@R1`}:zY>wKYYLQ]M|N᷄%yu)#v'D?^8-Osz+g3#-ވڎarUZ75q2QZ mރ0Epp 2{ͧvx + + +π۶l4B5wl}sEVO 喳_np?|n2rצ3<5=C?RF;oV$\oݖM ҽHXnj뛛N:ݬ<`{xiA|H{tj3#=`tEy԰䉄 o^GAgz w)H8-%]Cg[pnug|[1н#;GwȓiFKQ[hfmώ- _+4fKep4m"D8^T* (70T2yťhEҹg@zy3ʶ7GWM7#8ֵ|^ji7l}rΖ:rO>%) ɫ&Ş8.w$=uG|Y#zE1PBgs@3},YBA1wSpa~*t!J`p< s扷pݾxV\WKrl {ހSHI2WeI~ul}<VACsըdSɋf⻽#N㶶:ue/GVLt>!y<ܩ{K&kUhSH4 +`3:/%;\p̢P +bYmʔEY NVS`p;@,X_<颾k?{Jv Ρ<Ų +6GybuW4Ei٨-@Qt +`*q$%02L) J4ٸDbke9ɿ+h"~XݫlW`jZ⇕m6O3vg =n3Ta8;t+g(:;eȧP|сsv]ŪIG۳^ۼոk|-j59LCx6doAeo0]sLzg}n1)4t֕.b-ky[g. UڀT8Ae2ǯWZ/Stm WOm2btu݋z}fW=)بU&^;`vo@rG"x:AGǿA5*"&uiw+8}A4qV{!{MU˱q +e.j=w;;YGs"s`Gc=a99Go-/~Jv*AvmiAu|l˶o>_X" +69F?/h}D+0r-o/d"){B3J5`/s/}R4R;\"(ӬG@+Ly>;UetayDKqB~+XsX kA,t AfKr<~,3T'̙6g>PGn R^b+ M|.K~&քk2хDh88MR7hDA^~.@47ʣ0eTwvMS).҅WɟP1$5)Y$G96PxWR'0Ue49/ހ =/m}a\!|axӿ^4[h/jW1}%@-(bX}]2*.ͺ|@g"bᢠSpvTwHO +޲.N$TCNPi`G.-eTゴ ǢvLx>|}^y(i _ilc!ȯj PY`lJYZT잦;cPM4ՂtbMM)V?O>*:1Ou#Ip@_4Aj$9O\u4)JCP)-1?}ͣ" -"e=,C(I8joX@S/`$)?!DN{yz zt?iLvL)6JǨMt5,K#TbKan5-¹35y\NGt #->U!MYTrD&9f@ZmON<+g|% W'&-!L_M!0%2}׃C!1@A ;yR]Qn/n{hm6-SCWL39Oq@lw:w/i@F΂ d)ޙzn~ +8!``EL{vfk2)Ko ]PAtݸ=w.K +lsϯ$xw=TZ擬qr*iRW'|ŀ@qh7;{倾&'KC&}@w0Q62ɲזt"&.an.LޝәN:]B#ӝjq:'7W_ Lxِ1 -i{[dSIY/ӏBJ1NdӐSg Ew~&gOÚ +5Vw<(~| ]z[oS:yW5T}D:w/4RTk0~vۦ޶MC+a9D7wS>Q.zN cJuCvP25A{5 eXDZ?%jQ qoX⪚F"ROtM'̮-qΪƢ!!za +oR7ӵE]Lle8EKߋ3ZCc}AEM`Gg#Yw:-9`J|eOl`PyC5ܠZo4l X03{}7fv(5_uOd z +dG"-ю@n4&V5a ]iL*kpdfDIf!kTrȞ@X+DSZ~l)|‚pLc*KLN1-[\DS'U +b=besՀƞGs )#2SD=16NUrJl>LʳnL7NW|PICckJh\ϦoH.^pqV͹Inً=( @>Y2?VO7`a@u2+6*m6MлZE$͇#;r%جI2T6uBJA9?Ou %pQg-̗=#iiU6KAY->ڢ#0וιMˎ꽙W1 ZuY:vxg/0S,u9trȢjf0W]Hq4^>KM]b~MTC +{A#7L'4a!|?|™~z >s>alKIUN8-/#TP)m_'9' WvDa+#{}+Bƽ&H%$UӦ'%xw_Oz0ztwp^xv}wn^BW] TO,n#M9:〳*3ngHpSow +=WXa!Ayz\y3D3uI rpA,bHcWb/ȎU Hs}& |]t0W\!U">4܁iFeNHq?Z$ޔ9e1=~:=3`Us;0/<v3T 疸>b -h?#e4!j\WId) J^1ӡ`"kI#zIt6)?ъIod׮ w/rG.'|#?@3rBZxU(Ҹ1JL?9{^Y0r!v۔?K) y4J~[N4k.sa?RB@ccF[ԂpPr g;.g{J#Z꡽unwY/]wu>6Œ 2mD);󷚝SM^)YTR];N #MMB*vFd)UkYj[cl|-Jbŭ;;n9pėMȢf{a]Ovk,a=T*'g[҄"B(R2ͰBi+nP-ji3Q^ +g6`|gR߰XܪhpDz~o{+0Ԇeyrb(Nz1t=6FU !vLBtM_`e'VY޶m??k@Qh(*)a P%zk`BYVlM.fVB"+=Ѥ)LO8=3]X9YEL>rYבQvn?vGtY* 0mɛf Cz"ycێA/״؝<$̐YҝaAOIeVqa*w4]Y٨÷kx6gksGGi?jy`"Bw7OqӵpR)`cnAG% +.%uʋtW|Z nM$ L=xG+#Oh +jy,(}E^=HCGIr:qNZҀۄkuO Dmo,pkOe[nQa!^ʏO!wԐ!<7Ţɕk'XdI9Di㡞B,%{_3o?5|LR u疇|\̊rU"1zrϐ*)haޤ$p9 1|ȿ;c#OJڡ۝&T&Y]J},Rhͩ$+i6K7FR$- wI1$l>* XXoGrY<_&<,$˺NUn_M0E.HI{I7bfscܺii&QP]vdR!=~X>\|C +)N$ArC w{[f)؞c} VLG$2 7%o? 5 zC_]CNWTlfv )5 ӮLwվj,ĔgL{+,0z|kKg#G̀xj_X_-1u=#b6E9@#;SR`8mqu:P@0~btawiq5wUȦbUƫNDN6LBo"KAa@ҟ_!Fgؓ$oK +7ݲ.5TB4Wl.~wE1K$B^__:pejY#)J{rmmyF%8d方*G*qB׈χ4⹞ k11 "e ǂr$qOC +J˞/t +< 3RU=]^: S!^1&P)|Ɇ"ߙBoټWǡcp cDw)iZ@ET\6rʹ2ĭ~lg'U9kדյ +r9#XoDW+ay9Y0J11*[QyvO]u5<-lt\\8eULY=9:[40QG p뾑ϻ䉦 xŒXQfE))3tyk꼡t7=^S߿!MQS=-3k!WR}ѣY\S\j|@|0ep*}G a֥a- SW])2 =tYq>=e yܯQ1LPY꧜MVZɑU4S}A.JTY2Sy^}Ic| -§-V6@6JZ@$mlаuCح`FdaYSGOT|9o*IzҾF\\aXʴwJ Q-:k ~فF՛Rz8%$ҌcJHvIG\YPk2^+VWV~G0 <G_;YeY1?jETf\NzER >ÿL,UWMWJlAfc*S'91h}b$L͵q=_:U*(;t"WXX+$2u6im ؊Xlk1M'w&u^b O +wIӫU"<de[?v2W=EQHIJk]w:C kfGb[ 2RBXtb*s kl÷~.g~gP);VN^ɮTg\Un-(Q`7xKg/i!Y`j~.Ș!}uFZ˱=J5aXn;)@tM  [MW{,Xڛs^C|H- u7NNdzo} "wsrT +zNnNl1?r~Xo׺'u(#HJ]fw`FzE$#uzVo v*QװkT[cŲAȲ|S */k6y?/bۮͲIu n|*=+\!t1 kt+^x~m'.zl\>0_< =x\+HYe[%D~-)QLV2P{-٢ K ; 8}l_ՒG.AlBs,xBxxh/+9+S2Y[kK,`6ZVOzaH:-J1OX3iW`>aY4TK%Z\<]ת|56AWFm@Ww&kl,^@rAI#80vK:!-K9D~|p/-8 # QN3WQް$NhmJm#L+FJ[bW'*I}59=3wV:}e'b=&LʃI=ˆ?#3&|54n|y 01_@]%vImt?`.y;.x0<\3 @ O>~uD$w`lo)٠Z~_hnY"D#8%j_X2^KO.wWK +"l?T JDSt0.@ "NG/bA№paGrdL $,eA4~Mw:X 9g]')rJIV)s MNˠB1Eɰd"ŏרWvjGDL +GL\ GvX>htvI"ۑ!H~Fd>k@{JC9n8UQ aH&qJ., ϩ\0i*s˺o?{uSd`F(m^np%]G pjXvsϯb`:G/TҲ(愔\}zGMAL8}JP%=iUֿ=ٴt5%( 1uT^Yo=IΌEbKkL +-:<-;X?}f|}j\OQyՇ~4VU \NJf47y>+3!|?Wi"3J#*fK߮Em|Mgxj]a?n.+Jz]x9d'y Ymo8Mvubd:( /HR.%0S$`СYk[ /IfISCW.4@t;mBaB } +lֿ4oT; f 3ϗ XXʰsKAh=)#u+pKrX1t:Azc mSki̴uNf$i[2@J2KH4P<Wd~lRk[4:M b>5,f=Gzۮثj޻bKl7LxdCMS"haS)"٢fB e<6 EƖUL?Q9(4n#A6jmFKJ}lqXSzL.i瞿SSΪVGuq) ~z&UМ6ucYðOQ3$utОeu54[NoGvemy5T ѿ)6V +,I9&jF4}T$VV0fVR>IYg4٫d(ah(4?[?<+gޏ.A~FmNO*t;Ȃ lD>EfF䄺8rf%(CҔ4YE'm/acڒ0 2)&wHh(JZYdɎV]ĬMBԆ No`&17 K@)aä[ꥮ(=ɍ`(Jf倥FȪѳA a9oibxuԶIb htR%ehg/n7[-@!ޕk(/dV^&vyղޮiNSMOG-Bh2CFvTCPxC~6/j,9F%O;Z.qGK7b 5D>%%MfQP_$f,AfFڋ(ܾ0(p(?ry䫮XYvxD}@0_մ)@~ -48iHzFs +%hPAbMJI ~:j,-QY-kkbz[!RKÅprI>{|<CiXYĉB:\ eh'%Ztx[.=palQ!58йyʾ ވLg' v\`Ȇl|z84TAJGs]^LdIacĽd=<[>x\5x!a piŻr`! 5raKgj: 2Ś.wr>,'J? &<0yҎ<㖿X[d+[i-d1_s /oH>y@\uYNb^ XD+l0V#mFwfGg'qM*z%.aR ׮5wPS[̭K粮品-4ԉd"'{pNotD6ܠS4$Bi؏C 1,kdg(`GP3 u2,kÊEL Ka(DE&7Sˇݒt(ޅ5L6_Y\Wa"OO͡΂,* +cL`BPa2R|M%-sybK-N·ݬv(!P6YPY6aoXYMRQq PuAh:݂uhA^Ȭ @5%1-1kR6 ]Q~]`ֽC?c`H呺8]s|:̈́^q*ٱ >1|{GK#y"DEv֗/qK00\ߍYRJJ!2%[wlW&h5{-P͑Tv.FO&Kk6).T1L;xPBBHL* WI4cpۮVj3E 1|,6bwHOu#"ylY;,ww跄vY*wahޤ6CqZQaJ (AT6>YFݟ8 RvM`^į6nj Ii>T[i[\g5Ԣl׷J6 1KUcHb 7\d?˽ HYBY]㘏J0F6ƀnxlF0 wNX[嚣5K(ЖkoԊ(e3 ٻ}c<^\x3Eh(=ز|B6H>˚NuzPwv w"7[&׳. +ꛩMhph L]x(z r%!m2D_6>95yP#i TM%H򉢏; x{iq%.]Cd񃬾5zm2~ZE2|\&-fRo9W/:Þ\B)IҒ(;MW2\.Еf>!EDB]gT6ѥݧ mjNe& O\W(.+&z{{F'eDz؞CfxþUocDF ZgUHȺݐݓMW| +v̓A?օۉ16 oJKf&A,d҄["T!>g?~"G, +`?}enMvwlRjC g =aq&UˍI4ueeH ARhȾJOQfs"$AQKL]+\5Ǚw'SLeK%'"Ur[n(uRԜW`Nͣ,U^]0^=)d DjP9٠ڞz$FQXKq12JoYb{uٮ؋l7o3<[{VhlWi{m59ȉb%93D%v%x):c7j32 4L:zsy8wn.UBBVůeTmNuP;)LhR f!7oZUTo剟 Xiܘmd(òdWyUH SqU$PУ$_S&+`{FҕGKpy֙oU nP4 ǩ&|FI\^BFT@2/lx7ʢ@Yf@kXx-HB1.X%>kz' #BK\hemQM9LC]s!xA4E)'9r,4J+L/̞u:#I ֕q9Jtyr6h ގmr[vWw{鷠}P60ZB[ :#]ZXV,ƔnN +4/`mAJRm@t:8ZPw/U4U,95Vif2X#̓fa%GIemA UhDzfݲ]fvMP0fݜQc"a@*ke.5J~t[5 0J{/Ftp5rEgY+4P΃b2Vrs>8 doSMb!Ǻ )l% +~y{UMްg';%.~wɮ,[g⚫9l.\~܂NH>yQ]PrrJKHݔFQz5`ǹ^/;n!R_6kAqZntdm@}*cٓ)HOzEvanaOW^ Gnh ;2Ǫ"W %HY0ZHk zUW(ŏg[u]~`C +[JCה%kFg>ġخrK:Vkf~L5e^8d0?h$܄9,\ {L gY%X*^2]3&備VѶNO3E5,euG|L1UE;JDKa5S̬y?m|Y[~ ӡð34e^abXˋϭ"! +s/V{X& rț=9;#gc)k/ +MVW_Kga{O&[Vnց6aZfDW_Yk4[u*E)VϔuM˂(en9'(zsYZm5AՓ܇[>'{:w$WG5G*ؼaJ 󹷑IHfs;>8=C't _coޖzԓ[Ԗhi.3xYJ@Vwh|a쾩: ؝y|*Ѿ74_'LBȎm1gZ +0$n12QauWٹ{lb{mY +$ܞQsǴ(kЕ0۲h`peQ!M&{jv]%Xᱩ:ug%nܴ3Zclsߪxc3TFl/? v`?JlD0T_7̋/MHX~pl0\R.{xp1@A\vхl0eܗD+hY"hR׻03̾-.!$]'ubv9#(xJ|-جA6祁fb}WHVU).a\塾=6 w]0YulJw߅^-s׹\jm$7l}W|♠$Vgˮ0[vav1\ +49,]>@O[3lÕAXBf}NjPʯ=Q~܅{n旕 +()w|YpTs[ C $_a=bU*8̥RaL1EzY[ zY*dMC+E"C < 0/4הi9?;Af8EOV9p4 5&)OoJ; +#4 >"ÇSfͶR\!# #S׼%;7|.vW7wʼnm ߗRmRlBl>ӁʹjTUsi#X=(FY{pU3j[E9o,Y ٣-{Dx}ҳzIϙ +`Ws=Xq5=Ke6wey6#-o772fW}q<-)g?lSSv|sF9av8& ޅ:EkzZ P( +o(~VQ] L\5/n듹RZM<>Ώ*erz렞;=39m1^b.[0w_vEH"6Ύ;|]8-û#Rc~os9#wZNbVb2RUy3,2X#%Xr7@+q'͋bLQ!>kqu{+V4C4['wA2^C&$Z\$xnw2PS~DoB?ѫLGj;kN'\ Կヒ#Z ષ9 ψ-m3{9fMZiVDc]Rem.aso/Cxj)sFjZɧgnDA. )U Ҁa1O8%ʏ-~<~aH#YtX. cq+>.'א=ב$ptއN2tv:$T_6JO"^ "vrpdnњ~P_F> oz8Rfed,Ved/.]< 2ųSU"MrͻWط݈7 86uZd $! M >h3`ξdq1R?dyN|fC /tyU}^6Uvx6͸&]Prma$0v3 k1`h$ڬӞrŚ xp:Tq>:0i'D Z.Q |;m@4]O~-+BL$hF&D3Rc7knHmY?eOf_ORmvE:}yi618Z* y`cLB(ٹ~PC7W=°%A4ːl35\vz4M#hn׌VO@kvMՌVS2QZ}say Ʒw!S ֽQ-*I8X̳p\mƺqލس:A ^^a KBz~-u7\#ӗ u7,pts89"+Rim&i/ޱ~'_O+ of19i Fcz4{~ZQ{UJhvXe[4p`sl]ܒXn| )jĹyADN/C榇c1+^ۺ婵B}GDI`DF"#Kmo>Ì$(Cq +UǎH.MDpuUv._zŽӳ=T)'*jJ鐀(fy( ++.VY5T xtm1ݼIM%}>Qzhp)\}|-a=.r:9QýԷJeݝ)縇Gk9 &ѿ~??b]8jfokn83K|K*ZC*2ۜQaNwQJVKlsI=v}WLPl{{VJ+ܞЗtVD^(%)>xsKe#Wȯ0\ZX'&/~%E k2VO"okvuM:m\wj18Ggӵ#'lYwPVl0j# +5s+2ذp 437~(DN}}?gT(*㢩p3=C)W[^e\O`9Y:xo0h>5g>e +Z4kO/g;Ԇl{^"./G?p+Ӱ 1@Vþz> 0] F\ Kɘ ^_|]0C,71|m.J ć1l~KܙgJ +C>Ux}Ro{&:1j=cbܝ ʴ3Ig͵QdI,L<[S)%FD7t+LHVrكTAи3]SLPNC:MV/--rנ9 E1H.)h ${l{{z񬠏[_,hW56JҎRS c[~`64W]ў4tku04Me6=: x$2vt)2LT/t=&%S==<-?^Ku^&zh=1dJ5vH1pJ:5kb=d!j c׈# DC<0DM`.WXyl]=^ 9|.nBY'P#2yEt=c wH&ր!]J_!6OE~q.[2%~ܵ1]j#H~yЕ>`O} R#ohZЪDzvuBŭ /g:t YwiV/d,ϟs]X5Lվ. PIX60vuDh3\wI5 V$K[".kWqOQY]q׉Y99WI.!~a,U"o@`eMv#iC)J@.ڊ +u=YK "+Wtt<|1խÃ]< )* e2Bs4٘P=q|BYn.@.d;nP1C&:"ЖcHv DNG7tnZ{ jz["!{I2)q +$?(뚌K>`FEVIs&nD + 2qvc?Pu}㋅+UpG׃)ÌaqXw"˔,el7X=`1oy:CvIY.R{klR{Ot m +8Sm+] ' w =]FƣBO} ]ܒc;HނzH=D%ehI6{VPOa^TwmqɲA(T=8kI)\ȂTώ(IP&i( 0ͨYD8* +kQ 9| +wZqÄ žut#&P*|ҴʹRO+) )$HO?kzinѪz+d2żA;KHٹ*7o1@ 5{N:"M%?лau߸c2G iL+w@-][.k_jI?-av44Fꋉ>Hie ;RZ-y&ֹL16DP}A!0oL?9FDC47N]9p9{շ6; s>y6〮9UɐD?>zfe"L Ȕ^4]2}O| JN19XXa\:;9u14X<pIzhJ{%2Z͘sYdyC .gki6˭VSX K4`I xMN#rJRiن.KԒo L2ݳӐU%bh3=70ʨ`]R[[ŚExWa95I 3TqwXQQˆu5tXleXjAR7}>#r1H_iKB!ή6͝oHZR3)W,E$O1K bQ.Sp QyqfVaMzSvaN6DC0L->n 婻K˩iRb5CqXu=W*pQ|`=e,!O햓"쌪E@!De[ TrdktdNכ_W6}HMrew@&MDsF+EYVéR XksEꮵDz,$A$\>)0p<NR=p|ގ}|=!^3I\Z^e5oCm}KMw@7ho'avZ.=ƌ>]W},5Iw] 35:UAI o?+G* pr:s0Mc0^D|-EB^`{-zљWjG! ۝[tXYSWg|uvx%#I lH|}zuw{ݚ&ovDD7x{('5<'ɫ6OQ|:&SF5%2!8M(Y8&H[ +q>! 4Ë@/k,-,%DYX/S9U)-j$ZJQ'*>܋&keKXc*zм#~֟u^].FYtn$Q.F'Syx\=-%ElS7u(7B5ݘȍXVQ + -(p!݁@?"{fw!9t9$<cg5$ēU?9Ţ~X98Ϝ\?`XN{wgի'YN3-Z.Ap򨼠@YnkW쳆:w!x/TxW ՛;Zq" lUbޓ'X)r쩄2ϦǛ'PG7?^[}^Za7ޓ퓟ߓ}4gO C C=7e"hJ7ӹk>srgXꁡLWg,`Kf OW'FgS^A6zA)tЦܪn 6 FIґ|lZ6f:VQPg쩫LO|`/>"mL Y..rAHdV{`Ѕ^b]a@@5;a:d =@3~@ jjC+=e/nX~QWSF +9f^(v~r"[*lǁ j0_&*룑%>QV1*5NԸ?2R4Fkv'!n+U>H%GF/ˁ4 %@MT!(y %{d8ASs(dtNNu'&ơoTu֜qzG`@5jp,\Ͻmh̤z2gjux+3@EB z}DTrb2@ixE)qa! WVzdݪ~N.KgMQ ?b15vz\ƨU3>k|}*ABcZkm׆>8Fϸ**nGэ9p;Qɒ4ufzs=󨩿ݥzL1{ԌGk"o߇sm79}TP+q>Q9DB LJ"!VoӸr2dMS1mi8i\vLACa"]wW#JlGMא2Q bw`NǡcS `m3a'Dl,\ŗb뙚 ,`G #STh^yEa*#=ypxNauCFVo9q%ӮwW붅䖣!)SwiH%쨣R>6CpA 5x!(7ֆĉ XzmSS@AWe&S:}GT;~vt+>"HP]XdWz1K}ǝ\]%a_Z xȇQZيR jIb6Z9"} +W=gI:-%%SS,U'Ik( ++D]3O]5/0YuĐG &0XQD6mQ85.0p!IjD8)1l3̀C+zgr{LkZ. +2@ +C/d֞d_w֑:Rq?ɧ2oSh|٣>XnPt}6jn|Tac.]|/}N?BHiߡ0/a|%05ǎZ/,NGe =}U` +=\7[h e{~0󋒓~ ; WN!Y@ٲt}f#ґ8zJx+jYѕ׏7`0ًҳ{W(.;[>-ldC9 X +)0iJ"*ږ2{ӔUE=+ƛ2: _wnUrbOd|?_Ab7qR|s7=F`Υ &k N'@ptbe'Nj(5j&FkC,i!LQBݡi+F!w]JD$E]ɂSNnb"6D_Y5tlJw\D};TrGhWAya~@r+ Y\4*5:WŶ-xRL<ҵnQVSdFq:GҌeJ#,-!R~ }чeUOZ +;vձ24?[(نvSښ%D#RW[0 ;\]?ws9a@4X':TQ +7`| t@;_Pmc??Y4OyTRn\%cgc2VKCJ봭EIS]fI /0 bfAJR<VO'Va:#s>{˕V/VߣQCaWZmUK +F4KƷvJ9EFk%Z'ՁS#̺F JZK$H|M(ASy~st nyi֩ٲsXdc]fE*۴\`IL4=-U5NE]U|1Z;Ut4qk45[aAIӋ4|tgԨ_Kȯ +R#XIUG>ԟ .=\e%NsLש9 +O_zjKi )TlBL caE +13Ҷ$ӹh`)qW6ktZkT`[ W tMm@)4m5W)d+z5 >.AQL=DN; QúKio8Gx4w#5!kATFn\J-:$h)LkJ'm"-q^G6>; +Lwwc?$_NƗh;ypU.>FlOwǩw wLy'uԶ"'Sh/ݦ?3eϢqZor+IZjZe%$1MvQa i2Bs4Gl3-8p4[$m= +eꦋvM]ߎI=uM=>:]!-'6:,`kʋNЄ5Omw׹M +ջI8_d# y:L>R\kk@Öv5Y&3TЁ+Lqv]U2͍|l)F勵<%qf5.B7ēI؂:E|U}qƋ1dWI +aNG҆+"SѪh݉,M>Le#Ԡmcm$Q|QA+sJ8ʰI +P* VZ9!޴"RP<=K(69jh:$q# \VtMo WYyTlބjDp&mx^nwJ}'&Wj۩?l8snz7VF]K.Y:̊ +3o1ϫ(38j!IʗyۡZbjjw/Ch=K;qwfQk'\Pf(lݜ/`+k8! ~4x;%6Jsn‡Z 4uv +)™Udǁtk%xRE.3ZjQb(;wY)=S֨7 m$ϭY,{&M5zjbzqvBC {^UTZ6,v=\P]J1,1ENdgT-It"^EܜݣqfVve2Y1Nș :iʸ[ O36\ +4kq5uJ`f.昛+s!we ãҜ{2zQ.,{H݇RZtG'JdWc|zNX(dFH3yD̹jdŽU]!з**EH&=6 ƉVW촃g%\ ~fO2^nFwB$K}x]UxDÔ^EAUHݗ:o +~^dJ.lv B*O:H](߃`2I&% C/'SXPjyF𑩔IW Jg}B87ɟ@cq!"=J2 ƂW=bSƢ 0f#(@zqa./Z6c|/2兏-Y~3\tv9IewMP1ʢYDmӈ.w+H6hs*B0\ڳE[ +ފiЙ7W9$|.1*b¸|,fqY~jKhb ~No2VPu7j?{P J&&moOϦR.uG%P1;Fua?m)ƑSp]jKF?oÃW=$sv*B0;1TA ~\\NXGvZ(&gjkg|bbz*Z%6q:0j;Hl V2;[VVa'sPkr(xIBB"C׃}g×#6B<jVdg_P$k@O'.ȳ8 1! h8P==@6!@oOxkF c Lg19'zO>j?zQj_;2~~1U3yHMz_ +DRaowT&B캸/_#:nHӗRiƛ}Wk Cō"9)?±_{4Mxͥݻޜ(pU5luO$[Ql2MNC<Ns"u{!I "~sjyO#k X mN h=ŏ~x=?0"Nz#fEQ9lQ`7 0CT5!P;b#uaMW˗ X"+o) q ~A@'({o5 E3ÏXchTt;ʯ?_|K#45&2S̹@Xy+r{m淗rH|b jzs;7;3kB/<џ)G:*_e_αU1pu fF\QΟlin΄V<~/ @ΧgG'lYdvb~=|ſ: $w$P:W}fi~={Bp: ʊ19!ʜjh{SJt["c5Ib;.$+~Վ#aņtQ^, C>B.3lwioQ Q),Lւ= A܆8Hz$__˅U~|EBŇ(D>_4̦^9Q<<z: Qee(£whR{!`U9.K u?V0~ 7z?<İG{F5A +mVN>7cq|{֔l պDŽF}v7ֹrxP|hʊt~}8[s $u; W3śUbgϰP0MmAD? +#C3˴A_ +P,as(i@LP&w6flX7!y +@܍i]a6+d4MLٍ?XQ Cr)m`"eZ*yx9! H0#Ě{eڃכe덊(2훘L$gV)X[^FMf%A;G=of\%DO)$x[A4;w0:4CNn|GOʷvQ'7oLQ8-SFY$mODCP'Gn |4S1m ]*^VgB`%AZD1>y5թ(Cio=q{9\7oT%3}x:;DȀkK/@Kqeb1Qwf!Jty8Ry,уg?X(GD""d=N(ӊl,Q呑DPqbد6˛VX> pGN%^L}6p:}TlÌdcDh%""PH2ȰA\Q".0(=ٟ pe!>1X +i )N +YO49j;Eey#aN9-p4.BdlJ.@D +C2S%uu,^"8X04JQ3hkH붩CBNiHJd4cL7tJMPL%!F=J!uռ2Qe%G>M~3dA P^Wu`w@2nl۳t;E͞~= ?TǼbJo'\v)01Sɜ` $-J:6x>Lh@O&K`y.ŰX8oΡLⷝ))˄6Kzo*nGBLݻU9m̐*ކ:sQ؃OsD,Y;6\ChKd}2?nQ[}>Ƒ-S^ k1qnq߈L tpUC,gm@y)^"n 2F9NwG))R% [K6.~"t|V=[' <J"rBL9;e>myV]O'xz35WɼxK@7>_c2(J0Vu:z%&Z<S;ssFR#J8nxHzBE04 e4>Z,sb9?TW9r$9 LgyZRс* LHF>>950Xf6ىzKJ({G,r=R-O2X􏻋>>ǻ1a6ԕ1{( ɵ& [CfJU"M_#"W/@@l@XcC Liq!4^DzL:y*d id( b,k*wEi1<,Wi`ex>~آ>9k0 oL$YzZæ\ٙ<ٺ?AȚjҢl0Ϩ'C32uoѥNї7LOcm_b=q_:hk5#UJG{H5%uZ5WEV ư%Fy`\,QP6 @+'TfZ!M̦>bp{˩WxKyJU'F<;JFna_bvHkK,@*Gy/EN ;YwXmV|" `s¾p9}q`DZtnru/Д  =X,מkGpeۥfQ@YAyY+ήl0+Q cگtȶ~\@H_o˄~qY v[rt tTInBG'MRYbzQ8#Fqݔb`ː%ZW}QA ޺)KONiܩi斜c:$Jr] Vtd/mvO$w/9!hڶ FϣeͼTk݇QVK/)!yl^*!V, +@JRQ>Cں^֤sx#>b6LwF##|j@]Ӫ1@UTڬ-򜵙1lDnE?ewWԾvwESL{iPԪ-bdi]#֬ 1^OŸIXz0}j5`(D}=+[$!ķ3~+^ x@K :bx_I :j Sڜ˨(,7#0/ +#f-oW15=--kE%7L#.;$X&q~O[W=Zsf"~obJ> ¦8_;|*,K +'Kk2gQJ!'zm\C$1L]dvaU;_bB&nv2әԆ +[ޝ[cÁ|[<_vW4qE0y9rbK`ǣPrFԩMz9ϫ:SAd08ܑn!]}~a">٥eqձtrvկ۲㢢!`VX8rOL&P +G-C= +5jU6\\>2.,ݕ|1!^c`(RN +7ڮmƉ-|($?th2) [jC.ǻ,INn%_!hMt%Pۭpf\K8w2B9jZ?xCqm :x!pkLqg1II(:Rb]Zm ++APh= ],/~7[>Bu^avVcܰ%V{Rz&UTad.P}Jd34[h^d:YC0uv\#% + + lJ 0į`0}f|eu73| ŵc(DʌT a9:ht!'|]ucudY}.loIgV fBQ 2f:/ +,܄x"e FH`֎|K.PDړ4)|#x$15 q%L +~ +.i]TPlb [S#9XoCཚ)FJG+[Tj0*^p(ʛ:?o_q]Sԕ&CuySt:4Q(PEV̱o-B֔h3mFeh6 4U8l1 .A$y_.rPc)?A&'R{Ig=َ(5!K뎰fŨZ` &$pɜAX}v/s&HJ$4Q,Q٢kj`i:ul]%8Cmĩ./[9mzǨ^P̤ %.^byDTZ P9@DžC>&y-mɵ`b:C3`_ٙVmv So˫{ٟ_2k8|i{AxHIk;1ΒY15qaPMW) +ʮ:ẓ]_B̡2_eDR'ek3S+`xR9eS m3ZAN*a}t1P'؜ LHX^cCrL_f.$,ϲ @d Tɒ:$I9#H7/:<εgQa%B%I_]v:k#\+z52R9OZvRܦ\{<]9_ 6;oE40vwZX:yLU<Dc}gҠ/e.#atAY$Q20pnG/d]e~%/)8r+UvQK#'N\54pI@kv ȋL1*":a] +}^۫tR/=>Ã4q2 肕`HI&> +B>+^E7lJ*J} 0;$@x'M\TזF6 vnP/ ;7FE#P mp)fKLvlnΚ+$FfRiPnTH]ǯlpSߒo7BE.*Wƫl -?2NnDJO;%J#T:@GmTyOfZ+ܬ'tWp+m=`w +5Vl +9GxRvXI 1ôp1VNwr# %44Z. +mt?B0T ݘ PWV+% +t v/Ņ E_`) ?pLۭԍoH9j: D>GA!찇c($NE~Kp݈ښа+"H@}!>bWU(#h}"^'ɒEb٫˥Hta n݀Pb9T_+vc٤K=1PFf#[x9Z�GFJ_.WܷnT + Bf2yƐ3)`ͨRBpPذ3Tm LIl5HvxG@qq,zږ~;'VjRTnep$,gԌ渡Q ΤLT3B~(x0rW,[P*@,oc֨ݡ +!2bf-v3jC] ,>j>a=fiR4P{vL𯜚}+lIA.N{zxW26]b/R,6+5m&HnJ\1|{n!WPW_RTA;mңIRS-n9f+ WMDȠjEOed6nN=1r[45jMh`t;HX4^Ms%7Ct^[GO}%w>.{L o]2h62z5=MH =L ZCRok2:EyY$5zսE &Ymi:( fS~sݔX9ܝ{n.{РN5eVY#זe_eF1 +e*H::y Z=vfa?̦;8Ujݕ_lmُ~]\lFߨna'пCn5j*vӤ9AdI$ D:/@Z 8oTS2d .LRR')Y!{N[2vՄ43jxyhrW +|s-P#ۨS6ՀVRF-')e8uoܑD'DTN.o8> KM*Gi"|T~K#~hlzd/P{ Vl*W<#VC;2k/@#x9cA&Kڛ(ymh$b;N< :Tc®ԬAY^%xWmpK"$jr]Q..bw +PkcEQx}j_%WJWS1aYKfM#,!" %q9<#vN U|* Cjmh,X?fȡ=؍(-Fj܅_ b ƈ ;tEƭb00!'hѥfA7/QRP>ze[*̰JESJC6Kfi54 ++Q|F2^:1@olhxMqhס#Ì]2Pt|-Smn&wͿcŇsx}zРpV="ء TRTBJ,: , 5d+<<&ڼRK +Rp%4[򿔍DpƁ[A/$'PX.GND!K|{j:0"|xwڕ%.SiCT^Q"'>~!^ qW\r'-ѿE[VrEyjΦ2#sJrYXf)^VfCgrf=A:fd;NnJ [\Ǫ˲ Ӕ䟵bqU\s";WqѾβy]Tb7AgiĦ{Y]{P] z wVrv?]kLdHQ+-Sy%Uzٌ3RXl_{&Ku(+:f +%GR %8)aWc|q!tpz%T5&0/~p8KXf\2y৽LP Rֈ<[{Kg΂W0vEͲ@6Ca@++<Ȫ'.BjF^őJ HƕDFA˴ l?j * bw$xhV +YP&oN +l,T^Rk*YBV qӹECJ=Rvm +tX5^c6̱b!fޒy #Vb(ɹGBzbbg5qq.dd(&T5SpPo#+g;(Jo}f8i1~ ClB߷+,U.0ܧ.XcТbױ2V%}l rrQ{(1:[̭m)3>EFoa)I:ʅbIgۧ;+Dc"jɹ`s/Z1i9G+a Z]q4䩀@C]Ꞗx';*gRSE5i^%FfwT3g|ퟦi) m βwr~? /v'oqa+1zg||%ϒ莇.xe9ُVɄ`9-KI6tYGhU8|P%)6/E[Җr; bKK/EXFeJM$h~/(j?E +a4=Ϋʋ|Mg_r/أuJ6W u܋c`|4wAّ ._0+KhnUWufϚZ9سkUůd̟Q?#g$>Ѿ %.(~9%Yl6ɡqk=_Â!qGMHQglyx 2<|[Ȥκ4bo2 O"6r4%Bp|6~/ nPD2Q-f~0U}\倬3wԅi'^1;UBRzOXnфW̎9G8lOI%B:AȜ Q ԟQ3 +\_&3b1@^r-uC|E8&z0&M[~+oY!_Ԟm\(I Jbt춭`đ޸h7pWۋKiDib:!s]mL{5FA͹$;SOEQ͒nY* 'Y%h^&~2o!J"cnέZ36h3Zk/r*hkɒǸ. @ cbeN>`]|}дđ *B3π%Jw Ξܗ*8ٻ 3NF#1sٓY63fgm~Ho9DdWvs?TJ&tIn%ID:.1 z4* >#=̌@.wF +dF )5I8b-L?hw֙.66b<Z4jb7*4 4=Cw);ڼ}ڸigC0l[Mmɯ bNک N+Z44ʬIa&!e7_FhHZ-Wf&eޑОM)Y.kN*bѱY*8㿟Q~g-3B!+#0%rZ\7_Σ9Z`k%cmW_o‚e3kdnt͝u>w+Q2+TK߬Ie4YSWULD,g, `4HY#}:t5Ո_M[MVX=~:P!7rvIwAִ,9=1þʽ ֶ aJ g/Bjc{i^38/?*L@q,A#Jx؁Иޝ`jq:kNOJhweO7MW- ਩baH +9;.^uf<"?XI]:}4\'v9M mʫd`K?:0>+Xtb[LgɅW}H׸P-G"Zs9CKA6VR74Z+k +acDdiOKiG$|h( )ctWY> w"n\U $\FV!i +P2qN; +-q&G;+1gIlw%> +jE-y`JۺߍVIt(3wm'(3@t%萡3,?pzqeEt[%舋4VО+o|ھ;O shBLGr hяK>0Dr %JKf'V㱾4l)*MiQ훼= +U=2FϵidosE+t}[}ւ :>O% fb < 8 q*b x5Sxϊ]lga)s!oTvDSb roo!]DoܩxݯMqmFI+>H|KN}UINZ 0cP i?kQ7 us'}Y+bJ[_jZT}3F/AK=rg;4-ya5b ]b5In&D3QPx oz0ԮIϱC]g!>=pvPrx4珣/EYc5|%ռ=\i?B9MX cKSѝ<&^ <'?%ҋlghb&q}KYZ>in#a'V!| ؍MAX0Z#k6l!e%tZW&^6J IgtZZ%[\:h>#)P <ɵd ~=ak'Xd-rC΂'IqT|wg;M#:.]Ca* BK놓S=5.tEHSu +3Y(>Cy;*J{9R-+̢VcJ@ĘiC +5;ekzM&bP9nNNbK~(-יEi+NY{9pQTBO߶8)KŞx)hp5ـBٝEiRHjRuZ65b΄@ r 5KI#g;ՃW:UEeCbM[mY/q;8p;}T,mZ}9{KYi'Ð,O&$ow'1`ݘ,,rmWr-@j^ϲDnTŴ +L튁b[:TvUhPrV(b#kUDI ~it}SUIuռQdV\ѭ$6[2:S, Y)Z݄{MMJd7&EI|Qx$z.`gdrPWva +LV(DcV`c2jpA(y#j ̓bhR0 Ŋy0_q +f2zxu5Q:dNKP{hj`s:z{)[ՐshfGm$bfBkh>{hc\ћck4Tq LGkLܥ[ a//U}ħ$rR myc҇ S>P +{3\ZNz>ERVM|t^ ˈVPe){N6᧽o)$M7L\Z??:LEyE .4 {)DG +q۹prv^!q8jkwQ\7s.˕t&9U Q[)^ +6 4*]mW8DӿнAc +[J$qoXoέz;o`2{Өė4 h1Nf(ǩ|agD9Icfay{fVo ]L`я`o)}c;c bX;E +8xT,G)*#[ ݯo[nz. X7bϐJ` :ۭr!cT!:y2bPi*OUc։V|aւ!E?glfFVU.͐n): _~KY"w$JdO)m,E@k8G#51N8& Kd{o`>ߩ_c9|8Π(`hM@B0H%(E&*/ec}YPmaWҿۅ"O=~޲<..X-PX7%zp1аl,+ؿDRV} 'HפJk-Kr>qlr)37#Q9g~hW6@ĥ` JuV٩h#ji#]խ fBx[-y&#L?w¾XuxŬSv`Li5˹sf!׻Wa^M3ٮO~ja,CWeUW1}!N +|A \%W <2e0lr!O)6`5Bmw$ W[5) QpݙNV+61SpQ)1X&@QC@ET&fjO~Ru`Pq_RR3gDknj_w6ų Y"[Qد;n+x?MhDK#+Pmﵤ 0#pV}><햞eoVM 턆ǖ?2.:Y);lֻ QXNcz]{8wW|rҕeYb;bw67r뱍Ȭz5smAN9Oe@.ˋÆ8m%j[F\K0c ƜfsCcy.Pc_ՊtNG66o^E -`o +8a}KUlZ8U#!59Pn84pۇO~w\6̑d S'6s 0"7"sA>vg㔃1>MY/eRñAMyH5L׀ +6Yi D3&}o`VfzZ05BjhZJQzYso8(6Cy&!D+`n6bh, >ͪZjj9>,xZٛmY$nᱪf#QZҧ ~j]$ެH* + INBc4)0Urm4/gM&՘nKMQKr֏2^Y`\CϫoYw~z,ఉ= +˹W,ī=n,s'o*'ilk1BgzEy̚.kl-R?@g919֫hmyLc]ER9]-9=Sh\j4LWKRD~GwI{μ:SXPڛq]h_YQ~Q [=׮g<;cs>`G`,D߄#g;R4. '4]B8@ÅO;gRSxv[ul=Swn^^k/&[Ɨr2&ApEqjP1Ux5NCE,C.UvdcxGZ]- F|6mx3 jts<"³kϪX\kp-\б._)^sXxm E CtЇ# vSi|zBb5ôc-dD" oMt9qnl׸2h2@ TN"L*}7 |lb.9<$WŸ, R<ɺVS:1& .`8zR$|>m|Gj4ŋ&hROOv uT`{yvۨ:A$dk/?R􊖀Q 2ls ^.XXM`Xós'j_+>i/cD&!Hlk#<0Zrїn`8q5n:Z#NM'#7D׮|@7{=u/?^>~`Lr&ӿM2Hz 4 ̏ k"*sѼ->OMso>0-aF?yx1> SD Nr_S4Cs{]. 3zeɂ*mxXʉ|0F$đo'\aB@/AhpJt%xIGW>*"2AXߔ 2]]3l {jjj=Lq}Kv(R-e 3' =q:T+n<ȵRp H0 mO[)sBIʹRзYcfo:. oPio7YؾK#,˧PۆPX}J*2i?.`nsƥ=&TnXՁzsOo??Ųg" -:u +fKCW;+X~Y0JUw@Ba/X: M;20pKf$xd Cr^CTqvSOZ hu +gSo앗Y4.B j7s-+2k,40L0J%RH9z8:;>W݁ZU&@@wYa8W1Dv`FFC G6pK+WˎEWq`SBBX^a`ODdt|Aڑf'k"#"fxTger8#C#†N Uѐr0*M+` +˱cI|4SԎR.t OtsV@iUBT'BTgƩ:;l]ώ(ӅFS (zĬ8 Qv3bV0B N#nhfR: *a,cL۹&֥%J˪\Ǟ5 #y:C( C(/8V* .74IU>'UU֪ҶתתRRRUZJ +9LW(g֕Օx!bNj+Y gRӹ [J^J[mT6bT[J8Us@g,禺@"e|PFƞ=wU.Ei;C+:ZAI"+PㆃqxK"L:]Ac`i6C?/r !d}aU>.GnzwХ6wXUT5 Qts3|nqVř +u=iD#YQQ /'$o4`*E10*/ATx)H$0%*^\6Cp@`=х Tkd:R)I6Jqˀ@܏!$FA 5@Wx@C,i{HC$HZީYn +5Z&ByAVz"4N +0!26,'[e#]`)|w;G!XɢW|gp;yvB7=0mՓϧ'rcQ@?* Vx2b`si1mON6idd X&riKS]<Ɇ+7;)2d> > +w&e#4 >_ XtF`6|hmNZ4 vvE+aEc9'PY=>W+%3s?Y~9\F]:!<ub9ǢMπ k-\Ĥ QU‹mZ$UI ?Tׇ@fnLJʻ_˘$9$5A 2| P<ˤ#ahHj"ts^&۱ŝ0Ӭk;ä Y,,bljC?JI–Մ_P[Gvm'jü}i!I$@BĞ7x" & 'm;&ݩhUl3[f{Z7 `Ydݡdc7T`BŽ!Q5ƤW4 ֪y)H]ClbJ,ۣ{e-o8 &I +!6n&Y:NKci $$9@<+=#NenWLҼQO(, +97sIθsZ^i^n +6eG*q^8SNzr7anI?ztKQVbw~'5ӳOՇ6`vL4g[-T,:A}{r*~ϩW׻}X /ËëgM>1qxpj8~~??<ͻcL﮾=}Nbk0޿}+!3I;3vR^/ztOj/6Ot ]zkzaC!Ì]% &}Ի 1~L񑐼k7I{E+r0{{/ t;S}o[ԍyCsκB ]ؿگʐ 2_󀐓'15.JEOPؐ=ߦ㢎7{GX endstream endobj 7 0 obj <> endobj 15 0 obj <>>>/Subtype/Form>>stream +0.627 0.78 0.91 rg +/GS0 gs +q 1 0 0 1 36.5703 100.6152 cm +0 0 m +22.674 23.375 l +126.715 23.375 l +146.278 -1.711 l +133.542 -3.911 l +133.927 -10.146 132.962 -21.639 77.771 -21.271 c +22.578 -20.904 12.93 -12.103 14.088 -1.344 c +13.123 -1.344 0 0 y +f +Q +0 0 0 rg +q 1 0 0 1 36.9863 100.7666 cm +0 0 m +2.199 -0.224 12.821 -1.302 13.672 -1.302 c +13.887 -1.302 l +13.863 -1.516 l +13.493 -4.96 14.328 -7.772 16.416 -10.113 c +22.975 -17.465 42.338 -20.997 77.355 -21.229 c +78.221 -21.235 79.068 -21.238 79.907 -21.238 c +107.598 -21.238 124.607 -18.08 130.464 -11.852 c +132.896 -9.264 133.088 -6.584 132.934 -4.074 c +132.923 -3.901 l +145.512 -1.727 l +126.204 23.03 l +22.34 23.03 l +h +79.907 -21.624 m +79.067 -21.624 78.22 -21.622 77.354 -21.616 c +42.219 -21.382 22.764 -17.809 16.128 -10.37 c +14.005 -7.99 13.131 -5.146 13.459 -1.68 c +11.541 -1.568 0.075 -0.396 -0.436 -0.344 c +-0.832 -0.303 l +22.176 23.417 l +126.393 23.417 l +126.451 23.343 l +146.213 -1.998 l +133.329 -4.224 l +133.469 -6.77 133.222 -9.48 130.745 -12.115 c +124.813 -18.425 107.708 -21.624 79.907 -21.624 c +f +Q + endstream endobj 16 0 obj <>>>/Subtype/Form>>stream +0.627 0.78 0.91 rg +/GS0 gs +q 1 0 0 1 283.5703 100.6152 cm +0 0 m +22.674 23.375 l +126.715 23.375 l +146.278 -1.711 l +133.542 -3.911 l +133.927 -10.146 132.962 -21.639 77.771 -21.271 c +22.578 -20.904 12.93 -12.103 14.088 -1.344 c +13.123 -1.344 0 0 y +f +Q +0 0 0 rg +q 1 0 0 1 283.9863 100.7666 cm +0 0 m +2.199 -0.224 12.821 -1.302 13.672 -1.302 c +13.887 -1.302 l +13.863 -1.516 l +13.493 -4.96 14.328 -7.772 16.416 -10.113 c +22.975 -17.465 42.338 -20.997 77.355 -21.229 c +78.221 -21.235 79.068 -21.238 79.907 -21.238 c +107.598 -21.238 124.607 -18.08 130.464 -11.852 c +132.896 -9.264 133.088 -6.584 132.934 -4.074 c +132.923 -3.901 l +145.512 -1.727 l +126.204 23.03 l +22.34 23.03 l +h +79.907 -21.624 m +79.067 -21.624 78.22 -21.622 77.354 -21.616 c +42.219 -21.382 22.764 -17.809 16.128 -10.37 c +14.005 -7.99 13.131 -5.146 13.459 -1.68 c +11.541 -1.568 0.075 -0.396 -0.436 -0.344 c +-0.832 -0.303 l +22.176 23.417 l +126.393 23.417 l +126.451 23.343 l +146.213 -1.998 l +133.329 -4.224 l +133.469 -6.77 133.222 -9.48 130.745 -12.115 c +124.813 -18.425 107.708 -21.624 79.907 -21.624 c +f +Q + endstream endobj 18 0 obj <> endobj 9 0 obj <> endobj 17 0 obj <> endobj 13 0 obj <>>>/TilingType 3/Type/Pattern/XStep 48.0/YStep 48.0>>stream +0.137 0.122 0.125 rg +/GS0 gs +q 1 0 0 1 24 -1.2002 cm +0 0 m +0.662 0 1.2 0.537 1.2 1.2 c +1.2 1.862 0.662 2.4 0 2.4 c +-0.663 2.4 -1.2 1.862 -1.2 1.2 c +-1.2 0.537 -0.663 0 0 0 c +f +Q +q 1 0 0 1 48 -1.2002 cm +0 0 m +0.662 0 1.2 0.537 1.2 1.2 c +1.2 1.862 0.662 2.4 0 2.4 c +-0.663 2.4 -1.2 1.862 -1.2 1.2 c +-1.2 0.537 -0.663 0 0 0 c +f +Q +q 1 0 0 1 0 22.7998 cm +0 0 m +0.662 0 1.2 0.537 1.2 1.2 c +1.2 1.862 0.662 2.4 0 2.4 c +-0.663 2.4 -1.2 1.862 -1.2 1.2 c +-1.2 0.537 -0.663 0 0 0 c +f +Q +q 1 0 0 1 24 22.7998 cm +0 0 m +0.662 0 1.2 0.537 1.2 1.2 c +1.2 1.862 0.662 2.4 0 2.4 c +-0.663 2.4 -1.2 1.862 -1.2 1.2 c +-1.2 0.537 -0.663 0 0 0 c +f +Q +q 1 0 0 1 48 22.7998 cm +0 0 m +0.662 0 1.2 0.537 1.2 1.2 c +1.2 1.862 0.662 2.4 0 2.4 c +-0.663 2.4 -1.2 1.862 -1.2 1.2 c +-1.2 0.537 -0.663 0 0 0 c +f +Q +q 1 0 0 1 24 46.7998 cm +0 0 m +0.662 0 1.2 0.537 1.2 1.2 c +1.2 1.862 0.662 2.4 0 2.4 c +-0.663 2.4 -1.2 1.862 -1.2 1.2 c +-1.2 0.537 -0.663 0 0 0 c +f +Q +q 1 0 0 1 48 46.7998 cm +0 0 m +0.662 0 1.2 0.537 1.2 1.2 c +1.2 1.862 0.662 2.4 0 2.4 c +-0.663 2.4 -1.2 1.862 -1.2 1.2 c +-1.2 0.537 -0.663 0 0 0 c +f +Q +q 1 0 0 1 0 -1.2002 cm +0 0 m +0.662 0 1.2 0.537 1.2 1.2 c +1.2 1.862 0.662 2.4 0 2.4 c +-0.663 2.4 -1.2 1.862 -1.2 1.2 c +-1.2 0.537 -0.663 0 0 0 c +f +Q +q 1 0 0 1 0 46.7998 cm +0 0 m +0.662 0 1.2 0.537 1.2 1.2 c +1.2 1.862 0.662 2.4 0 2.4 c +-0.663 2.4 -1.2 1.862 -1.2 1.2 c +-1.2 0.537 -0.663 0 0 0 c +f +Q +q 1 0 0 1 36 10.7998 cm +0 0 m +0.662 0 1.2 0.537 1.2 1.2 c +1.2 1.862 0.662 2.4 0 2.4 c +-0.663 2.4 -1.2 1.862 -1.2 1.2 c +-1.2 0.537 -0.663 0 0 0 c +f +Q +q 1 0 0 1 12 10.7998 cm +0 0 m +0.662 0 1.2 0.537 1.2 1.2 c +1.2 1.862 0.662 2.4 0 2.4 c +-0.663 2.4 -1.2 1.862 -1.2 1.2 c +-1.2 0.537 -0.663 0 0 0 c +f +Q +q 1 0 0 1 36 34.7998 cm +0 0 m +0.662 0 1.2 0.537 1.2 1.2 c +1.2 1.862 0.662 2.4 0 2.4 c +-0.663 2.4 -1.2 1.862 -1.2 1.2 c +-1.2 0.537 -0.663 0 0 0 c +f +Q +q 1 0 0 1 12 34.7998 cm +0 0 m +0.662 0 1.2 0.537 1.2 1.2 c +1.2 1.862 0.662 2.4 0 2.4 c +-0.663 2.4 -1.2 1.862 -1.2 1.2 c +-1.2 0.537 -0.663 0 0 0 c +f +Q + endstream endobj 14 0 obj <>>>/TilingType 3/Type/Pattern/XStep 48.0/YStep 48.0>>stream +0.137 0.122 0.125 rg +/GS0 gs +q 1 0 0 1 24 -1.2002 cm +0 0 m +0.662 0 1.2 0.537 1.2 1.2 c +1.2 1.862 0.662 2.4 0 2.4 c +-0.663 2.4 -1.2 1.862 -1.2 1.2 c +-1.2 0.537 -0.663 0 0 0 c +f +Q +q 1 0 0 1 48 -1.2002 cm +0 0 m +0.662 0 1.2 0.537 1.2 1.2 c +1.2 1.862 0.662 2.4 0 2.4 c +-0.663 2.4 -1.2 1.862 -1.2 1.2 c +-1.2 0.537 -0.663 0 0 0 c +f +Q +q 1 0 0 1 0 22.7998 cm +0 0 m +0.662 0 1.2 0.537 1.2 1.2 c +1.2 1.862 0.662 2.4 0 2.4 c +-0.663 2.4 -1.2 1.862 -1.2 1.2 c +-1.2 0.537 -0.663 0 0 0 c +f +Q +q 1 0 0 1 24 22.7998 cm +0 0 m +0.662 0 1.2 0.537 1.2 1.2 c +1.2 1.862 0.662 2.4 0 2.4 c +-0.663 2.4 -1.2 1.862 -1.2 1.2 c +-1.2 0.537 -0.663 0 0 0 c +f +Q +q 1 0 0 1 48 22.7998 cm +0 0 m +0.662 0 1.2 0.537 1.2 1.2 c +1.2 1.862 0.662 2.4 0 2.4 c +-0.663 2.4 -1.2 1.862 -1.2 1.2 c +-1.2 0.537 -0.663 0 0 0 c +f +Q +q 1 0 0 1 24 46.7998 cm +0 0 m +0.662 0 1.2 0.537 1.2 1.2 c +1.2 1.862 0.662 2.4 0 2.4 c +-0.663 2.4 -1.2 1.862 -1.2 1.2 c +-1.2 0.537 -0.663 0 0 0 c +f +Q +q 1 0 0 1 48 46.7998 cm +0 0 m +0.662 0 1.2 0.537 1.2 1.2 c +1.2 1.862 0.662 2.4 0 2.4 c +-0.663 2.4 -1.2 1.862 -1.2 1.2 c +-1.2 0.537 -0.663 0 0 0 c +f +Q +q 1 0 0 1 0 -1.2002 cm +0 0 m +0.662 0 1.2 0.537 1.2 1.2 c +1.2 1.862 0.662 2.4 0 2.4 c +-0.663 2.4 -1.2 1.862 -1.2 1.2 c +-1.2 0.537 -0.663 0 0 0 c +f +Q +q 1 0 0 1 0 46.7998 cm +0 0 m +0.662 0 1.2 0.537 1.2 1.2 c +1.2 1.862 0.662 2.4 0 2.4 c +-0.663 2.4 -1.2 1.862 -1.2 1.2 c +-1.2 0.537 -0.663 0 0 0 c +f +Q +q 1 0 0 1 36 10.7998 cm +0 0 m +0.662 0 1.2 0.537 1.2 1.2 c +1.2 1.862 0.662 2.4 0 2.4 c +-0.663 2.4 -1.2 1.862 -1.2 1.2 c +-1.2 0.537 -0.663 0 0 0 c +f +Q +q 1 0 0 1 12 10.7998 cm +0 0 m +0.662 0 1.2 0.537 1.2 1.2 c +1.2 1.862 0.662 2.4 0 2.4 c +-0.663 2.4 -1.2 1.862 -1.2 1.2 c +-1.2 0.537 -0.663 0 0 0 c +f +Q +q 1 0 0 1 36 34.7998 cm +0 0 m +0.662 0 1.2 0.537 1.2 1.2 c +1.2 1.862 0.662 2.4 0 2.4 c +-0.663 2.4 -1.2 1.862 -1.2 1.2 c +-1.2 0.537 -0.663 0 0 0 c +f +Q +q 1 0 0 1 12 34.7998 cm +0 0 m +0.662 0 1.2 0.537 1.2 1.2 c +1.2 1.862 0.662 2.4 0 2.4 c +-0.663 2.4 -1.2 1.862 -1.2 1.2 c +-1.2 0.537 -0.663 0 0 0 c +f +Q + endstream endobj 11 0 obj <> endobj 12 0 obj <> endobj 20 0 obj <> endobj 21 0 obj <>stream +H|U{Tg!&3U7İvF3zXuW!(E^ D% I0Wxd@y*/!VĊT|Ԗbj+mux_g}w{}"|E|{Tm+JJQ%K:iDمEs#Y$EoA)dʩ sv* *kj^GxbJLD}m[p!} xc+%Hd!"|̯[[[f-{Q ~^XZІwMlTG5/.=6IdMIHWn,VW[~b#7h @ +@;̷,2fI„Z8`S`$zB\3Ef#ch@8vh(WҜa w27 mgvsFb뵷5urxJ0ez<:;bǑX Bg[q#8;;='<9:rjsiksa Mz 7yr1:S <̋E'I&o{0g?hcA)&v4wLB>co1QrG#!L1~AXĉ]+Ojś-PR%2+loos +TCdB IB2{˧$O5»BdШ߂m-s&72e) #Dw߮˨'"+B +_9G0Lv݂aA+M'Â/9`s;(-$7xb\Ln}{ ,\ u4U- $ŨMxM4߽.N= +*1$;*{BŇ=@sGh+JK!_478"I& m69kk:;g *g[Mu.X!+Vm+v(UtCZF̾ݦ,ܔUUp@pd}A1_pm^.c0=~E;|ۛݒk%0筒5(6qM +u9O +BͅIZq[k˛dQ€JlӤ3hHbb=%\;.,R`Rh/۱=.oDVVQW[[#.E|bT\D}4/y+.(/nz= 'q5uVףO$*7s$j3?R/t(ȣw+yɋKm^bӞ)~ˀAƾMKY[J fݑ>} qf.V.!/\f]򩩳̑;_*l%m`X [}?f-aMkW#iy]@[ʺmJk:Ԛt鸄OK շJ# gy+m@=$[`r~+,h VVyL^:CXo٤q.)7ws=a! 8Wᔋ9s>j[E~$C# endstream endobj 19 0 obj <> endobj 22 0 obj <>stream +H|{L[U{)^uB3޻ل-`Kyԕ޶t ƫKY`y8d*SEfcH4D.y[ÿI~9;s0Qhð]/ge}g8iЩ0>&$rINxug- +?0T8NMUx8Ȥ |&Ȕx&ITd26abVl}6p*3N`2t:&p\њVkd9F%$5ZcՌS*w12ъhЋ)kVl&FW' +] )iYSBbVKjIalH K2"BOQH-ac_ ܿ(杻6  p>eSA4ԋҠW‡mBvAPN +&2(}+Fɣ +!吾+c'%yroD۫ +alH@6FN[JQRRoې9ri}I<.{gƫijhHŗ9r'44k^w5.w6ZGWfkBZMRyߝQt{n%¾kKD}I4F:!k~fvjfnvu;{An-ͩ%{=)G}Տҟwi +SDO^Ȁ|NZ:$wxY+ݭ%r;.[R$F)x'QzeVR ?Igѩdz#c5^Zjm*OD_jA-/ W =(2\q:#PÿA-E! endstream endobj 10 0 obj <> endobj 8 0 obj [/Pattern] endobj 23 0 obj <> endobj xref 0 24 0000000000 65535 f +0000000016 00000 n +0000000076 00000 n +0000054874 00000 n +0000000000 00000 f +0000054925 00000 n +0000055457 00000 n +0000209394 00000 n +0000221654 00000 n +0000212015 00000 n +0000221531 00000 n +0000216614 00000 n +0000216923 00000 n +0000212190 00000 n +0000214402 00000 n +0000209458 00000 n +0000210704 00000 n +0000212127 00000 n +0000211952 00000 n +0000220114 00000 n +0000217297 00000 n +0000217618 00000 n +0000220419 00000 n +0000221680 00000 n +trailer <<3A983B3A843B40189BA56A194EA9DD5B>]>> startxref 221857 %%EOF \ No newline at end of file diff --git a/doc/main.bib b/doc/main.bib index 09ed83f4..74dcc1fc 100644 --- a/doc/main.bib +++ b/doc/main.bib @@ -247,6 +247,17 @@ year={1994} } +@inproceedings{Veach1997Metropolis, + author = {Veach, Eric and Guibas, Leonidas J.}, + title = {Metropolis light transport}, + booktitle = {Proceedings of the 24th annual conference on Computer graphics and interactive techniques}, + series = {SIGGRAPH '97}, + year = {1997}, + pages = {65--76}, + publisher = {ACM Press/Addison-Wesley Publishing Co.}, + address = {New York, NY, USA} +} + @article{Grunschloss2010Enumerating, title={Enumerating Quasi-Monte Carlo Point Sequences in Elementary Intervals}, author={Gr{\"u}nschlo{\ss}, L. and Raab, M. and Keller, A.}, diff --git a/include/mitsuba/bidir/util.h b/include/mitsuba/bidir/util.h index a1311b63..ec3998c6 100644 --- a/include/mitsuba/bidir/util.h +++ b/include/mitsuba/bidir/util.h @@ -69,6 +69,15 @@ public: RenderQueue *queue, int sizeFactor, ref &nestedJob); }; +/// Restores the measure of a path vertex after going out of scope +struct RestoreMeasureHelper { + RestoreMeasureHelper(PathVertex *vertex) + : vertex(vertex), measure(vertex->measure) { } + ~RestoreMeasureHelper() { vertex->measure = measure; } + PathVertex *vertex; + uint8_t measure; +}; + MTS_NAMESPACE_END #endif /* __MITSUBA_BIDIR_UTIL_H_ */ diff --git a/include/mitsuba/render/mipmap.h b/include/mitsuba/render/mipmap.h index 2246acc8..0820cc69 100644 --- a/include/mitsuba/render/mipmap.h +++ b/include/mitsuba/render/mipmap.h @@ -755,10 +755,13 @@ protected: for (int ut = u0; ut <= u1; ++ut) { if (q < (Float) MTS_MIPMAP_LUT_SIZE) { - const Float weight = m_weightLut[(int) q]; - result += evalTexel(level, ut, vt) * weight; - denominator += weight; - ++nSamples; + uint32_t qi = (uint32_t) q; + if (qi < MTS_MIPMAP_LUT_SIZE) { + const Float weight = m_weightLut[(int) q]; + result += evalTexel(level, ut, vt) * weight; + denominator += weight; + ++nSamples; + } } q += dq; diff --git a/src/integrators/bdpt/bdpt_proc.cpp b/src/integrators/bdpt/bdpt_proc.cpp index 817259f2..b17c9822 100644 --- a/src/integrators/bdpt/bdpt_proc.cpp +++ b/src/integrators/bdpt/bdpt_proc.cpp @@ -18,7 +18,7 @@ #include #include -#include +#include #include "bdpt_proc.h" MTS_NAMESPACE_BEGIN @@ -175,6 +175,8 @@ public: *vsEdge = emitterSubpath.edgeOrNull(s-1), *vtEdge = sensorSubpath.edgeOrNull(t-1); + RestoreMeasureHelper rmh0(vs), rmh1(vt); + /* Will be set to true if direct sampling was used */ bool sampleDirect = false; @@ -215,16 +217,14 @@ public: if (s == 1) { if (vt->isDegenerate()) continue; - /* Generate a position on an emitter using direct sampling */ value = radianceWeights[t] * vt->sampleDirect(scene, m_sampler, &tempEndpoint, &tempEdge, &tempSample, EImportance); - if (value.isZero()) continue; vs = &tempSample; vsPred = &tempEndpoint; vsEdge = &tempEdge; value *= vt->eval(scene, vtPred, vs, ERadiance); - + vt->measure = EArea; } else { if (vs->isDegenerate()) continue; @@ -235,6 +235,7 @@ public: continue; vt = &tempSample; vtPred = &tempEndpoint; vtEdge = &tempEdge; value *= vs->eval(scene, vsPred, vt, EImportance); + vs->measure = EArea; } sampleDirect = true; @@ -246,6 +247,10 @@ public: value = importanceWeights[s] * radianceWeights[t] * vs->eval(scene, vsPred, vt, EImportance) * vt->eval(scene, vtPred, vs, ERadiance); + + /* Temporarily force vertex measure to EArea. Needed to + handle BSDFs with diffuse + specular components */ + vs->measure = vt->measure = EArea; } /* Attempt to connect the two endpoints, which could result in @@ -273,6 +278,7 @@ public: emitterSubpath.swapEndpoints(vsPred, vsEdge, vs); } + /* Compute the multiple importance sampling weight */ Float miWeight = Path::miWeight(scene, emitterSubpath, &connectionEdge, sensorSubpath, s, t, m_config.sampleDirect, m_config.lightImage); diff --git a/src/integrators/mlt/mlt.cpp b/src/integrators/mlt/mlt.cpp index 1a7e74b3..60c4adfd 100644 --- a/src/integrators/mlt/mlt.cpp +++ b/src/integrators/mlt/mlt.cpp @@ -22,14 +22,54 @@ MTS_NAMESPACE_BEGIN -/** +/*!\plugin{mlt}{Path Space Metropolis Light Transport} * \order{10} - * Veach-style Metropolis Light Transport implementation with support for - * bidirectional mutations, lens perturbations, caustic perturbations and - * multi-chain perturbations. Several optimizations are also implemented, - * namely separate direct illumination, two-stage MLT, - * and importance sampling of mutation strategies. For details, see the - * respective parameter descriptions. + * \parameters{ + * \parameter{directSamples}{\Integer}{ + * By default, the implementation renders direct illumination component + * separately using the \pluginref{direct} plugin, which + * uses low-discrepancy number sequences for superior performance + * (in other words, it is \emph{not} handled by MLT). This + * parameter specifies the number of samples allocated to that method. To + * force MLT to be responsible for the direct illumination + * component as well, set this to \code{-1}. \default{16} + * } + * \parameter{maxDepth}{\Integer}{Specifies the longest path depth + * in the generated output image (where \code{-1} corresponds to $\infty$). + * A value of \code{1} will only render directly visible light sources. + * \code{2} will lead to single-bounce (direct-only) illumination, + * and so on. \default{\code{-1}} + * } + * \parameter{rrDepth}{\Integer}{Specifies the minimum path depth, after + * which the implementation will start to use the ``russian roulette'' + * path termination criterion. \default{\code{5}} + * } + * \parameter{luminanceSamples}{\Integer}{ + * MLT-type algorithms create output images that are only + * \emph{relative}. The algorithm can e.g. determine that a certain pixel + * is approximately twice as bright as another one, but the absolute + * scale is unknown. To recover it, this plugin computes + * the average luminance arriving at the sensor by generating a + * number of samples. \default{\code{100000} samples} + * } + * \parameter{twoStage}{\Boolean}{Use two-stage MLT? + * See below for details. \default{{\footnotesize\code{false}}}} + * \parameter{bidirectional\showbreak Mutation, [lens,caustic,multiChain]\showbreak Perturbation}{\Boolean}{ + * These parameters can be used to choose the mutation strategies that + * should be used. By default, only the bidirectional mutation is + * enabled. + * } + * } + * Metropolis Light Transport is a seminal rendering technique proposed by Veach and + * Guibas \cite{Veach1997Metropolis}, which applies the Metropolis-Hastings + * algorithm to the problem of light transport in the path-space setting. + * + * \renderings{ + * \vspace{-2mm} + * \includegraphics[width=\textwidth]{images/integrator_mlt_sketch.pdf}\hfill\, + * \vspace{-3mm} + * \caption{The available mutation types} + * } */ class MLT : public Integrator { public: @@ -67,24 +107,14 @@ public: received by the scene's sensor */ m_config.luminanceSamples = props.getInteger("luminanceSamples", 100000); - /* Should direct illumination be handled separately? (i.e. not - using MLT) This is usually the right way to go, since direct - illumination is easily handled using more optimized rendering - techniques that can make use of low-discrepancy point sets. - This in turn lets MLT focus on the more difficult parts of the - light transport. On the other hand, some scenes use very - hard to find paths even for direct illumination, in which case - it may make more sense to set this property to 'false' */ - m_config.separateDirect = props.getBoolean("separateDirect", - true); - - /* When 'separateDirect' is set to 'true', this parameter can - be used to specify the samples per pixel used to render the - direct component. Should be a power of two (otherwise, it will + /* This parameter can be used to specify the samples per pixel used to + render the direct component. Should be a power of two (otherwise, it will be rounded to the next one). When set to zero or less, the direct illumination component will be hidden, which is useful - for analyzing the component rendered by MLT. */ + for analyzing the component rendered by MLT. When set to -1, + MLT will handle direct illumination as well */ m_config.directSamples = props.getInteger("directSamples", 16); + m_config.separateDirect = m_config.directSamples >= 0; /* Specifies the number of parallel work units required for multithreaded and network rendering. When set to -1, the @@ -111,6 +141,8 @@ public: /* Selectively enable/disable the manifold perturbation */ m_config.manifoldPerturbation = props.getBoolean("manifoldPerturbation", false); m_config.probFactor = props.getFloat("probFactor", 50); + + /* Stop MLT after X seconds -- useful for equal-time comparisons */ m_config.timeout = props.getInteger("timeout", 0); } @@ -171,11 +203,6 @@ public: return false; } Log(EInfo, "First MLT stage took %i ms", timer->getMilliseconds()); - - std::string debugFile = "mlt_stage1.exr"; - Log(EInfo, "Writing upsampled luminances to \"%s\"", debugFile.c_str()); - ref fs = new FileStream(debugFile, FileStream::ETruncReadWrite); - m_config.importanceMap->write(Bitmap::EOpenEXR, fs); } bool nested = m_config.twoStage && m_config.firstStage; @@ -203,12 +230,17 @@ public: ref rplSampler = new ReplayableSampler(); ref pathSampler = new PathSampler(PathSampler::EBidirectional, scene, - rplSampler, rplSampler, NULL, m_config.maxDepth, 10, + rplSampler, rplSampler, rplSampler, m_config.maxDepth, 10, m_config.separateDirect, true); - + std::vector pathSeeds; ref process = new MLTProcess(job, queue, m_config, directImage, pathSeeds); + + m_config.luminance = pathSampler->generateSeeds(m_config.luminanceSamples, + m_config.workUnits, false, pathSeeds); + + pathSeeds.clear(); m_config.luminance = pathSampler->generateSeeds(m_config.luminanceSamples, m_config.workUnits, true, pathSeeds); diff --git a/src/integrators/mlt/mlt_proc.cpp b/src/integrators/mlt/mlt_proc.cpp index 5df58291..e6e01cfe 100644 --- a/src/integrators/mlt/mlt_proc.cpp +++ b/src/integrators/mlt/mlt_proc.cpp @@ -79,7 +79,7 @@ public: static_cast(getResource("rplSampler"))->clone().get()); m_pathSampler = new PathSampler(PathSampler::EBidirectional, m_scene, - m_rplSampler, m_rplSampler, NULL, m_config.maxDepth, 10, + m_rplSampler, m_rplSampler, m_rplSampler, m_config.maxDepth, 10, m_config.separateDirect, true); m_pool = &m_pathSampler->getMemoryPool(); diff --git a/src/integrators/photonmapper/sppm.cpp b/src/integrators/photonmapper/sppm.cpp index 2048f312..b292524f 100644 --- a/src/integrators/photonmapper/sppm.cpp +++ b/src/integrators/photonmapper/sppm.cpp @@ -102,7 +102,7 @@ public: /* Indicates if the gathering steps should be canceled if not enough photons are generated. */ m_autoCancelGathering = props.getBoolean("autoCancelGathering", true); m_mutex = new Mutex(); - if (m_maxDepth <= 1) + if (m_maxDepth <= 1 && m_maxDepth != -1) Log(EError, "Maximum depth must be set to \"2\" or higher!"); } @@ -150,6 +150,7 @@ public: m_gatherBlocks.clear(); m_running = true; m_totalEmitted = 0; + m_totalPhotons = 0; ref sampler = static_cast (PluginManager::getInstance()-> createObject(MTS_CLASS(Sampler), Properties("independent"))); @@ -258,7 +259,7 @@ public: if (gatherPoint.its.isEmitter()) gatherPoint.emission += weight * gatherPoint.its.Le(-ray.d); - if (depth >= m_maxDepth) { + if (depth >= m_maxDepth && m_maxDepth != -1) { gatherPoint.depth = -1; break; } @@ -270,7 +271,7 @@ public: a glossy material */ if ((bsdf->getType() & BSDF::EAll) == BSDF::EDiffuseReflection || (bsdf->getType() & BSDF::EAll) == BSDF::EDiffuseTransmission || - depth + 1 > m_maxDepth) { + (depth + 1 > m_maxDepth && m_maxDepth != -1)) { gatherPoint.weight = weight; gatherPoint.depth = depth; break; @@ -302,13 +303,14 @@ public: void photonMapPass(int it, RenderQueue *queue, const RenderJob *job, Film *film, int sceneResID, int sensorResID, int samplerResID) { - Log(EInfo, "Performing a photon mapping pass %i", it); + Log(EInfo, "Performing a photon mapping pass %i (" SIZE_T_FMT " photons so far)", + it, m_totalPhotons); ref sched = Scheduler::getInstance(); /* Generate the global photon map */ ref proc = new GatherPhotonProcess( GatherPhotonProcess::EAllSurfacePhotons, m_photonCount, - m_granularity, m_maxDepth-1, m_rrDepth, true, + m_granularity, m_maxDepth == -1 ? -1 : m_maxDepth-1, m_rrDepth, true, m_autoCancelGathering, job); proc->bindResource("scene", sceneResID); @@ -325,6 +327,7 @@ public: Log(EInfo, "Gathering .."); m_totalEmitted += proc->getShotParticles(); + m_totalPhotons += photonMap->size(); film->clear(); #if defined(MTS_OPENMP) #pragma omp parallel for schedule(dynamic) @@ -340,7 +343,7 @@ public: if (gp.depth != -1) { M = (Float) photonMap->estimateRadianceRaw( - gp.its, gp.radius, flux, m_maxDepth-gp.depth); + gp.its, gp.radius, flux, m_maxDepth == -1 ? INT_MAX : m_maxDepth-gp.depth); } else { M = 0; flux = Spectrum(0.0f); @@ -391,7 +394,7 @@ private: Float m_initialRadius, m_alpha; int m_photonCount, m_granularity; int m_maxDepth, m_rrDepth; - size_t m_totalEmitted; + size_t m_totalEmitted, m_totalPhotons; bool m_running; bool m_autoCancelGathering; }; diff --git a/src/integrators/pssmlt/pssmlt.cpp b/src/integrators/pssmlt/pssmlt.cpp index c65ecfc6..d25cafdf 100644 --- a/src/integrators/pssmlt/pssmlt.cpp +++ b/src/integrators/pssmlt/pssmlt.cpp @@ -17,7 +17,6 @@ */ #include -#include #include #include "pssmlt_proc.h" #include "pssmlt_sampler.h" @@ -202,14 +201,14 @@ public: MLT variant. The default is 0.3. */ m_config.pLarge = props.getFloat("pLarge", 0.3f); - /* When 'separateDirect' is set to 'true', this parameter can - be used to specify the samples per pixel used to render the - direct component. Should be a power of two (otherwise, it will + /* This parameter can be used to specify the samples per pixel used to + render the direct component. Should be a power of two (otherwise, it will be rounded to the next one). When set to zero or less, the direct illumination component will be hidden, which is useful - for analyzing the component rendered by MLT. */ + for analyzing the component rendered by MLT. When set to -1, + PSSMLT will handle direct illumination as well */ m_config.directSamples = props.getInteger("directSamples", 16); - m_config.separateDirect = m_config.directSamples < 0; + m_config.separateDirect = m_config.directSamples >= 0; /* Should the multiple importance sampling-based weight computation by Kelemen et al. be used? Otherwise, the implementation falls back @@ -226,7 +225,7 @@ public: m_config.directSampling = props.getBoolean( "directSampling", true); - /* Recommended mutation sizes in the primary sample space */ + /* Recommended mutation sizes in primary sample space */ m_config.mutationSizeLow = props.getFloat("mutationSizeLow", 1.0f/1024.0f); m_config.mutationSizeHigh = props.getFloat("mutationSizeHigh", 1.0f/64.0f); Assert(m_config.mutationSizeLow > 0 && m_config.mutationSizeHigh > 0 && @@ -242,6 +241,8 @@ public: possible, while ensuring that there are enough units to keep all workers busy. */ m_config.workUnits = props.getInteger("workUnits", -1); + + /* Stop MLT after X seconds -- useful for equal-time comparisons */ m_config.timeout = props.getInteger("timeout", 0); } @@ -305,11 +306,6 @@ public: return false; } Log(EInfo, "First MLT stage took %i ms", timer->getMilliseconds()); - - std::string debugFile = "mlt_stage1.exr"; - Log(EInfo, "Writing upsampled luminances to \"%s\"", debugFile.c_str()); - ref fs = new FileStream(debugFile, FileStream::ETruncReadWrite); - m_config.importanceMap->write(Bitmap::EOpenEXR, fs); } bool nested = m_config.twoStage && m_config.firstStage; @@ -320,9 +316,12 @@ public: nested ? "nested " : "", cropSize.x, cropSize.y, nCores, nCores == 1 ? "core" : "cores", sampleCount); + size_t desiredMutationsPerWorkUnit = + m_config.technique == PathSampler::EBidirectional ? 100000 : 200000; + if (m_config.workUnits <= 0) m_config.workUnits = (size_t) std::ceil((cropSize.x * cropSize.y - * sampleCount) / 200000.0f); + * sampleCount) / (Float) desiredMutationsPerWorkUnit); m_config.nMutations = (cropSize.x * cropSize.y * sampleCount) / m_config.workUnits; diff --git a/src/integrators/pssmlt/pssmlt_proc.cpp b/src/integrators/pssmlt/pssmlt_proc.cpp index 32e6a178..a58c57a8 100644 --- a/src/integrators/pssmlt/pssmlt_proc.cpp +++ b/src/integrators/pssmlt/pssmlt_proc.cpp @@ -104,7 +104,6 @@ public: m_rplSampler->setSampleIndex(seed.sampleIndex); m_pathSampler->sampleSplats(Point2i(-1), *current); - current->normalize(m_config.importanceMap); result->clear(); ref random = m_origSampler->getRandom(); @@ -132,8 +131,10 @@ public: /* MLT main loop */ Float cumulativeWeight = 0; + current->normalize(m_config.importanceMap); for (uint64_t mutationCtr=0; mutationCtrgetTimeout() > 0 && (mutationCtr % 8192) == 0 && (int) timer->getMilliseconds() > wu->getTimeout()) + if (wu->getTimeout() > 0 && (mutationCtr % 8192) == 0 + && (int) timer->getMilliseconds() > wu->getTimeout()) break; bool largeStep = random->nextFloat() < m_config.pLarge; @@ -156,8 +157,8 @@ public: Float currentWeight, proposedWeight; if (a > 0) { - if (m_config.kelemenStyleWeights) { - /* Kelemen-style MLT weights */ + if (m_config.kelemenStyleWeights && !m_config.importanceMap) { + /* Kelemen-style MLT weights (these don't work for 2-stage MLT) */ currentWeight = (1 - a) * current->luminance / (current->luminance/m_config.luminance + m_config.pLarge); proposedWeight = (a + (largeStep ? 1 : 0)) * proposed->luminance @@ -282,8 +283,13 @@ void PSSMLTProcess::develop() { /* Compute the luminance correction factor */ Float avgLuminance = 0; - for (size_t i=0; i #include +#include #include #include #include @@ -129,6 +130,8 @@ void PathSampler::sampleSplats(const Point2i &offset, SplatList &list) { *vsEdge = m_emitterSubpath.edgeOrNull(s-1), *vtEdge = m_sensorSubpath.edgeOrNull(t-1); + RestoreMeasureHelper rmh0(vs), rmh1(vt); + /* Will be set to true if direct sampling was used */ bool sampleDirect = false; @@ -178,7 +181,7 @@ void PathSampler::sampleSplats(const Point2i &offset, SplatList &list) { continue; vs = &tempSample; vsPred = &tempEndpoint; vsEdge = &tempEdge; value *= vt->eval(m_scene, vtPred, vs, ERadiance); - + vt->measure = EArea; } else { if (vs->isDegenerate()) continue; @@ -189,6 +192,7 @@ void PathSampler::sampleSplats(const Point2i &offset, SplatList &list) { continue; vt = &tempSample; vtPred = &tempEndpoint; vtEdge = &tempEdge; value *= vs->eval(m_scene, vsPred, vt, EImportance); + vs->measure = EArea; } sampleDirect = true; @@ -200,8 +204,11 @@ void PathSampler::sampleSplats(const Point2i &offset, SplatList &list) { value = importanceWeights[s] * radianceWeights[t] * vs->eval(m_scene, vsPred, vt, EImportance) * vt->eval(m_scene, vtPred, vs, ERadiance); - } + /* Temporarily force vertex measure to EArea. Needed to + handle BSDFs with diffuse + specular components */ + vs->measure = vt->measure = EArea; + } /* Attempt to connect the two endpoints, which could result in the creation of additional vertices (index-matched boundaries etc.) */ @@ -366,6 +373,8 @@ void PathSampler::samplePaths(const Point2i &offset, PathCallback &callback) { PathEdge *vsEdge = m_emitterSubpath.edgeOrNull(s-1), *vtEdge = m_sensorSubpath.edgeOrNull(t-1); + + RestoreMeasureHelper rmh0(vs), rmh1(vt); /* Will be set to true if direct sampling was used */ bool sampleDirect = false; @@ -420,6 +429,7 @@ void PathSampler::samplePaths(const Point2i &offset, PathCallback &callback) { vs = &tempSample; vsPred = &tempEndpoint; vsEdge = &tempEdge; value *= vt->eval(m_scene, vtPred, vs, ERadiance); vsMeasure = vs->getAbstractEmitter()->needsDirectionSample() ? EArea : EDiscrete; + vt->measure = EArea; } else { if (vs->isDegenerate()) continue; @@ -431,6 +441,7 @@ void PathSampler::samplePaths(const Point2i &offset, PathCallback &callback) { vt = &tempSample; vtPred = &tempEndpoint; vtEdge = &tempEdge; value *= vs->eval(m_scene, vsPred, vt, EImportance); vtMeasure = vt->getAbstractEmitter()->needsDirectionSample() ? EArea : EDiscrete; + vs->measure = EArea; } sampleDirect = true; @@ -442,6 +453,10 @@ void PathSampler::samplePaths(const Point2i &offset, PathCallback &callback) { value = importanceWeights[s] * radianceWeights[t] * vs->eval(m_scene, vsPred, vt, EImportance) * vt->eval(m_scene, vtPred, vs, ERadiance); + + /* Temporarily force vertex measure to EArea. Needed to + handle BSDFs with diffuse + specular components */ + vs->measure = vt->measure = EArea; } /* Attempt to connect the two endpoints, which could result in @@ -459,6 +474,14 @@ void PathSampler::samplePaths(const Point2i &offset, PathCallback &callback) { PathEdge connectionEdge; m_connectionSubpath.collapseTo(connectionEdge); + /* Account for the terms of the measurement contribution + function that are coupled to the connection edge */ + if (!sampleDirect) + value *= connectionEdge.evalCached(vs, vt, PathEdge::EGeneralizedGeometricTerm); + else + value *= connectionEdge.evalCached(vs, vt, PathEdge::ETransmittance | + (s == 1 ? PathEdge::ECosineRad : PathEdge::ECosineImp)); + if (sampleDirect) { /* A direct sampling strategy was used, which generated two new vertices at one of the path ends. Temporarily @@ -473,14 +496,6 @@ void PathSampler::samplePaths(const Point2i &offset, PathCallback &callback) { value *= Path::miWeight(m_scene, m_emitterSubpath, &connectionEdge, m_sensorSubpath, s, t, m_sampleDirect, m_lightImage); - /* Account for the terms of the measurement contribution - function that are coupled to the connection edge */ - if (!sampleDirect) - value *= connectionEdge.evalCached(vs, vt, PathEdge::EGeneralizedGeometricTerm); - else - value *= connectionEdge.evalCached(vs, vt, PathEdge::ETransmittance | - (s == 1 ? PathEdge::ECosineRad : PathEdge::ECosineImp)); - if (!value.isZero()) { int k = (int) m_connectionSubpath.vertexCount(); /* Construct the full path, make a temporary backup copy of the connection vertices */ diff --git a/src/libbidir/vertex.cpp b/src/libbidir/vertex.cpp index 92daf3c9..29939912 100644 --- a/src/libbidir/vertex.cpp +++ b/src/libbidir/vertex.cpp @@ -240,6 +240,7 @@ bool PathVertex::sampleNext(const Scene *scene, Sampler *sampler, return false; ray.time = mRec.time; + ray.mint = 0; ray.setOrigin(mRec.p); ray.setDirection(pRec.wo); measure = ESolidAngle; diff --git a/src/librender/scene.cpp b/src/librender/scene.cpp index 34f06e75..cba1735c 100644 --- a/src/librender/scene.cpp +++ b/src/librender/scene.cpp @@ -673,8 +673,13 @@ bool Scene::rayIntersectAll(const Ray &ray) const { if (rayIntersect(ray)) return true; + Float mint = ray.mint; + if (mint == Epsilon) + mint *= std::max(std::max(std::max(std::abs(ray.o.x), + std::abs(ray.o.y)), std::abs(ray.o.z)), Epsilon); + for (size_t i=0; irayIntersect(ray, ray.mint, ray.maxt)) + if (m_specialShapes[i]->rayIntersect(ray, mint, ray.maxt)) return true; } @@ -690,10 +695,16 @@ bool Scene::rayIntersectAll(const Ray &ray, Float &t, uint8_t buffer[MTS_KD_INTERSECTION_TEMP]; Float tempT, maxt = result ? t : ray.maxt; + Float mint = ray.mint; + if (mint == Epsilon) + mint *= std::max(std::max(std::max(std::abs(ray.o.x), + std::abs(ray.o.y)), std::abs(ray.o.z)), Epsilon); + + for (size_t i=0; irayIntersect(ray, ray.mint, maxt, tempT, buffer)) { + if (shape->rayIntersect(ray, mint, maxt, tempT, buffer)) { /// Uh oh... -- much unnecessary work is done here Intersection its; its.t = tempT; @@ -716,12 +727,16 @@ bool Scene::rayIntersectAll(const Ray &ray, Intersection &its) const { uint8_t buffer[MTS_KD_INTERSECTION_TEMP]; Float maxt = result ? its.t : ray.maxt; + Float mint = ray.mint; + if (mint == Epsilon) + mint *= std::max(std::max(std::max(std::abs(ray.o.x), + std::abs(ray.o.y)), std::abs(ray.o.z)), Epsilon); Float tempT; for (size_t i=0; irayIntersect(ray, ray.mint, maxt, tempT, buffer)) { + if (shape->rayIntersect(ray, mint, maxt, tempT, buffer)) { its.time = ray.time; its.t = tempT; shape->fillIntersectionRecord(ray, buffer, its); diff --git a/src/mtsgui/common.h b/src/mtsgui/common.h index d9d772e3..439831e9 100644 --- a/src/mtsgui/common.h +++ b/src/mtsgui/common.h @@ -179,6 +179,7 @@ struct SceneContext { /* Rendering/Preview-related */ RenderJob *renderJob; bool cancelled; + bool wasRendering; float progress; QString eta, progressName; ref framebuffer; @@ -206,7 +207,8 @@ struct SceneContext { PreviewQueueEntry previewBuffer; SceneContext() : scene(NULL), sceneResID(-1), - renderJob(NULL), selectionMode(ENothing), + renderJob(NULL), wasRendering(false), + selectionMode(ENothing), selectedShape(NULL) { } /// Detect the path length diff --git a/src/mtsgui/mainwindow.cpp b/src/mtsgui/mainwindow.cpp index 88ce8b3b..6570d307 100644 --- a/src/mtsgui/mainwindow.cpp +++ b/src/mtsgui/mainwindow.cpp @@ -775,8 +775,8 @@ void MainWindow::updateUI() { if (isRendering) { if (!m_progress->isVisible()) { - QGridLayout *centralLayout = static_cast(centralWidget()->layout()); - centralLayout->addWidget(m_progressWidget, 3, 0, 1, 3); + static_cast(centralWidget()->layout())-> + addWidget(m_progressWidget, 3, 0, 1, 3); m_progressWidget->show(); } m_progress->setValue(context->progress); @@ -831,8 +831,10 @@ void MainWindow::on_tabBar_tabMoved(int from, int to) { } void MainWindow::on_tabBar_currentChanged(int index) { - if (m_lastTab != NULL) + if (m_lastTab != NULL) { m_lastTab->windowSize = size(); + m_lastTab->wasRendering = m_lastTab->renderJob != NULL; + } ui->glView->ignoreResizeEvents(true); if (ui->tabBar->currentIndex() != -1) @@ -862,8 +864,12 @@ void MainWindow::on_tabBar_currentChanged(int index) { ui->menuCamera->clear(); if (index != -1) { - const QSize &windowSize = m_context[index]->windowSize; + SceneContext *context = m_context[index]; + QSize windowSize = context->windowSize; + if (windowSize.isValid()) { + if (context->wasRendering && !context->renderJob) + windowSize -= context->sizeIncrease; #if defined(__LINUX__) int error = (sizeHint()-windowSize).height(); if (error > 0 && error <= 5) @@ -877,9 +883,9 @@ void MainWindow::on_tabBar_currentChanged(int index) { adjustSize(); } - m_lastTab = m_context[index]; + m_lastTab = context; - const Scene *scene = m_context[index]->scene; + const Scene *scene = context->scene; if (scene) { const ref_vector &sensors = scene->getSensors(); for (size_t i = 0; i < sensors.size(); ++i) { @@ -1890,6 +1896,7 @@ SceneContext::SceneContext(SceneContext *ctx) { movementScale = ctx->movementScale; up = ctx->up; renderJob = NULL; + wasRendering = false; cancelled = false; progress = 0.0f; framebuffer = ctx->framebuffer->clone(); diff --git a/src/mtsgui/resources/docs.xml b/src/mtsgui/resources/docs.xml index 14fec234..bba5963a 100644 --- a/src/mtsgui/resources/docs.xml +++ b/src/mtsgui/resources/docs.xml @@ -454,16 +454,6 @@ corresponds to ∞). A value of 1 will only render directly visible light sources. 2 will lead to single-bounce (direct-only) illumination, and so on. - - Should direct illumination be handled separately? (i.e. not - using MLT) This is usually the right way to go, since direct - illumination is easily handled using more optimized rendering - techniques that can make use of low-discrepancy point sets. - This in turn lets MLT focus on the more difficult parts of the - light transport. On the other hand, some scenes use very - hard to find paths even for direct illumination, in which case - it may make more sense to set this property to false. - When separateDirect is set to true, this parameter can be used to specify the samples per pixel used to render the @@ -489,45 +479,6 @@ more uniform over time image -- specifically, since MLT tends to get stuck in very bright regions at the cost of the remainder of the image. - - When running two-stage MLT, this parameter influences the size - of the downsampled image created in the first pass (i.e. setting this - to 16 means that the horizontal/vertical resolution will be 16 times - lower). When the two-stage process introduces noisy halos around - very bright image regions, it might might be good to reduce this - parameter to 4 or even 1. Generally though, it should be safe to leave - it unchanged. - - - Should the implementation try to achieve a better spread of the - image plane pixel positions associated with paths? This is done by passing - stratified positions to large mutations. The default is - true. - - - Should an optimized direct illumination sampling strategy be used - for s=1 paths? (as opposed to plain emission sampling). Usually - a good idea. Note that this setting only applies when the - bidirectional path tracer is used internally. The optimization - affects all paths, not just the ones contributing direct illumination, - hence it is completely independent of the separateDirect - parameter. - - - Specifies the number of parallel work units required for - multithreaded and network rendering. When set to -1, the - amount will default to four times the number of cores. Note that - every additional work unit entails a significant amount of - communication overhead (a full-sized floating put image must be - transmitted), hence it is important to set this value as low as - possible, while ensuring that there are enough units to keep all - workers busy. - - - Should the multiple importance sampling-based weight computation by - Kelemen et al. be used? Otherwise, the implementation falls back - to the 'use of expectations' technique from Veach-style MLT. - Number of samples used to estimate the total luminance received by the camera's sensor. @@ -540,9 +491,6 @@ Specifies the minimum path depth, after which the implementation will start to use the "russian roulette" path termination criterion (set to -1 to disable). - - If set to a nonzero value, the rendering process will automatically be stopped after this many seconds. - - - Should direct illumination be handled separately? (i.e. not - using MLT) This is usually the right way to go, since direct - illumination is easily handled using more optimized rendering - techniques that can make use of low-discrepancy point sets. - This in turn lets MLT focus on the more difficult parts of the - light transport. On the other hand, some scenes use very - hard to find paths even for direct illumination, in which case - it may make more sense to set this property to false. - When separateDirect is set to true, this parameter can be used to specify the samples per pixel used to render the @@ -587,25 +525,6 @@ more uniform over time image -- specifically, since MLT tends to get stuck in very bright regions at the cost of the remainder of the image. - - When running two-stage MLT, this parameter influences the size - of the downsampled image created in the first pass (i.e. setting this - to 16 means that the horizontal/vertical resolution will be 16 times - lower). When the two-stage process introduces noisy halos around - very bright image regions, it might might be good to reduce this - parameter to 4 or even 1. Generally though, it should be safe to leave - it unchanged. - - - Specifies the number of parallel work units required for - multithreaded and network rendering. When set to -1, the - amount will default to four times the number of cores. Note that - every additional work unit entails a significant amount of - communication overhead (a full-sized floating put image must be - transmitted), hence it is important to set this value as low as - possible, while ensuring that there are enough units to keep all - workers busy. - Number of samples used to estimate the total luminance received by the camera's sensor. @@ -658,16 +577,6 @@ Specifies the number of mutations to be performed in each Markov Chain - - Should direct illumination be handled separately? (i.e. not - using ERPT) This is usually the right way to go, since direct - illumination is easily handled using more optimized rendering - techniques that can make use of low-discrepancy point sets. - This in turn lets ERPT focus on the more difficult parts of the - light transport. On the other hand, some scenes use very - hard to find paths even for direct illumination, in which case - it may make more sense to set this property to false. - When separateDirect is set to true, this parameter can be used to specify the samples per pixel used to render the