summaryrefslogtreecommitdiff
path: root/mm/page_alloc.c
diff options
context:
space:
mode:
authorDaniel Vacek <neelx@redhat.com>2018-03-22 16:17:38 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2018-03-22 17:07:01 -0700
commitf59f1caf72ba00d519c793c3deb32cd3be32edc2 (patch)
treec07a9b58ac4d82e6c00bedf1a8055936e54741c5 /mm/page_alloc.c
parentb3cd54b257ad95d344d121dc563d943ca39b0921 (diff)
downloadlinux-f59f1caf72ba00d519c793c3deb32cd3be32edc2.tar.gz
linux-f59f1caf72ba00d519c793c3deb32cd3be32edc2.tar.bz2
linux-f59f1caf72ba00d519c793c3deb32cd3be32edc2.zip
Revert "mm: page_alloc: skip over regions of invalid pfns where possible"
This reverts commit b92df1de5d28 ("mm: page_alloc: skip over regions of invalid pfns where possible"). The commit is meant to be a boot init speed up skipping the loop in memmap_init_zone() for invalid pfns. But given some specific memory mapping on x86_64 (or more generally theoretically anywhere but on arm with CONFIG_HAVE_ARCH_PFN_VALID) the implementation also skips valid pfns which is plain wrong and causes 'kernel BUG at mm/page_alloc.c:1389!' crash> log | grep -e BUG -e RIP -e Call.Trace -e move_freepages_block -e rmqueue -e freelist -A1 kernel BUG at mm/page_alloc.c:1389! invalid opcode: 0000 [#1] SMP -- RIP: 0010: move_freepages+0x15e/0x160 -- Call Trace: move_freepages_block+0x73/0x80 __rmqueue+0x263/0x460 get_page_from_freelist+0x7e1/0x9e0 __alloc_pages_nodemask+0x176/0x420 -- crash> page_init_bug -v | grep RAM <struct resource 0xffff88067fffd2f8> 1000 - 9bfff System RAM (620.00 KiB) <struct resource 0xffff88067fffd3a0> 100000 - 430bffff System RAM ( 1.05 GiB = 1071.75 MiB = 1097472.00 KiB) <struct resource 0xffff88067fffd410> 4b0c8000 - 4bf9cfff System RAM ( 14.83 MiB = 15188.00 KiB) <struct resource 0xffff88067fffd480> 4bfac000 - 646b1fff System RAM (391.02 MiB = 400408.00 KiB) <struct resource 0xffff88067fffd560> 7b788000 - 7b7fffff System RAM (480.00 KiB) <struct resource 0xffff88067fffd640> 100000000 - 67fffffff System RAM ( 22.00 GiB) crash> page_init_bug | head -6 <struct resource 0xffff88067fffd560> 7b788000 - 7b7fffff System RAM (480.00 KiB) <struct page 0xffffea0001ede200> 1fffff00000000 0 <struct pglist_data 0xffff88047ffd9000> 1 <struct zone 0xffff88047ffd9800> DMA32 4096 1048575 <struct page 0xffffea0001ede200> 505736 505344 <struct page 0xffffea0001ed8000> 505855 <struct page 0xffffea0001edffc0> <struct page 0xffffea0001ed8000> 0 0 <struct pglist_data 0xffff88047ffd9000> 0 <struct zone 0xffff88047ffd9000> DMA 1 4095 <struct page 0xffffea0001edffc0> 1fffff00000400 0 <struct pglist_data 0xffff88047ffd9000> 1 <struct zone 0xffff88047ffd9800> DMA32 4096 1048575 BUG, zones differ! crash> kmem -p 77fff000 78000000 7b5ff000 7b600000 7b787000 7b788000 PAGE PHYSICAL MAPPING INDEX CNT FLAGS ffffea0001e00000 78000000 0 0 0 0 ffffea0001ed7fc0 7b5ff000 0 0 0 0 ffffea0001ed8000 7b600000 0 0 0 0 <<<< ffffea0001ede1c0 7b787000 0 0 0 0 ffffea0001ede200 7b788000 0 0 1 1fffff00000000 Link: http://lkml.kernel.org/r/20180316143855.29838-1-neelx@redhat.com Fixes: b92df1de5d28 ("mm: page_alloc: skip over regions of invalid pfns where possible") Signed-off-by: Daniel Vacek <neelx@redhat.com> Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Acked-by: Michal Hocko <mhocko@suse.com> Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Cc: Vlastimil Babka <vbabka@suse.cz> Cc: Mel Gorman <mgorman@techsingularity.net> Cc: Pavel Tatashin <pasha.tatashin@oracle.com> Cc: Paul Burton <paul.burton@imgtec.com> Cc: <stable@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/page_alloc.c')
-rw-r--r--mm/page_alloc.c11
1 files changed, 1 insertions, 10 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 010dee0f089e..1741dd23e7c1 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -5356,17 +5356,8 @@ void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone,
if (context != MEMMAP_EARLY)
goto not_early;
- if (!early_pfn_valid(pfn)) {
-#ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP
- /*
- * Skip to the pfn preceding the next valid one (or
- * end_pfn), such that we hit a valid pfn (or end_pfn)
- * on our next iteration of the loop.
- */
- pfn = memblock_next_valid_pfn(pfn, end_pfn) - 1;
-#endif
+ if (!early_pfn_valid(pfn))
continue;
- }
if (!early_pfn_in_nid(pfn, nid))
continue;
if (!update_defer_init(pgdat, pfn, end_pfn, &nr_initialised))
9D1V°s!FՇsQqw8khh G x ݓZ*6[t5?FaOR)73gF 8W 6'N琬Ko&`6cJ?^Y}-\ko%+'*kY]S~J]N=Sۍa9OW`j_67We;w3[IgdҞ-nw ?v;>|_]Sͻk'Xrp7/"!lUokux)eľ0ȟ鞬Cou5>aMִ]c^-}_Ou-wH]YG?쪳/qV )d ea~ڷ?b#C7 餆QOT M<9lwd#):3@hLd!Ŵ{Y@ n}a'\!SҲ&uXUƐvL1qF? d}y {$+$,NJ K T4\HKW `(42)COƌ~RUm$I&Ge0Bn:U1VFHbcV^⬑= v.cs%(Yl(nUUmjBI$)I &Ak$(fGՠk#FwgAL5hI%7&+q弮l93&XII+c)`cЯ6Twi|ލ2B %,neR\UUh2\ٵNNrK iF%A1 !3RI1+QGtG {!re4#(..xnۖHјْ.p)T=0}Cb}lR#'UĎr߅zzʐ 9Rք~lbE:{|n唔V)f{qݷڌ=M(5AHnrD#3XsB2 #uNrDCJX}lq`~ 3B:W&8H1I<4w^vtc҄R$!Cc@D&AP00Q;6{C9٪h|5nًg|]q NlT" 2 ?[.p1Hf٠ {6?sN:fL|M,UeVzg s{Hπ~;ۭQ8߷= k$Qp}3uiw,xL}9 阍RII[)ޣj}ky|W:{ZDϦA*')t>ӎxEJqDk#xŋi4eރ3H=23J.aNW3"PE$'рo7zh oOx%a  JKMF j@QkO3JdCA%X aT*$?3g!3mdDZhiQH^q-?˂),S) jGY!;dF߶~Oaڛܷ/\Xnv6=^e^݋T?}X."<(ڽ$Ɵ4]'oеݱڡ{on?xk-)p:X;׼iɪ H);#Qe_dhQN[ie۷./T6yv7u}Ljá!BOx`YM$b6 _a8xc2@C:sxמ+7w=>XJ.A>`¡t4LDn:tqE(J-WQ$tTޒS=O_ˌ)\Zb=՝𙏕~>u+zzLͧ,KX :qFz{plikqMwJ< -z+q Ç0P"޿v49k㵨&- vrsF}oeh$N=K_gXvhQՒE4 ~Ew5[p } ;9\HHtMF4#{3 LzYSS` F$#k%>Zs9 H~ w\oBJm?{vw|x, UO^їAPږ3' kFM6s'z~|v-9 dk:4 ^*y߭VrfA,iep;*Ax`9(7n?|dvψ2+.쓀%7_3_Cg(ewՈ7TNE>+\;PkFcLϯy~f#ӬP{CB=R1utCU:.ɗKˋG߻=JogjB<.ӣv=_OmyjGG#~ޔ}( h{w-jZ2.8ƣMq_6Fvj.Ah6QUWg9," {Iql/i.M{`g=IpRl?_i+*M[E%K)) "5G,_Jpm(!d[Fヨf@4܏ҹ&H).G2!3! ޴ ~3@#<~D$_N.wL {>$=*W}aO. )wq!WgۤߩSzڿ x?]}k:?aAüMfenZMc4?gn wLAr>2ac಍6zJʥjfޮf5],\}5pGRF)1’v)+đ,2!*b~D`qFd(A~) 5*!5kx]l{_pb!u6zPw_z/5{M}>#Tp(Xlj NZa -r!wdtdUxc8Xd`A Ѣ QYIʗ?@2n6[T2Cz^x3><ٛ|AHu}j)֎pb/uGδmk3QGȻ$t{er7v9@:_^orz1(qUy΄ u5@`1֬@xcA1DžܡJaoۈZWhN<6RD42}/Ҕ+].G @u^P:R@e ^ "D>ZV1} 65f&F7#{}5]E_`!PEBn],A áD3;x 8ebk{U] .z 9A:(7wUx-&vVxEjDsQ:tv}v%12Z$p"q=,Y;co/ϥ$@SScNFuzn3a'ynl0}:ub70MD$V fQފ)QWPe( 7S=>/wMW8en `.mwA'5#ɓe,vKڗ*w}W>v,(&MC*H-qX9|A]3} .@7yHyEqF D`;3ue7i3T{ے Ͻ7+W'rW?Pwz  ߷BC}k2ahY&w݅W~vX&dm"ĿEzqI`:ߍOR,-_/Xؚ,%McԋPnAY׭ɐgW%xTrw Ą.c,#`|;g>⫋=_Mv M>!Ro"5Y`x`6ּ\(6MazJY-}\cKeG`l37K77VѾwig*7ȿvz˯!oq!/_RO[ne |j6lNXMT÷&<,,P)8o9쀀H^~BHa/#ܨOcƿL? :ǫNONzY.*';snt XXA𓋁xK%:1ِ%N Z'D/܅Eó6(# PgYGX'678?p a7Ei''>^Ŝ|G֔ÕB^ߋhl8V\s^wznD\S%݈mpꪁyq{uAa@p&1Ub}<#tsH wbuNlϝ#ho`o8w0Uw B$/9Cl(DoVǘj T~dVvf[UMļ>zY(M7HQTv٨v>Taz\_e=<Ϸ <Мf5cdpqXj㭰|{@hycc y$îpH%pÖ;7~[@b?3LQK!H-9r~~D$_~l~;yKnƩ)vҴh '*/`* )X+2z\o*pTRvVbjS@;) ۠ŷUUI++rH-dy#Ư βb <55 à B1(ʽ֜AtN^__'Y!:lic[8TO;a h%.k2e{Sܽ ;$J(>#kpW EqkM[~w킘9rUc!J\7,ǟpp@u2RGM^rEKݻ{r'Od?(A DxA55Ch, ̓;Yz%:WN~dN-,y@]hz˜ @Hǫk@W<0ȨeOcW"s?nj˰oŅrWͳ`Ty0!b{Ȗ# 46M݁9?{|!?ԦJ @ Ѥ:[UI m4~>k5PQ8Tt,JLa?tpr E!5! ;6jPvP~R- 9&)j"5q p~?᳛+u$WA"SHG7A8NlL8_e~:!#Zns?:e,~/תr>֝^ޫ|^-oH< )DTb r%&{w I7vb5>[~Z\ש3Iv/%|KNhXzǐ+fr֋v8$*|*: 0Xٯ˭? G/o%yʡDwIL3ww:<Ǩ-.z`i<4QyzpY"LL$u[!F8q֣ ֽnnZ+{F5G˲[#dt6@-i9ޭa*ׯ7C^37Y=)8w䷶fKhy G[lI ,1][h8 %F" m+ P.aT1 T\YN;]hf:;TAp d+DLdHlB"4x Z=*3H7NtB3ExKTEV׻Yحwa\<Tڦ۽X[?8xD4vx6 t͌XXpe&дW\l}VzA lk|0vQv,~p~i&NP$n4PËuЀ!9N;XP?MO_mFOm*&Jž-暤",r#磋_CsQr {ŝEq.zmxB?-\sDUvb\NGV)%CKaNO|1ύì׃ >灶q02Usf:î=ʌ @cHր 2(Bti5_z/ضtA9hǫe6h+ۊ" u4O 0Rޡ/BA}37} ɯ^_4jeN=S N<4s}%Zc=WqDRHj?!8' Ky{q6991Cc h Nϗ [>,n/SV' [>L /!/1 a X] ᢱ}Q)B(Ѝnpnpgؿ Gl<#acvuu;0fyy#}ݷ@!m+wN}4f'ZWiE*솶G1  4 ;哀$@0}VƴͣrB3s]Ct1Tp#6f&ߌ~a cwu8xo7nQuyV" o^$1p]o2/LHbeIjH)`:̾nlLSWNCɔzp /pO`0zHe#+)*,wD5,Q9":,Z1$ mqmDx.T~77Ax>b z #SPPFe!o^+Xlҡo=:vT#fRD lT]THo Y{]>.TDݍ]CCL6F鍑Vjeã}3AM` {:_$D?_r @-x[vr&M5u VRxmuG}.b}_.0t3D{F `PX&XO`\^Y}.Ӽf sb@c"kdhp$@(,ˀv<8n ƶA5qܣo_-xɳ2..y@i$܊SqDR<OU w%⺀}:b%|{cxe,{(Iks Ӑ<—-f /HPсղ&EM6a#fo%U~ʔtѵk\%wd2(:xi{H$A y׬A0NN>v͓UrvL}^e4%o5_ϯpI RcP,Xn Z=^{ucI\*y}=LFcܑf=UHAx>z zGMX kr p "#1K % XK8SIQػjuۦ"*.UXDmdj[,=3G͌qvȤ%d 6 w%D^H`.z&QLX`ˏ[TXKFTDg9ߎxzf,C署/() +? Ԣ+=@w?ՍVK:e X}.+8ZAzzc۟.|Nnfr {_r{clmOIjiUߎ{= lgVAh#P\T*}EJRubUg7IἸkҎ ~S;q\}vHw>gV]nNOcw[&]n|gۙq Ό0(@J.]cQ[֙T.Y#nNOtM:l=nWlNl#xS4WEkhr?8pؐngvo4aN޺B?CM &bT#9P1wd`4`A8 Ҁb^" {axzHoQ-phDD)F#BxP9i )i:[DA0)胦싑qnN0>X;DnR_%ɦIL4jE!iUlDHjBcR]d,?낋 Om"9?ھNU߅9\7AK¢l+u9X*C`0Ձ5jS韟#B3)Cc aʠxxa;wO3D[=n1ɏxb%BA\o&0(dG>S t\P0˲˷/ t^cJK $aMhzg;qw\'FsMc%ub-r yS̤ˊ-F u>k6k9CJT2'"t+&1C\ 4Wub]M|B$|1}}dCr3 ">lR٧*>+eK/ai6OY tɓ ŏp U"d*?B]^"9V_~G7bw_{v/o_n˅o[^2M>x93(ϼ}z[hFӀ}n.*9{=@!X;,V; od^AV/{f/Hcl.bSCȇj?lc8¯VOfͶ+ůdrٚjvqAiKŒy{nnzJPƔcySw6J,3Ŷ^ O5\챣J-1pҎ#]۲ں 6 ^f{V&E|nz'PP fb!`9pc" ?Vck`q]##$o PK>[ Vt4 #jmfyPEQypTiyKim]ևU"2=ݩE, >ѷ]mՉ?4ɱ=[3 ȑihdΒ Xv40\DAv-'.|p02J́1Zi 53c3XhfIQg}GY>-k6/W[)7aLUBHYp0J5ߒ}㿖,h YZ*(-^DxW睗$܁~,R?uXuXmxɄo=1b[0FH/ |zkJBꊓӑ] NhK)@2Zž| ag@O0]=#x78P8O]<PX0$TZ ~5KvAudPUP 8K:'s;2ُŃ~2 Xj`X*+DvD^5*U}=mh4EAʎv 86;m֛M߯4+5$hKI5N N @"w5#$0t{XHhʂ"vbD?TBW_}B3yxPꇨ[sٺq[!Ƕs>rXd}>*NDkoqpeŏvZԺͽp0۶KxpmXù1e[OY SO3X]L,ֈk`ԸM,1Y!FsF½2&Lc&]=j=Lh4G\Ѣ4؞<'2,/QѾ%uB30F,ls5:cwwMML8Bvă\fnۥm7*݌j 5.M]JiVqGÍJC44 ()j)P,Tn U症v50j am/is{5j ? ˹k`mћyqʔ7OɪY9ay|E8w!I/)KGn+7ҡP,G7 5e ).2l7C.h(جrw#P*`7Kfn#ȆGg#xVcfRY81J0jr,^y}u3kQ2jj—[J_sOBCѬu @Nd`\'Ա/cv/ףT]860c۱` {`Ts`STMY?@ƀnH`k>Npabœ0*Y͇LuAPtQ@[¬K?jk SäYuC芓 hnrW*:q apd m.R͌{ gs|d_Pqa5\:{B5@-=n S%%xO{N\GxI) Қi"&Hej%ePbʺЁmFbNuq?T e IFLu\ӪZ_rG=J0gáeޘQQȷ(}q8yk &z6`隕l?\#%MsIUw9 5ISQJ0u8,L{b. m[zq I" 6D`X qenpm¬`)yK)П@g=怳#N0psR3ys< &EoEC#6d?ۨTp ASb^rnP] ͟NތEA@pd~CQ1bmkk-1keQUP&Jc,O:~:,0w|#݉?t%6)t=}!G4bUK$~/h;Q3](X=an /@1R%ZUx6>˕7~9 /A@B: (9ߞ͖,T&u~ Ѫ)X@1Px0Q٫B+{,Y4 ;*E<# m'~ɔ @\wٜ8#<$(L:X6U໸gő^"k ̉|_Š6\\L@e{GE.=n?vF oV:I돺e@cvM]YM`.睮kt?whD~XX!d`:=! KG"]#AfS\dpBf#Af" _ 6D?AF+#,P K̚nBQשTfe/=g/n ^,p!'Ms&)9s}?8ͥɟ;CSK #[=Tf8ǎ I>d<#Iz~Fh@@ Q 0223'D_ Y G}势\^\`sf_"{(&%\kndq>+Y:z=aKĪ=}k]G` lfb/[G\d(``^}~OՒ-z@ IO|jt0mwUHY6Z;ʛC &Ƒ$c;>BN)ɐ P c ī"8č]Qrmj@5xo7-nuMk8$ Cs )42í v8Jy C:텞'fT5[4ݵ@M̮f9%c#!¢GU $m,- L!p^v3鐂F~λƖtmeVzt 6a#㛃$ }?V/N=n*vGk pv'6ߐ xE)1ıZscQX g-dn^3ZoqosƔug$X6=Q׃BH#rDUذ^hP= =vIl*nSO3˗T& DeAb\P\:5RSx:!)7_<.cӯp/gݕSsV+e+<+=>-:])+f'mM:mv4E] q?xоg}׫s?5cKfL7^}-< P=+Fe7X ܁J%B3Y :\ 0Y6NѲIoo< 4vrP;; B!j2%!mNW<6^N˃7X BށdS-MԅF`m믯S[gecv:rJnXNVAJ aza -'9OƱ.&70[~^ C(~':.=R lRoa?۷9@QߚBˉ^n:9u"+'N$fFA²j|,""۾[!r',ȇ,p,&oGe8TN!b_2pq(+>Ů5 &-& zp{hu\~J lsVłp]*(Q*!i`8y'M?OwD{I:h  F8LԚE؛sbUػyshGR80cƊhs2[e,`<Dyvna0_ÁK\ |]pp7uYeU_P<D7rLD5nڣ3pQ!+pXX8Rᝮ)kʀ^$%2&AF쵰9o›$v\wi7^'mG6Ԋ"ɨ|G{ޥ{= j7 <&%D ''YjB(oN"27kA;//MTH?F,~r?u5a>_fLⱱ_@UUA,H἞UqaorU=Ho7I.+=$qP5XSaEtM͹r߁ CY@D@;҂NTw݋J'\ k ee HƝ  IM T6/3TZ==&,k0kjIL}vZMi2)68Bg݅7 \B.6YIlnE Gyz\@f;#vV|!Ī̺3(/ŹC(/ lz"Wv>6#ۍ c )S RktiRl)eϺyݛ{xғ:IY6d C楔$|jpq$!oBĈĉEa$wTr5 =jƖc"mr<9瓣w/sb>Զk A XdrG/횥 TL'^̾?:}GuUi-2Y5\BG`?B>\ czmX չ}MY@:P"{rJ:Ow kN?{.lVǁ{lIQLWЄ @ok߈T- V_'$H$|2ʽ8NBzg.(~!/m5uVq bI%|G۟(kn g؝<0Csf`9CeN8,_hFk(2 0%84{8"*ڧ{/Ɩw'x?\!ncGCXpO㊬I`VQpVτ\aj IE,Ý-kdF[w#^[.8B ,}4aH*#8j92@ qpn+6\'Du]M[>4|ﺟ#<T՞>FCFc->s0ɗkͩ7t9}%eu:p+Qո9qn$agjE7 1gɳ}}9"EҎ@#*} ) )2<]LV,C=|dw յ *#N7C&TP\svߙF)pDKaYN!*+ ـ-ax>4 ~8҃-",{dLhNx|xxe 3G-09v9aMFwx?9QL%[h{[ZU2HCVBӯ\QMpho%/hg6x"Y2K!<1k \*?b/#9B==|$}1;c=t|\FhLk(hDwM# xQv:#)Ԇ .TnPMO8'ĞzOj/6Pӛ{ ՠA!g+g-:~#y3fI#̈́3jR*^&ܪ˨EY%Pe+Qn!BHSJc/eYWB>8KeAH{wuxn oX2 Oaqy_;ep\L֫0EnZ_:'HAhd^vW $0(^3xbdC.>sy^|Tmbt.^CL e>;Ìr#n"2Yܾ_?+&k;yʣL]L80XWxWEiO'bj1O 0:$<:p͙`:~ 3+>Qg%?Ywe8c#扊Kˁ<" S>jWQ~"lC ӎ=`IT'~}*ǫ)"=ip\GԎ=tEӯ@;bFCB_Ka"h=fCrVOP “Ha boH켺7`%ID*#';뜪)!Vpq}]OϞ"+i0NLр `ʡE\djzC{QQ8GЂFL\("&)H*~_*H3|n'3N ߶cu',AuߢhY(HIqW1]tvΈ.+F/p(Zzɏe"7bԨ)DxڃtQD$G :Y570ilzn@H'bTK'ɠ C K DEtaQ{W_.j-ߛ7>p4Jsȍ%՞xb_v/}S4\5>Vy] m (ffڃ~=pp"tz<q2֪YD |\vAṮfdd?yF&+ ^}8A gd[%t^:' qpr HEC@@xUH Wc5)OGU+?IVTPzSRh;/7iξt$<&cu;?ۈx@*}8$i=ԽAah77t*ex>mk+/((3ʬ]UD#'Qx$1TĮ-|ɪXx |sIkJ Cdf *Oqš=RO*>{.T4UP N\ɯ }}*Sٴhդ่`(z& R*UsXŗp ¥:}<ωj|0AuRS/?`@۳ACf 婃n6Sɚ5X<^*kbh@F63ZLa @=A(Ѐ,5hi;gin ;ߔ[)9:z,[ FIf}B=?~D ' nF +E+p5D@A@F'k~|<1j..=2p8vFVY^NNqμ $b3GgCV 9E~ß? X~( ^@LqQVW#2;isp|xe%xQ%:*ʪo &@wɺ)6hoH~Br43eFAEγ_Vg OjhUu>ON2!"G(K_B|PaϞwFF:8*I ? &//¿r:TriA}${r,^=WMww<qxm mN2Bu-yf# `bj@(98<:Z:itmU!4Kw{⾌nǧq8s-awJy&`ʷ liK*̧ZJ״=6G9,vOQNF\3F'0i^D! AB%(7IAQR'Iϥj7tDy?+"'8XH?ow?  _s -q 7e 1^.`UIZ'kR [〾-i;UhD)A$&+.B.7{C ص{wjt24|v0oVXr/hR|djcAC_O(0k9_2h~E!,*%Y^!4! jӛ4㴗\<0Hd3"}g%JjaybJ_ry`qzFsÁBV*X!"RAp(#QK._>-ʀSHUcծ|:~ꖷ>D|{:iat\]|l*GF H7W۱ö|x{V:w2@gT:bJ{ G'1=šٛÈ3M4p9"ӗ9v*~Yk~ +rgqa/aI5Dk4@ߣnyJWyި]Jq8 D\DA##t05#Ć=53;[~S[..Y!Yxbdx+t$+s њ(eQU*9+۹m|2g b')bCr[`ײCyuDtkG:T % +2yGPn2|ؒ!?l@`F/smH91%2bj  xT6}9[4?6DڑK>hr`rcCւGlT SaEi %Ð?w_o^)g㋿;)+R>D!*Φ?X1ߠ2jƒc9S(KJPB4 iLXs|_7تz(>i+$ '2` ô?E݋XYzo]f -* (S5kԭ7UG9ּ;y"7w,,4{/*o4vHJ$QzK8;_)8L>sFY:1bHF}G Ng討?L #CuCdj> S9ilaSqqWE b6 ]{uoF5TGm6sϾɐSyDkGD]qɠ>`?DzS1=kAڲa@7r$$a`?ZX..ڬ}h"RUl 5``P|ZBųn{Z,p Y);x:8botqy<̀BV1A-պ( ܜzR0~8{ }yðgR{Jh$/{K0p~7`$5S\|7 dC=om֎*PyL3T~4xK)fsm 3kÿ?)$pSip9|4)X D  KF} CIֱn `;!{n7C,ˡ<͉R:8Wm cI{$Elܻ6Ӵϔ1;6Dr H>7гexDp)3_jAg.q$! `kw"%"H6l,u7l|TW& gFf?ln_ 8`` P<[w_?8|pkD3[8 zYa?ڬ(;0BNyXw?Kj,~ӂ?FQ'X?t8b`2Hewcw B(*2I7ou>*(J4T̼A{cpޞ0*l`lleÄ=BHTm墣 =a[dZ=n)V4Sb!"rhNZCAY!N"0B$7O⶿'\rv$vWߍ4 3gup%cJP'qHL$I ~aMUm cx[;VMԞʝo6Z (Z#궎h߾a8EZߪ5 X=pAõ@[b`aAkb}Sz~7BzZfjY#4g,EdiD|cp:!Ə wq;M rhL@i([aW1NRv?9\H@\wz|hGׇkTEDl<8׶7uoΟ"Lx7DZ~[.Q)U\Q /vmf{`DtaÏ~E (-8:9^jn\";M!^^؅M'#Q.Nz;`p̦$JZ 3ڃ,zFnd>$!E8;#xoUT,xhiGA0TqYA0'Hq8 WjƵܬ` XűYhaa PϾxbP-.*c0v<)!I׏7WfnKp|r=xBϾi ,s (Ġw נY$5݈2m94R\4@(&:ȓ)&\7Jc-NdJ>h1Zq7zqfCt} "|OcV.{Krg<8-c/ټ`&@nצ|Z|w>幨QnQ`P5zi˛=[ו׽w!qhP8rN}7`jX =[@#z/h:N "{GlnbTXCv;p>j`Co$tds!} ӅnTf{74KıA:fG(2 (PBe B`Q:+b1ޕ87a|ȼC|[Xp[{4/I0Dg8cw$S);?fVCA0y]8~>>ٰq`pA.2!Pa :@|C(kje0 -HlzP HE@ UP*"+) KXCuc7XsLNrL/)=(lz1V~!m@" -?^dz{1oGr @ɍHm7V/Z/`T. vf’23KA Sʶ,4*;W8^&SҶht 7d 9dк3*gArbՠnb+d30ϳnR497=EψL__HDvqι9ф4g C ˵IK٦,A e`.+#cȒ 8Ru柞Q@ߎ$ [߮\ 3s@ hzR93 CX&Bc5(*HH ZNvGv&uvâ E ;V0S铀u^϶C&;W B/$?h!sNtywuH?R54 XPR<:o3UfΔS"$_uI↌ '`aΛRT-ubшH;h \06.C=:`!0|5zۈȡYNFeݰ X|9 +s\N둁y M"@Efe1<]A5jaHnw79F#8z_GH#>Fuxq@||f zȈp p8Q{ͰSKxYz7_Xe_;FY!s}Ѹ\ ;zf A2T~K{^瓝LȣDu Ær3fȜk[z7̾E98܅ D ~n8mwò,7_a3ZKdD=d?PW()WH{vdPR á9# <!f3@ʥC3+r (#Pe߻Ƙ.[ڵH$B٩#2)>5f7Xȁz@4;8(/mXj72ܤGw`WEωY֠}2b`[xGzko,3#cn*>ř.' CHV? }bl-Ʀ?||uNCּ@i)Í=]@dO\ %oV{*`: L0|۫ dC*./(P%s_$[t!HPE @|dx$+2?op萢SGgd# =`9ld\ 7JAM!?}>ղ=GSusB(tQo-4}PB!ErǐGt 6r{ {ۃk"^@rYr5 &CbeC_a)OQG~,v@D8Uh;ͶI~6P Z "EMAveV obk F)2dYKT,&~3$8cۈ}_2I})Ly ƒ3xbckg3wWq1:4vȖ ظ doY+h<;x7x53WǔuxOb|H-え,Uӥő$bAA#Bl9 ǘs|H钀[Vwߌ8HM&FJ$D$HZ]gDp+B3r1l;^zFAXXMﯯ0Fv=WBmr("#!%_h࿕^/;LQbU@7mg)D*"`J`lh52w%r7d3Р@mBG{K_䥯E~a/n7r#rL.JmczRg`r\]aP˖ e;/tWx( bfI\/nޟ]/gCR>K쐠>j>c,$`7-{+̄$Lt8zV7NǺfhOBHtBLccwrA;L^[DLv$_a \4ފX.]d(HmF5<V#&\>x/ 4"qKo(tN"FPplej688okS!m"؉Cucf^2*:FK#Kkpq'r(JPA+1n LdfqE%d'?AcfyֵW[uαPcӭ b!Ì,scpSK.# C3zs:ۚdCLyZd;|^~}~R̮CA*nG*ib"@)g7b(~P$f CL r1 ʳ hPcGm^wBн^FvOY=C72 \  YB^)庬^-4[%4+®1DZ!Â@h)<=EʑF﫡iFЉ-NF"]B\Zb#$D(L8oa-l.!DrKi^PERTbgCK檔i=%ig=@g1rW)DV\8ێl oay9V(DV-yK">5޵:Ms Yh,o~ΰ(- QW%-}@v_|Ћ/y_hԋf, ɕؚ箯3h>Pe78u2aaw  [s pr[vxC r'KxଧuK\K,Ml9)Jvc NArMc`W>q{qGkd.cXl!!P)EZRj0v5(HܡK:e`F8_~<;|wX_0ءLZPE<>n'&`16 v1fHNKAyU;.r.r^׾^xq`ٖr51wPCSiUu:>(-7:x)#An#X抶;QMksYI9dRBviçAq{BO$}AoۏG,4{iv6\ƦR2Aw@Ot#<`k>Fxp̀eh#C?d9e`Ʃbw~?/E <\=ER',%>q\ՋA;Y$@@֜ɇq$o)J%XhާӀuJiC495\ G1R#VZp8wsλ7a\u l(@ jQrҘ8 ēc]^pODkRdۍ"O, g眡3$]u0ℷf.垵.4PU;o9)[dcp,(2R HQl/֧qrmO[Yx!CoprIT jqРCK G)4њ_c[^p,I?hutqJZjm7͏}ڟ=;y{OUřzPMe4\.\oo!xyM pj?/Ȥ'` `x\)3+oE!S?VRos푿o3pVi_*x]!gRHt0rX9TM:nv_"Q˜֜)lX eH2,Gē$ ^[JR?䏁32$: "/S>TVBMZT&H}v?e|Kv߂@w-Vx >!}~ŊrLD'p, Dn4)C`SoT2f <=sKFibԝr'rMN~>ަrGNtdeAʗ54mвAOsY 7\Ex߷)hR#tr^3?>c, @+N/P.Z} aV,VXHkB+l9=ܹq :2~ʀT`bLNQ64Pg3cHɳ" H[R3 !u/jS~[J+A:.:ܴWmPɅZq2~PQGѤ'o#ӫL1N˘|N1ÿ\:qUypNa 4U0Gn#@dz$.er._`jBՇM<-̵YޅPZ3"w3Q}/2*i1HpMg4ǐ4;E;d`p3 oP 9_I%Yp;*q5$9?gM,s 5W; `c{'_mX7\I@XFB/g Nн_&"LFr(Ef6ۙ( aF{B&NfMZ'4mJA{u}XѲ}!ܿp6|s.dzp>טh2A?BԸ]p)+Sso–E{xX'=q陳 DSnzY% NFA}BkOPܰJ+瑄λ@9MPaڢ0|/@:%UͰccK׋s~sibesrDPۅ zv9=>Ӭ|fV `w4^|X޽u"@ǡVHcυ$_dFCEKkH;"6ߜE ǦX\e_<ci6, /H)AnΖڈj sa}KEDYjv$' Z_z70lXS 8x8!]2͘?sf.7f*]h!]sJ1si0ӫ /muy <²b-|@c!"vVqʭ?;@pUꅌ|>q 9~` /D}b+CEE7:}F$`BWI|mAܡRb [ LHhR?mM (] C*?hתtt[F(Xٟ,GoL <{` FU 6ʁڬ60L֨ܧ0^բ@ (ȭ{.:8j /U$#(T37(|B]ݱ&my {;/$pmXnX<S&6-\ ]ˌSq 袝#y!K/v3* Z^{Zp]D"T^AL/Z!иzCd+XJBJ_ l,|!OzE}%3h˕U!u}ʗR 3Gj3Vi p"LdA].*~sh j̢6K5?*DQLF,4aץ,̿kn7 ;_= 8ZU mkë}q^;䒝}nR#Gg`ؼx#g 6HI6WΣ ;ExE\\ -YYCˍaWg)`\~>hB|AeY!"Ii!8I(Tbqf( jשI@m8Pv"OSF@| P#\)_* < KH)D{uD]r[ )V8!F)MbN4yy)F,t5ƪ> L‹48)4'v}!$XQ9*n*d }Mߞ8Kz| ԑr hVx\{yrt)U(B|ѱfkϡ` 36N4|M7!a H, ) ̇cM^d:sv6J Յ~TQs _3 ㊴Ghfo#d8׫-pLbI>c bfwȁ &y?^sn%  -˦p 9Maޮӷ8.D͏jcғpK__C݃׍q;-d?LF"!FZ' eW,z!J(/!]6Wۢ{(W+an7B޿o-hKF6e?Ru!U&gm_?jv#;Fw%E5.Dxϥc, ک[&,E -Wͼ~M:rLuyK|$vW 2${7}~Y::`bzdOH@ϙ #X )qB$;/6 %٭U!Q-AQ$BvK[$? $+cF 1ɮ R"Fj}߃{o(yЀ?Qܞ~Ř,{;Dz Ҟr{oG{c%\>6o>wH~ ?VVg9~8 /]PH$Q7J*c+"6z;;B_b"gL$U |sN<$y$/eH`M '.AT F!^ 'uD/:߾j,BCc/߶qp?,Wy&?B<ԟ?n=쌖\5qu؍^>L8,8y{Q%;2bid{ ۙ~kkoj>*@U;ܘL'!~@R?0!f!H:P4Gmq]80#`VPď23CH]) }=e{\Ea. `/s/AAP_0>Q?QK m`?e<忚SםI:Y)a齯Q232H.(04&#á- hhؗCH2$tdTD$ _e=Q2J(4@JPПtJA7&z*$J?iCC!aRM u2Qh?O$@*3 f»9co⾣H!g. !RYnKX'XJg{uC <6}^Fq[Ͼ8l_ Ӑuxܣ7E\`'C = :1 1otggzXq U 俟z=:m/?~Oo1N"j_ۼ֖{M}*t*m xmÍPOB?" aPU-$sc/C|/Fz-uYEاmTb#@!HC/IWYQ0`AOT5U?!JK ~ ѺOo7~-_n,:X2cPTo GrnYkQ&'D?G7?P6];9&DZzxVXW<9!ҊZX-@PT@!K[H Er\gM?g/zOgrB`: A<≯B#[w?p? ¢o(&!^_, mMc_x^v Ds!&` (;ww_M>{k[~XאF}釙:xt{!G!ɏH#&B^~I7@[`Z~cESdo"X=֝|v7gɏӇr>z z5ٿHa|3أgvst/;>Gtxy]#.GR{]XPYߚگ1z~S||5:o'pt0Q8/殉S]Ss>;Ac<9 _-#φnMވ=Y^ݺ.s NH}^0u1Z!u#Fxc{-^T(>f8qrqyzF}Klg-Qy6FdOUFe.A՛A5o7Q۽˪O"-פs_e=jݵCK SscMn}Ier1BXo~UqHumrRZXSb 1y9GgtE4ƹʼz..,;`tu,4!'&;#W, Aml6u( )ju igZ)L5ׇAl*-G_.GA owxvyw5Ú DXnw~.hC}c4@DADTWiu&V# ECySAKu.u.aovKJG$b$dX¯mQEnNJˆJ* E7 AȨ)!a;_ V&]үU>u|q#?A22;ܟ=ϱbuAwW*N*:Y>2^R9fgYPLt/n$D++s+=;0$R'O2+>{ߗkѨR-6WTz1|U=wK-@`7Pw?:ͳѤ~Z"'W}ǣډÎ_HJ^;D1ǰ'[E}]"8 TRIEk!!b!WEŧ\JrZqNDJ;/uR8IKsl"xv]~2"F?kZjnϖa ~'݇˰INT0Dx^q} l˪qo@9׼ ;s2k"3z vHj2B_-?e${3W=,I%nQv0ɑf ~?Y*I1A}9ӈ:UNBN{*" @vDw16ZRM"+@W&#*KA m]! ׂA b#`&V vm\ ,DRH~;^R׶X.<ւHgct lӏ4nwj;N~雅s΃qn8&5콴xV v2rPd]o''P@$vHEaHcq ?c d'i()X90J#HmAhQ31PlKǐ:WF]4-շl+s<e/0U~"xysJە{8JJ{~6zɤ $!jEA+ 4*S mk)7+ >?V/u(EXr[YkDrk^Z >%u0}߲C'6kmQQ ⽋v"^ nzM[ҝ]ARoX-=;!?î %Pl3gKFOⲡP떻ߦ{WTz/ CDGhN1IJG+$V%HljH5]8Sfᐸ+#(eS#} 㵩- rW*e9'}su`5\2pB![Έʶ{z bֵI޻ulXB2;`pm+HD⣎+ח;1u-oYf z3['lm\ aeo!$B~XgگEjv~æiȯW(#@BطbGfꃡѐ?ekL.p7bnKTZb4Tslb(ݣNTW80QWq=*ej]qVP^TӍK<}F?ZFK/ !W~Mx_G`A%FI+xᢖ2H8qܾRN8/ ȒQT\^\,qK츀X~_Lf#ݦCU[V̙ԂHPQ; , !c͋PiCv8 "/0h;Ea{<7uHB,~5;ceꅗq*:x qrpG#@ί!n.BN`o`,'oݵOʣ><畀c%]DI)@BzHm W Au8Ķ$E#zu-khë"VΒhN?!f<TjŚrж`]K@y$Je1<2|q_6aQQb?sU&nIkK9!2v><nπQLtTR]#ʬ(a Z>pZUsDѫ\5,(/ll*st穸D:%oQT|E4)ȧsᗷ=O=ʖة,UFNtd֙cBm&͍e5V1zRC?aA2&(*&gEmr5!BTY?*w=8옴ô8z:4؉8{Vl?cRn?? BJէE`{cn-vS]+-skt<1Ĵ\^,!側ɿqOoG>(D\ CXǵܽ4sf~^ );ʄ'I?YDTA6A {0g>U|Xʌ$9#HKЈiU8#x.3h{pY=byo A胊Kk~G(#2-Փw$ziS 3 gnp#:Jxs'pw2'0fw[S7IrA;G;p[K6 zkTl+5D@]kٚ1ԫDH^:"}lNXF.ΪTŃ0k4®NHTBU`__u<.xGuJ㪤?Ly~ eZ袢~?:7uXZ"50 H"pMF]$f Ͷ=TM%$4x?F1LwG=L 'g (C+\`H`b0@caǫ> Ȕ<,dT{ߣT4 hSg%6yvF. @Dfv(U}xpCLÕ;ec@?)*$J=R8DNn0| Ǩ@4gX]o]IY4* =*R6Ǧ#~@>-?'~u]d`~5mucOwcj @2rip/w:U`g<,v.^FmQ?Ciyj5E/x iTۀdSҗ;_RE4}W;"'T!8[m\nu)<\ܨ7ZCNJZiHڮSKu\-_ U׬k,ipkI=PDuz^QYϜ/[g2~YZUWP`)Co{&OzE 8>xޫߖpXκG'^!מw͕г#t^h" A'2 $cT_s : c7zpQ.|C(ÚjGahAX,ZrKPÈk!,X4zfE48 ;lLG,{g=䇨X^玵. WVP*@qNeO1{} ?v0{>"]ܼOZFa{tkXM DzGgmn'4N=LLoH6^n%y5B>+~CZ =kJn3Ha|c(Dg7S{"oqO_ p8v:F جç-]65Uz;MO$V#B!Roozʑ`tns6&ҵ^ )B'R͠sU&X(~14XqttW %/@:t| x /9ɳw1 r;knxJg[eMV\"P#Ĵ[E@M`jу6;on~83Y e&RJ/WVsS{,`A!#9kt4wMM@<N瞦8Ȃgjۏ'p.}N4 @;g8zO^z'Q7Fti]J/hQZ* Y~ƨY~l5 lt@7J!"i Ax;_Ӡ['[_7W\wM@;+7>xō~.C߆nc9 "Sa|G]|ktU~ei?=org30 mAmZf*U z2hRxEb陙ug{~$Pd3`d@χ#@ݐvhx\ YƩK6\s]382G8:in[ b{eۄؑEy. i-cЃX 8t\t-*wvUBC9ѐBHk%bӧx_Rj!DCPq5@AӾV-{8%:K7%ƱGN:w한v]Z3S(.Srl[ai A z6;kFdZ_TomLU%cUhp{BM]}ydC&\87Yd쵅$xF`Gib_,`E؇.*F90Դz6 c%a. Hg#u(H YBC)xQ' s y~M^ʈEGdSUE{wdSLs lsCA,XS_+ݫ{z~>?ۓ)ȐO>I$h ~PJ [)LIVҦx 5Q(Re{QCYT ECP?a@z AP|P 뿂x٥9AFbAlG Ǒ,Nˆʺɏ Вi믅BpWF.Aԙ!OF` O`;OV|w{4޼mzÇ_=yH Yҁ7 s6'j/obTATRQnsR;@8(K|~ĐEDzgꩧVA&W 8վ^m/:,m+?:sÇ=8byLCЈ&p);vCDRx (!koӍ eem8Ŕ[_Ɓ6 $08g]M>;g\ݞz)P3I2$=ANZ([vB| Bt' vT7 >S/؝RV]Ъ$[N,BqhT:erVty};4DS>V<8jxGP86neU}I&!7۞H%0#Zd5".r#;{[YLV1ِ% zp'f&e[BU*":{afDN+`$,WXrͳBM8X-gdVM ?y);% Uc=Q8($+:K<8?_://ȀR,;D  RÑ6&w?2xr`"9b.N,rȁ5L DYHT{J]C7Rs:f\%?I05Qyv Q#V^CI\C>ZfKZ(dz`lB4}ֺ{w.AI0n>7}6Ț\<:xVF]N}-ҿ/WV7 eِHz!;6ݞBЍ!TL XuĄ^ nf8J@}@{aר-۔NvZ j&8i`gR՗T6vx>_A% X'\>?w|fs˧2$$ieu|:mI<;v.w2B~8mN. kpDIXoCxe@cG6'.ԈjMĀu}5%jIL\{CҮ7JwxLb"Nh^ rIF* بJ!@004)4IS* qx8o@ @ <_E~kXO^&iߦ-!`Hd6 Lƒ(QYe:Wwn m\wcbn͋<+2dΎU:﮸p}E&9GiG߃0e#z8,Z5Vxj6"k 2Mϱ[e>3j艬:Qj*JRFvK`iC!}:o9h{&oQݼ}@Z1AQզoIwo#[R)sx~Jfn'ZLOX!5zs z0[b?s%P*SS< M kK*g x|Y'tRw0lk/=v):[3Xps7ykGԠ "9@߇kzSgH['p|B" M<˝ajgF.LC)]TT3C@繖DӘ}h*4ЌF0y (E7 7"" 1xYUZijoʗ݀bdoIjqZ</űۨ³ CQEvޞB(OydPǑϋų3?l[֒B_*)E,oRBWB߹]9*ߗ˾_6e{aѲcd%<ܖ%."LMO[+_ը]LpSUngץ,!ַY.l&}Ke?p(q1N^$~el—ã?|Û^;Ϡ}=E U?ŷnQ2J@FQ@X @҂8!E+U;Nw0IhMԼ@[i#%zaգ@sM^5-J-Bq֐X3>ORvR1ȫl_+]d$bLr Gy%qK$qWm3L9 ?չEmp?hb~ݞHٱy/wXCt4ۮvNlHLJ?_U0̷%; S8mC}蝼 $3@E"X3A  .LL{ɚs*'4&v@Dԇh=lz2z =?2@Ɇ6T&,|ryiYAu샶_8 ұ*G q߱W3d\%QpKn9fljUb`M b7!?0++dwjZ>:(q1$mQh,+ciц>?,J Ģ"!ۈ"7Pf[4M~Uґ5J pmu%991p8RRka(n|8ʷaIB6e7;}LL0'W.r_f+(Ev~`"g/re q)ŕ(iw4Ʉy~dX8o sBḤ"7" PDt6a=yt榼=gJ"J@꾪bF"E zJ{j.==. KQ/}fS"b) |ʚauTD[o+[z=8/+/t NcPi-sN4L"4ϴGF|r_?L.76zHV.p/ajBVvL:0b#$!;5'?,˻ ~ƹmnW^/` !On63Q e3>/PQNG:c9X{mDW[+~:VWX$@ԹWe/бq]f-x=dtyDVRPX{OB1)(e38 ǟӿ a_Pg!ezpTrlӀm9\yY8=΀b󡷸1RWtmD2hˇs?|{;ye5% *e^ إ{a ;G1:JXG