summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_nbio.c
blob: a974265837f0d451cb7b28bde80b4b3ed0d8bc6e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/*
 * Copyright (C) 2019  Advanced Micro Devices, Inc.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

#include "amdgpu.h"
#include "amdgpu_ras.h"

int amdgpu_nbio_ras_sw_init(struct amdgpu_device *adev)
{
	int err;
	struct amdgpu_nbio_ras *ras;

	if (!adev->nbio.ras)
		return 0;

	ras = adev->nbio.ras;
	err = amdgpu_ras_register_ras_block(adev, &ras->ras_block);
	if (err) {
		dev_err(adev->dev, "Failed to register pcie_bif ras block!\n");
		return err;
	}

	strcpy(ras->ras_block.ras_comm.name, "pcie_bif");
	ras->ras_block.ras_comm.block = AMDGPU_RAS_BLOCK__PCIE_BIF;
	ras->ras_block.ras_comm.type = AMDGPU_RAS_ERROR__MULTI_UNCORRECTABLE;
	adev->nbio.ras_if = &ras->ras_block.ras_comm;

	return 0;
}

u64 amdgpu_nbio_get_pcie_replay_count(struct amdgpu_device *adev)
{
	if (adev->nbio.funcs && adev->nbio.funcs->get_pcie_replay_count)
		return adev->nbio.funcs->get_pcie_replay_count(adev);

	return 0;
}

bool amdgpu_nbio_is_replay_cnt_supported(struct amdgpu_device *adev)
{
	if (amdgpu_sriov_vf(adev) || !adev->asic_funcs ||
	    !adev->asic_funcs->get_pcie_replay_count ||
	    (!adev->nbio.funcs || !adev->nbio.funcs->get_pcie_replay_count))
		return false;

	return true;
}

int amdgpu_nbio_ras_late_init(struct amdgpu_device *adev, struct ras_common_if *ras_block)
{
	int r;
	r = amdgpu_ras_block_late_init(adev, ras_block);
	if (r)
		return r;

	if (amdgpu_ras_is_supported(adev, ras_block->block)) {
		r = amdgpu_irq_get(adev, &adev->nbio.ras_controller_irq, 0);
		if (r)
			goto late_fini;
		r = amdgpu_irq_get(adev, &adev->nbio.ras_err_event_athub_irq, 0);
		if (r)
			goto late_fini;
	}

	return 0;
late_fini:
	amdgpu_ras_block_late_fini(adev, ras_block);
	return r;
}
]~2 ۃ=rz T ЩR WvgXL]fIޮFe-}Mݞr()Aِ [jD5tQqkXDο/(-`/ 8.d}|^JYg&WapLƒot; `Ӆ6 fQTDb+óBTCļI%K&Ʀ|AGA[lvleL˾8Lv{7{ cmGR_Diaok neFniA2ftJ:pw1ZBז+FBvd&&۰d2e \q0a+azNU5cE!jZK Bf\Ob]i<./\&͸15̄| E;{@$6G`wHƚ \bAgͣ#O}#p:le:8{D2:LdS{DB+^|Do: @r:{DxAcsdH1Y&G`0Iô(oʰ;9Z qЮ:x,bAC;rh-`c]h'zö6x`#i>ݞ J@'s|Dz2d%et@,l>/7k/-O>M6t1-t{CK?1M^ ,GPAcOb1 |MH%`|ۃg-Jn0 9 UAV ehORY#'F78B8`NCSq=xw`ܿOv|nl2ONz^ .,hٹdyt̜:+ cܱ҅lj,lfL΂*hYD!zJXȻ%q$=6 k= 鿪kJ5/!@MRQ/ϰ˼@6ErTOA$Dr>E3UhMҜ`h\Ì(1@ô6yQf}h}%;w.ǡq:(."bꠣf|sd5ڍ"a=<Fh,q$?蒹kw@ m}yE7XVvIO%%涾BxMD^Ƈ3'L:ihw ɫ.i* gMXb$~/waCMf(mxa-|w5Wi_qW<wyF?NbǝX\04ykˬPJYn!&Fɒw"bFku4e8Uˊ܁S2~ҟ$G+ҝ*ª7>4{U᥾z-RCG=r 'bphRq:) i*C5j(V=$J+4Y)|O}QPg 8Qi^/7XA(T3}%8Qi 3 NRNN!þ ɭ)\l7 Xph=6ѼtJ˒]*XKT6; ŅLn.Jele-BPVl$Bɟ&Q_92vʝ}Le2 >gەE4!0 <+a{<}n|% } RQ'PҦNa"/`yo CmG,69 T{u]X=_PP,}0@ BSQZ|v!A}@b!Uku8]f=Ru^PwK %n{zrp \^ʲ';\AO23 v%x4뙲N:@瘟){ŗp\q(ѩVH߿i mirXR"]6zY zU'TKa?Th8"QfFN\/&+D1;{MdHT=4fq䧮ZilrR{}hĤ>'4i]\,TV3lbܝ"CYM=ǶxE.*_U9t4Z3ueV)F ݌KXw<맣`flmm8jnVY_8@6[jO) 0)T*}}qݦ9~up/C*5ZjMF=??qwOqͥ؉8OH:~D` 7v;|l ssFjcO0ۡN[*6ޞ7p;9?zS̼)Esk'miB̔JO"ApITuc]P*TbT4Ef/㛗?T25FÅF;-CR?4[. o6b?6YZoz(䖆*;!j弧Y ^ 7# ^h1Qvܪ^ɺ t>80-tbYXY L+ 0"3X䂨׌G18bԇ!ƒi/|cDF"2\?_xs`/0 sW)oKt8h|WQ$2>8cfn}޸5?ĕ 43UF6F)g?f}-;kL4omiS?R9з;N*yY&!ԕL $,qsCy(X+cź-Z,g>HT>9$ $,Bmf?:Pa(>Ggð[xxئ'RC~OR4wϽ7]Hx5x3jD u:(7'/ͦ%40|8FGpVzD+zt7lj+dIF䵮ȸtA"8FLQ D^h5ewMhXרu yG%= l8z|7gIQ:0FLO3—/OSit1.9lsu֯z%cb>D*-bnNLk-^F±OtM䒈yICLaF )cX,3)MɜVݺ-7~B+tLJRH ,კ֝r7,{axu#ӬVы4~7J˺+БtcꀏY+,Kg2K %7Gma43Faow:-;35=8]'*Nв*v9`foi+NAq`t9Ms)p?U#gX7-ǝ{e.UOQE^ ƌ=ͨ?Ke|:eVŐ#wh~rMO:Y-\1_TG3Rw~r#صd(*Zr}]0z8ކԩ3o v&*טi5,R4-]3H9tdiT"yd)FLs߅tJ/Hdy@#2쩄C”~haEpH = uU?ɏڹ(Jz!ڙ {I ƥ* 'Hs dQ"ڋ9>o$ _rM,irrƧq0;sM.WO0L0pH7YѦ(G*G [bܒojt-)0ql1\$ yuQuoh:Cvc"co=<) 2M&U.K D L^jɮ6J/"D7B?{@䩥O D"|̰zHUlmvm*>7 GmcA CHzm.}n=Vj~kTz7]г׼)VjKhfp q$vX,Q YOcKjvYSB&7J7AĦƫ=#F^s@`%V&tJqe7Ihn\6 ;չ7W4K u[:VSTeo绑W&σ6Y/w4^\YbQR'U7a H{Q,7a9y4ɭ^k{GVJRy!r$bN+vP;@l6$+VK\q6ׇc="|k,~xC%z.M084KQt` .<ōHٳFbaqYN %,NTr@XfQ)2)wo4?eG^{$kEl߶Yͼ0vmmu2 +7v6ĭIiBl% ѡ[cC9up2+5kF)5Ojɜb_z \?h9$$BG?F:w'|gW )ac)=d\QϒWB`N:CpHOs\E&s.y:9($Tsvm&@ N6M㹄{٢Xa2s {][ea۸`=3_ubx9GQnp&8e<" ۪a5ҖzHfrer 媯@c'/N| Kz9;LrD:pXқNk_Lע?޷PyJ˸yjuq#zx& g*3֑ 4v4S7 '^gNc%H?F@o]& = eIҔ,޽S6ST{߿DNZQAuaQazFؙdgs#"~0r;jcp)6m]|z41df7<+OV&Ĕf$s@[6)SJ H%T7j `FhfM8{]+Qlqc޸Uʌ~#yDfZtY,1_{ird*gVsۢב\4z'LKְʶ,~͡'<Ԡ?hT)6{gQlŐyh.6pRn/j{3xAl5skKV˼j]8։-NfUW*uшEY55] & UA\an)8BH9~T֥fg] 5f'{ N"*r[lrC =R3k jx{\lz-x2c)?{8bR}#k%guހPQ jޛF;*E@Vt|9}7[(J5.'? #On΂9Ջ}=yd,#?->=eܗ ]<%??/??<{ӯ|eϖ94QoOa_Y8.D.dO ppDbd*-%r.fndDJb@שSGΙJ!3滹.~z?(Y- ?r\V7 7_9hH7o>v S"EnwP6pGd=֝)S[Gv(UOp18% :Jg |@:jpWڊH:rvFj]1$!| yy_ 3q_VxQ&7Ä"t_GBK˓Jc_B*>/Ϋ]{??tu_6ohZ)e=z+2a@+R ?yb>RvmǏ ڥ]0å\"6)DU?7oF>_3U! R"N:x&ayCrJi+'&%2޼Ó27>,}<(Y~uXxLjFW<陸ſߤjfş0F?Z1Xce)4%p㨊){pezt|HEHP*#%UwZ5Si~O6s8 Ò' ]w8kCxI]%o+^)m>9*MX27]|9iGu5[9yUsڿrńq#.Y˩[ 2Q&w1j͛B8,G?9LL~T뻑y>kfgjh\[y)kRωu5뉈aZE:˼(Nk~󷵢ȍXM46aMP)f:|Q]XюiǼΙ{8< x*}pWO{^R]HMBklǐXK}b>q|V{zz2P>DK~qC5G`džu6: 5iʊC*`HkoD:\C5d .gO^dkə5<ҋ.i"~q(w |P/ZiO'a^1WSʧIv֝+8a2HMpZ5$@gx[Q7CEC֏| j膞|V[9$vGxBx\q:>&74_vuoh hcӰz ǡ HL/]L4?WaqPHD('[iexPcnD먢*bƭI4:V Çz("&KLL;ÎN6tCd1tK1*ׇ|Wx^a4푠RWW`E_a YG'hDۄl,|`d\p|qoY0? ꆿ/CwqxPo5 5&0 c[:v.x;2<;2`af#kU뵇t:QÉU=7U&35*5#qRPMWӞjԨ^S0t&ea4|PwV:[-E+?2xr5T{N9U8CI.1*l+)аxRI p~vNҝF"Jaszt PP=,e7.[[ku:bVϸ=X#ɞ~lG7:?`~ޭՈh+=7(eN1gSc6hhq[*~a'KC wL'##c&=ӢGrjiGRh:aI`ŮBa,фU-M!$1ff[͋[1'&v=q5T7fዚ;B' 6]_63#!qc~]da}NMLF6ژa ۥh%=qެ@JkkCJHkOd̒m,n >𓽵qwk_KX%0vjf<|r$l< 'hOjeYwԬM5~WRҦjŊH^fc)RY`4jPNoWX/-]гHhT{.s5"}|"iM24}.i`lݠN^VJ>cuqp+dj)#f7#K\7y]3X4gov|E-bZ9.<^%l@zGcps3-&R$pzRo®&h0؅eړ~Gw˗#(o 9affk3=evTu֦kNW<ՔeAykH/싉pY!Y]2\R$Qn意X.^gG$S "5K;+E):fp𩬇l%`Mp>aqo\M]ME1y؟~|'}/iJ_Y(}R.>q7~:g}l\Qpmυ' ^Ҽ;Dre eYH;k/agfv&wM7 RC_HKfG3,RGj2|mMNⶠW R+}+4(]ִ 9H@ "z!3ԇ Aђa6xt&''Fg!݉:F;:lA!Sky.1 *pCCuog,MXZW?pjҁ>l=: =^IS`\K?K?=דRY—L8#Y~zZzDt{x—bP"&KknK L(ƞr H`X<ulpzhRїR;+R*:򹢷XTU}Z\-X-jW}.O^!]f) Gz5rDسc4ͺ GN? ul\3.&tv-Y.k{O$x߀^uq%>Lmh0ٲD -dҶZA_b8 +$'vrXӇjD?=:4+|XREvmb,utb"[2%ֶllG8xS,Dڛ S}y t8ז.d|7Z e6ܓ܄o>'=ݩSϪ4i#ӥQK4vGNԙGU؅!0Fu~l  p%{|sͷR'Y ym^Y5TS ,Zz,Bt94@U)\ѻZ >uVFs@-' ;{s^\܂\>{ ;B0X.>//hXl~nozc6 $tKQ$REk+7l$xu`wRȀUv6L0^n N?d M%7#r׭:W7}|ë5IQf4ɖUopY')h _\?`QgeEGVFC5UGF>q832D "5TudΚs ՟mboOM;1pf"0OŢVsSjoUڙnn>ç:Q!Ђhe-Rr3bPGGz*Q<ѵuб${(uҞ,&YlOhSC/Xn[}u_he×VvSoVDFv': !~_&i"8eChDBCw^tJոZo:8'?׃R'Wq^ءt"x8zthwJK [0rdc[H4}mHum!,THBnؿ @y00{cI<V}pvlI?⢘̓u BV/x؟K+ivc1$ԚdM"bTJ^vh[G#GsŠ_v?b0ʡe+b\h(*"j >vy5= A\`t:[4IJ"r׀8Exb.+^>$mL۪[l-՘:Z(I9n(p ϻtfCidfLsXK$f>>υ!Ixuo >!pv_`BИHx_k][P?;+FA+HZ4TiXXEHã %e`(\]5lTJMH4Ud@I52M{BzO[\^ZR:">jwkq3QLjh zcbY:I'Zdd2P58u^фd*:>,$23?2dg&b^}S. J說l?VIAK茎]ڧ a7KPLxÄQI=rASFjE';1B }LBekDONoAu;1? V)TJqk+`;R/ݩ= /(8Y<He=ܤ)dZ{*?Yb˳e(Իw@?ϓCCUaا4;&v9٥lY{p4{me]M5^a%0v֖!%^I ,tj@S(AFW X.__e>X /m/ w i 1 3Q)Jա57i}NQ8b?BW6Hx`j* d=5L+hAZ_)ЋWLdMOs%Z].F$ShʇgEpr@s1{%ЏO>z=_N3I4#F:RIh{Fߟi g(&šQp.ʎ,eb-2HrPOlWi~`£(3A pSA(52T+V+Ί l,2bї]w4Bz" 8G(4񜟭).E㭻wF^~%bk#l~}ຈs"\=FջH<`\;سJ9S vH#r L+%O{ Шie*uKJ#",.%No OHN R\"ހD o}|1Әn>!/*2耸0^|j]&FveM'qi74:OEkwc ]&4/[Y(Igծ픴v\IP1IyLNPKc"=sMԵэ9eE^k8kƤIflUY4٬`xĬwT{8j*p bRW{A$|/(r p!opoi~!AQ`8n %$hmLW$b {୼X<_|k+ R, sߧ]iw,Y<:_'Y/ 5b :(9h0lnN4xm)GE^\\-% s0J_`?p]hCuNScׂ_i -JS2g B}1HHXWWҚh ^RV@P ƨ_/L+j+u8k! ΅#5whڪFzv_ϕO窭Wr{HY<|eC=\QTN!-Y yG$u8)G(O@ >W:Hk${R`[ogdJP 4-?^T- ^@;85}1DTH_g< 齴*xt-S\kUTD2\%O.$Br,]97l0ɌUmI߳$$ o=І hqCx^ҶE$DM H{7ٟ W-`S2MƝɸa{TNoDM:6ULMnCZO3N)~hGJCOƳ/V_}?SA vWt PzH+dnh-@_܍IjV877Ωէ! n e,'lT ƍghtHkG! w"${L3ǁo;YM_K=)#/q }ݵz \<}YvsU6vCa ^4K] J!>7̱NĢZ n슔C:laR\_9.P^,3! - dcy:kIg*X*H <~|.t]Fhߖ:ix &_F[fK,@R>5 6f:[!7s)q@PhrƲ;]]9AK\'ƴ&eS$j2/JG6uϽ6UFeB%+d0%L}GX2/I&(*2W$$:Pz _ }{Gozγ'cL%)V6Q}4Us2f 7|Zc$Og0f@¦Q_dWY>~ L6sŢtMcljP<6o˙&ņG0`&]*LaH[갿>|ÐR51V/'1b>*]@RB *ѥ!T_nhYe(۬333xZ HY~HSHNpNmlś'#NyLnw'>1ǶtI=6)QG*&=Bi?]աu-5qvOoTS JBiWrgÿȊřR⫮(Ճ+N쿃5%UQP7oF(k?'*B$̣7jlCb'Y soa[iz;NxYjTQSkj'a빝zJXiNů{`7In]A^.p1c, fS@%K[bOY6l &~p&9KO,ԸiY̷?)j d-zΗ/_ J)RqwԠ_D=aW"U[0f2RSKqX^z2`6c$d阶 w'eհiGS%W(4x||Fʕo /+EH$/Ju{^W{7/B^ aH"Vc tOt ; X:|#ɓߓMfEzk1[[B>a+W+qekos ntђJ#VjJ ]hYLwq:ǀg.Lp5'@1 |z 8QWMtn@+F+gw:;R? b,B=H ڭsT@.84fjLF2AquC#4rdNz4-$ax;uLoׯ\2 v&aR%Ƨ)灓%\ ܠެu /$H6B?hYseNUH1U Cx桒d]VDF#{&f4?]0?HlNb0 l;&!:~8@VUr(3{&G2n{ ^H[hTb?`qGE~xu;fԈϖG_"Lr;6{ ds>YeUU $!G(xkpRd,-2v*4n\ j lFu>iu4PQ1y5lL,|I/%xS/a8}HH.v@M3I yNwADWh4#ѳxpzv~^*(Ciz>Y|5=sVܿ+LMH\iA,eyY2//GH)',6X[Nֲ)5£f H @ѧ 0KjhGA+*qDYdSc%5L hGƝ$,6Y{oq_7>?[`Lݑ¨m-f OӂDnJZѪYjڤ4!0!'34y]ue$ݾhq?19ZB^2 R6z(> d:2IdMM@Dv;F$橽Q.2 .bwX낦IȘE#o‘꥾Qov!$VERZӥGUa55ď<#v${5u|-6=MˉlZi(4@\!fìX& (gϕ< 6dNKzx099Yǵ4XE.R޻R GK./jp(,'}XJ5=i&:K/xRbϵ24*A.bR6zr$@}]<#p4[-R]o?8vKM&r&-<% ;kY3Y>b̜5)*8i2 1GJZe9Ӭ8-OUk8Lvt:U?3ig9֎lr\wg=t8/ADOP}^(cw d,A>"㭬HvR[C8#/ L2>iLb; 3*VG6CFD5"DvXoEPQ7 e~A<55%wAFg3 W$%#mg41]5 ^0dHȀke8}Reᑞ <EZ?ĊԶc_eUޱCǦA3lHᶄC{ Ix Ym[|6tt }keI%8M;hVC@d^k6UzKF ;f}PnS;M@6L&2;A-pG}'(K8aL8 *Vv\d8Lg(\˸CZtԧ+~hIOkTFv 'r¥6N"P6S jx7n%{W]| kPcUFَZg ֡FK)r% T۠~ Zzuw*n.56XaۀӎX=܌f織mM4 ǛP#mN\<K;`h'0?MfsHAS/Im 9iy3YCe=s6jLM2ըIK ;JRU0j7U: #:S6Ci=m2Xbf®A $™6SfRvՑ4}:f`Y^XhҰ1qYPJ!a,jd3zZw_?6TDtAHIXÞSW <襡UmmM|'YbԐ)y_z ,iW0q@S[Qg:2j:=E4.͝Nί7<>!%΋?.t%E Xz8؂ ry_p~(0PVDI] x]8* YΩ _NC;!z,,L%,Q(oOW_8xzNCY v?&YQJL`aM|C'g@onqEZBBoט'@:2)@*ph\{$q`tK\ =f1 icE7][qZ! o];?${+z,7.JNE"_:+<^jXk&jC3́Z@ó-MV/ [w* }CQ2G3?oݘK枩8 uwY2v . ŸNG^re,w)6 eG{Q`n'90V¥^omem_-&'e>ӻOL n KZ<|2FQWd"<6ؤmk@Ў)A[j;9W)8 N;J>A829S\pH6[h!˳HZzH0:8|ze30kƝ NEMu_|.\pj6LMFSJن_d$EyYQ/pDGCz/Z.H޻tF&)f32M7N wmE#EfwR=]!t)'vq- *CHxٯ]YbkHX[< ةϤ5R&0;UsRՆ91}Jrems!&K} W3C'bCd)9ݵ_{rvYȡ*\PA _䁔DZ{ 3LgFqe i(;޿ȤJ9)Jp)¼XdX{cJs_a$ 'V[8)9_7z|8_9zf x!6;1[M6[ .5hρҸfrQ"/DEʒan9ED,;ؾ?-lk ;/ ufh֛CY=vR=@)xp,zwԬfizGF4 gCڔsbK6+K%tkz6YUkۣ}tphǡ~bVi(@E}znaa|+7ӊj:(Çe?N'YhRZb mnQK irŴv;}@@/Yɲi|p4_us*YٔLѷdޝ}C3O02c&>zkpq#MM0n$/B-p,)Tx% b%Q<qÔH}w;֦?jr^*p0@:va :nCNOChT`阄i[yU[wz8d`5KrVJ3UOwwM#N) |Kwtu:~Jv}`ֈOj%-#p<58lv)=?8\^$}1lM5#&@ӆop6"kUM%}KZ-ۨw[!{f+QWC?qU kQЇ2R[GRÌ%sh^}@bB*RZU$YH'7|wE>$pOp5!*=t,8nFXS2~ GZO;[ldv'kyl``İ X-rj͖{5PZHvyM '5[T^W$GYE;„SI5zF2jtjjOoT/>+`&eu 'D_!J`T(R`LG.a Q:\zҋq}H S|+ފ~F٩ԡq%q8ClUfT3 szOulXROB$CCI%̊h >.iWY[)G9mlFuiP eǬI:UcLaDLnPZbjvnS{%}l[.O`eޜdhmN %uH):\[ڹʩrF,f'nӾڕwphҤHGҺ+K9j 5qo0HbXʅf:$T7{ 4a@Rmwh9YM] N -\c^nB?p1v$@ʫb6-# + KUq}%[?tfzjvتժ OGOx-+M] ;n#gU81WЧ94f6o_[BNW'$wDHoefDA<\٩i*7@,ĩTj{k:KVH3Qe^u:fS=Z= %ո!evTXۥ b> A XVFHQy8nRHNX-]) pqZDq:WX t*wۏOAߧ $d4NKI {R/I><5qD_$͝9NRR cNy\G'P,5$$Q2V!*S5{6TKUH/e^V_="2BS\W Pg&ˑL֒:^?q"#jBr3Zlڻ^:[QBab^5Ӣ텦٨aKaL.]N|NKh&2AwYs^VD/15bo0tJYAűۊOd]@e )lͣXaɸlg_&P(ifMV4WdOʮcG%znMӿ'>Xw6?ބlXڍDk,N8Pt*g K}jS";rsv{cֳ83O5Nc̀e V~lS}gش=:QCSEVb#3dgg[k=#$XAeO']:['0'6Yי m|I}́sFw~k- rnF.zɑZ&S}غQ޺"KލA^k~+,䌊:ZvWQ޾/>>[eC :uDޔjaWpwD)q$Ly.+tlQglf&u^ZT`Q+<\b88A d8ծiw;$hEaIg2ɀ|R8SPci.Q.2MjY_NU ռh0҆RRo᪴G=> []lp "+/zj6%;>FmrC1kdV5IUd:.>\Uͻ[Qj"FGR 6B3BsRM%rm9ZQH/ R;RhdJĆ+8`b Ca,H'Uiu\ kcI {rөř,= 6yӭT`qD5[bϥEY ~^=WpĎ5GFXWOyƧE^rSlVԕmX$:ϒX{'@ >-M5R+^&we~Z@FE5U2J徢&1!Wᕣ/!*j$%r:"-`D=pU":IJGowOR\>#e'vu~ V9+@?FMU,lעÎ)"{CZ].l*t#UĐu^uvA1< aWȍs6+im6GpAc 9!XF8"v L1_xvЊz6HV]I1odZg'fjK+w V.#ngէl_'eiIs8 D}T &KꙐ7!5羢&BR,J|ٯ׆k^M|4j7U,XMGK?9[3F0EJ8T3+u/*jou*;iFS<&0֒l3­KچF8= RW߭a)!rE}F|0WܟeOޟXɫ X %ȧ2?-񦵆:nLu!|,g1K?Doypc o#~i9 u+p#/i` b{RkuQB j9C&7?V^O7V. p|ՓKۓdGk -ʡv"fHloOl4Ym[8}⯄HiǛ&$j80RpB|E[+juH$:_J!@Zux܍[Bɒrq_B~Aou|ʳvGp7 u w)ɪn6`ȺAƇC:ew~ qwڤ՚IhGڑ [MDݖIJzH$ta~k02 _5.H#*(ctO?Elv5X|QUcDN3.5RGXuVr(Nj 1>OUA"KHu0$%{.I{woZF^"?K!gc c$>8$qiҝ;r>GbR- dx9]Mńfql P\J8xQE:p`|2@|w,:N\9bL?|&Sr8x@-80(@ lfgYpTZJdS^8. cHe0풳CqJMBM0lC~[ oa :+@ltaRa8nKKrg"a]pãRt]!q{%q鄤@˔2 q  dEV&sy)n(4,4keDOW,Ty4,Wpb~z>X1-à5 U3 "JXGZPGHrA_eCF&pUOn'RǎSu.>|au E(R) sDҋ~Q&!<6` ix g2? sʳL'g>&o8Mj%l,1WH,ako:G/DN $2YKbρy')I/p9+GhUI6ݞN2 IVk/oJiPh!mIr<.op/(*jǏ4Ȃj;r5uCNd9?.p!ը}, +Ώme!ZDN$_+?/Hoa&=ƑEmEMƳnWr {D;n xo]xp_l-_w)}ȿb/gh֗IWFYootD0s2dsP7t_opDd5s.)6]XK|-H:8м; cJ蓘ˉym Yԧ! DW[ƻ *ƒq r/Ś}|xHҪ{7=PF (vH@LIU5_S1q%f(=)cEuđU~TD d*'u&IK$Pa"@%%+,i ` Θx%Av[z0 ɔN5M`Y(}X IꐂfR@7k.Qmsd(yu^F f7ֳK:x4lwG]w_Oqƿ%m~j}򇏷5 ?}+g~ \hMZX*jLJ, v(eRna x)i;l ,/F J_z~XпƸo"3&JZHU1;ŗTu! m1+-К&e=Sz 2Ey}7zr qdGAWɑ8Uvfbpt4rPWdxrJ>JU81…sc*-S^3Fd#R M5c}fBi.R7RTzq6V>1MbGtVf,j5p^@ow&UKhBvGQ^ק: jp's4 t&po;.dISúCn(hG[=Y|,eY<.&6Bz*JNJHz:F-Dv2=Ev3\b|\'g(;9RJ2 El+ˋ,[r%~\,TWBll7RD4([BjNb>f%"J#VD@+2ji%g`(h!%2frݾsogQ; Aq)~b%; )}Ԡ&5ܠ, _ih:Znp$Z1).TF8{9'iyu x" ܟ(G9x<#ULl$=n*5v~+:ԌH"_[V( ._9jYy OJ҉"!1|S^W Q`S :g -h{-mעHOY~rmY^4!vglw5OBbk#$X)w)j׎f m<ם&#( 'aN԰#њ9v NVr@@h^#yZqDv}PQ({suʊzDi1T{7{j7ܔx]_2`sS_\K ab`p ng 3oRf RnV @$t֙+(K٧3í[^MA1$6$M#Yjjx0vv*M$*= CX`-tPFJFMht?hU9D9x:n4驞\]y`nX p3)}ZQݵRO(ߒt$„ xƢkv9v$k7pGOa%b:ܵ(3Brf BQBndmZ6p }SV9T ;8(ZIqnHUa߱T!hOGQO!(ApAЯx0#}*1h{ʦ.trMQ-Y>7OB vbD /CpHy'F^~gM,:>J\M2? h!a0,)//m l$1'y &)>p"mw̟Nfʔ f{9!HNKx?5l}ȜO'W oM[U7mP]^_1*HP3ߓ&9xA \)"I8m kop=;#4oryt(eMo09iw+GUhJR='g)| _胀.UHt{k Ѷ8F}4AdS'ilbWu:[.`CSjNN ])4"HWd2耪?o\?EuBǻgpS?ĈAK=(!gl$iV]L/01]IT_~<%eW/aE]lW4MoSӈ/:PVB!䠋|h\΢)50).曐͚2.Xjw]a][{Wp^ߣ V 5}Z y\1sQ]^fq"^z{>13 hGvW\%~l5j¶Dru +iynPmp@/º kVJHMjPDOj hn`^Q} PnAfѝ]ꆅX(^$T'`ab }t11+uS&g ~1s(.S)dBl;9:} =? Ս} nO -K3vH{6}h. ˁ#4_[O2^ ˄0s/3e/K;5}1hX>~B9g:<5߫渗(HgPqc!R}P)~ഞϐZrocg쥥| :3Ys cXP=.qyCjʣbA)[ ɯWW'!0z(FtjW(q(@}|6I1,:c79k]O;DjVYQ.zRD.-?Y94)vS [Tp)|-eiQU`0 UͲo ո =Lf^%Y.P!/8\4IMos2j#Վme+g]ODrOj;$O԰:c!ݻWGQTH0wPu6(`cNFiPi֯FHjLm՜R?N&mڢ3Na!v^UYд ]J+;-pN[M fi-HTV6)D Mk:`ݖLgQ~&iY_`A&+0zno`KD[=c>D?N$ȓ-r#V#h*(R, >pשfsV!suc<ÍL 4g.t~,rtZdxP-·-|N2>Iw=f /$)Stk2yo]KGbnc1.5Tdwڧb|`9?zx{י(2i9ԈQc7&8h4؂(cӊA8J1Q=pB]~v ~kȟH@[\NUH@;.䅴2TR)Էz~ MIȪqӟ Ў(E--8eڤ0; tZ K0'=X޶st7kiKHujcuW)tW-xn,%7f=F(;VpQQ] GSQgMsp)lW#ډG'uɣT.7EO 6_-f+;[e;Nڷ yƒYyfjnOfC=*|OGI[:R$KaSZFfZhf3a4F8FSE=q ~Ef,p 0|zX\~:@!v~93|@qU` 1瘚,{5IQuFC2X2>9A<2 鰸#HNM`̾+ "4.e6KU ݂~2вHl6%p-#J :?Vj(^ׅd٣isH/➵88};8u1 Ɇ o'.eTnQh,l :HS/ZB%ŝ7wP`/?1hOoږl<\ۍz  h{0lT~ }s"3Σr8DAS4ƞ)/M|p(=jҞԴ9BqOƴ5 'JZP:Ñjuz{4Z |i _*z\Ѳ> fn\v }$ uQ=oIxle %|\SV*"Gd: ?PلDkƄzr 0#}8qh N p ~̑M,z5e2\)EsyI GP 5 ǖ'+taVXj[[g~=u&j;.F jHg2n96+ِBc8HfVƐirVœz;@.V4 ;t*y׋sqh(m1p}0j!kҖs=s>||;N:,5 %`/F/΅ES~@2" Ř?"NA?,AD2J`\\:d+!;IH݅i}j3= ݸ eͼ҉ldvv!ȏ!S^T`rׄL1WxΟ9f$fYi=fmԼiuI>S ?J)~{`BHSqxl9 ⧍>:ƣ3[vo=S?]ڵmӈJ),rpSXg@e4bJ>"ēZfg0{p]+I47h5ΆSCuqc},OQ %J:Vi4\`fAãlIHoe>s٪Ui su#Ӥ!j[E$X VJVE=g@FgFoXx Ʒϋsy$8: tA_6b{Z]YND]aB=`XFYsIE`N_e!Z?Z:T.u5af]{I:1I8VK}o`Q''(SiZ?.(^&( eRi֐uU„ejiV%:7z!EX^]Ps*>h^ñ CrNSuhBiA4zE5ɜv=RUoz]~+9`ϟtZ??Y@,%//hڟ=af# .Y-%LjiX)_=<Σ@RV>m^vHiB!^|X+:@Sw]s(CD?C:ݹ:>GzҝQ!,JWHAST,+a$mST-sWD&t=ݣW`hD۰K@+gSUfB.Kd&tXU4%閽y^vY:q1bTJUê}*kO> u*xV&!Ãj~-Vp>E<EկOѪUpLE!q%>iNjNg<uҝ6T?(՟d`vfP8%mAJq_MdFJu}FI]FiqJO``G)$BWh~uwz{jYIN+N仇\9Kp˫noâ{-"c"{G6il:h|q{eX.8!O)fFc@vDxK u>}ooCЁ~n50-zvӗva- $B;q8MT7Ϡb&++" $N{;܅ %`OƠRHq}eމ䆤kf%@fykv<+G칉9|W0ٿu kJLsҘlL-eZ0RPUT>ªÖpT.d)x"e>;.}GXZB )ʶzȣYG{VhxzVH:;?cbii..& L ܔMo1RP^DqϼƍffBvWJ̘N\d`o6NDpOoY Z] W rlL·W'6\ћQ$ ~uaNi8-\MoI.y4+ԁUQ]|59(dp`N T%2Y #|F> VH(~nnϒݻ;&wҿS:H2\ƵLWonTx7).5 k4'ث}EEO֡߳ 13Ղ|k/>I2}/b:Y+PW*gpty.Hg7e&HNA̝΢rwf&Ш(ʼg74^hkRqMs}@eܽLA5:CBfdp K{H&&sJFky Znܐ߸a?Ic9Oiubb8 |p 6l<4Ö$CwHn=ړV]֞4 g(“u]4PuNWW4 Y@ VmP{R|7٧xee}$QRork`h[e#d ^,K+ _^TbC?oh9_#vA+N4TӮÁmKJPt2Nv^s_7mQIߤ=3UݩjE 42ǵȉCMMUC>wIkUL8AQAbݢ5?&WYR{QFgji(5qv` NuZK/'T-]e>j׾3&LSQ6-OY;!=:d+ 56n&W,Pau,T 5/X(d|%$ʤd--xZ'V{ !Aj^&b:O/RnvyfrKr+|兓hp::rc.e}WPhdO}9꿿2>˩1.t.o4^Q?'p0قfGM8keq9{ui煦ewH W:#}H1J.ݷq/*}1::SڙG|aq}%^rl-dF{cIh9!󧊯?m07*Ʈl.팤zH]fYS d>(fQHPJgw4ͳN %[@Bg sS{KCmlGߝ7.=|m9s=`|&$i~{?|2c躄4{"σuB%DO5 xV+(h综hk@SP,e˱L&TL&V7;dX|@-+׳Ng愖ykGH*s!R]zJ) *肢ej{}uN/(\\+)F.Ux6pw_𺓥&,iʷ idQi]6 $FO>y&:{Ζl.S.Pm6] jW*Rjr]EQNK]rV8Qc *]h[XkOUzjaZЬP:ŷc v"_'ݯ?Y[ƎSH eK djpMGd8I ^d N\UFDG%x$00z{a3kυ^C 8V&"/ 2BكHG U$aVsu6k ]$JU2xELVKO$qԑŹӏ10P[{i2҄ U@Qp pqlݢ 9IzW*@6YKWA s-v :AHo&j \pI58d%\SY7q7ma(-,f':WpzrW'YkV X8T#eُT˲Śz}MBxOd}"IV2Jk,I$s唊B!+n+|P(|4NjCZa^-0!;49߇j5tKT˜fvJp64nWd=Yҕ }6 :$NWWY~$s")ׄnM6lPHK -D׫LpEEosGm>.Zc~< Y/=[orY'r jΪkCgVʹ1CD0G׍5/fhcNJQ6`68߁7Lj.v>/}X3{uUc0.bű,[q`H@,4ǣ{q˩Of7BNo[^%c P_7>R$=JMVʟE iH˴$!I3]j$M"Usf 5zӶ Dz,Ht P'<(MV[ߍٞn.!4zQlWtfҡ ׉^_#wԱV)RGu:aR^Mڕ XЍ,y։k2pa5秝zjAU"'(aKnqن *╵9_ͧw)rZhB's ʷ &2Ou|ͮvDTu35ηHP]7UN>e=rA*A-\O(C'f@,H#OZxj'4_H|(,7]L&? J|%Nz*;{+#ɭe7zR*|\ηv[*Lq0@ݥ 4C JERwlWbdz ^t2ާE un\fѹ]|FyLC:"2WG{~$>M]Qր ~.Qa9JߦP4ĩ)xAPlT>ߞaۼ2ÿh0Ly[J6N̏& `O4@J33-r}Pvfj꩎|Vl=N\N].fsH'wv:Ms8I]gBPk)ʎ1ÇW>&d dOGQջF){Ƣey2PZPl9 9:8ٍ/vuk뺾@%yXv&4Oj>Vh#Ifakvib@O>͊hL_[ ~s&ҼSK"NpY+Yq9mɐ-&)Ъd2DL@p\hfYŒqq$,% x:]L9hhQhO;>;0Oěvak0gnD^:GQ cAA#Zڊk¶f1\0Q :'HX"R_L; ;T#]EfSO3HvJUP)b '<0%ezc0sHBiSlAVD^q5']Y334FHh1-;/*#aQPW}B tQºiܒgDZ!!oSlڍd*&lVrS"[^1lZ)B1@,1Id8ZZ^)vc\wEjOu8hyb rs!Id6±PмB2>OiK~A"o#u*e4ٱyR6B#t { %bvӝnO[.^lig&P&z8CᔒǮME7Cej]v-cR.δDdU O4)~k"*xoAV,9V EiVuŎjx2xbD.E [j i<.~!ֿI+td834| W}xZ|0"jcM#+=F+~9C:Ch-:~~M,?f+pa!#p"ӳR^#zM` u}8M ͓" Jْ#a ˪ue #И$l(Lbג̶$o7VQԜ1okX G53#h#xcG4گUiғrooX7erHro8v۽b5m5"~EUObs2S8C0N lP@'de R-l)o?a J $A@8:9&u]@VF#lA"Ƒ4?G{B}WF/TgDltS%RG@0v<yH}|`;Ym%M[$evc ڦ/ݓK% -ݑ$)2=5 "{Mr;yf~ysRM!Xo[k'(׷tb:ΧW~"JK٠7NlHOiF2qAZ [Vn$qN |#`3RWy}mg= {lPJaV2v%瓴qHX}_Df*K!Qn~R?:FjZ.}@MS`[M=ŸIcix,4#85lZjEXeGcT5=څg'Ì%:z_49(  !@-™Lbr[IZGP> U>ӹc_oo|`0|<Σ7h`-SX~N[:5>>juWoZqsnO MP홪"ߞRF{p g(Ž>wmw7Rf>Ɨ71sMGǙ_f/y< ,7=08gVJ{ĸ J,>; iOvi\--H} mR`%B{ ԒTk|b+Vma$PZado%'vS4n>w{tT1m1՛ Lf#ZL,gꥲL0۴DșZ(es.fK+AE^ Om-UD&tl!0b<_(W LbwFFO4V7}_*jaN/_ln.nXqM\RT K\!N%ly\o&=E)>-%AK8H)(J2r wi/e._pc~r'yFQoMYXk#A~gM,&33, W>x0SLg h/Ebs F'󓓂  [J"LfozEnΪGfĚ WڙBWZܧ`7`ʊ]bѻ4AcϿd0-cᷯƣƯ cDzr/'f#ݗC/AI% O#[nwCw!S WzF|!壞xs  ٝs< v 2t?;iRax3'ul.t$9,z>< ~JROKm{jL;lA} b ާ { .vE=wӔL^G4ʘkjƫ=|ጲҀ~p&@&cw?0h]*!S`P##Q,bCbvf}W~_QQ[4~}0דm+/ eiJ&T8jx= |FiF߶m${F)q;>#%;Ԭo>HHՔ 51[SPavP84_ݮ43A^h|طZZPX܌B0~9 쨲&xVOX,Pwg @A) \d=Jƞ)r߫Qr+=Մz=vr:_cŻk%C'.UPp|au7*Pʔp債e ħIVBn d2\PB_E~,kQNJ}Y9KEsRC5F$IyҦIi^W pzjd[H_ߓ4b=s>Y}35Vo4ɈNl^Tny=u՞ j!sg(RN?lp[5}ctNvMOj0@qtO2~±Ut|[Q44䠇kx/$]ЎvnHδ՜WV`CTщVɹ ۤj'"@Wd:q)rϫ P.SUbi,Zsu:fQZk8dbPG70g4ڼ3)}XNGPkfd Je9dgfu8믌poA~$u K۫/?fNNw|<юz~% Hv ɥE6xyTR/gOj0ˡtZ80q.it[c",-fF U3+ á2ˢGW\W- uןH8"ZwInRw jaxty:Ҕ^Ħ\$>d{2 ^Ŵ]Fb' l(FJ2:]>ȌjhHD~}<>qlQ bmP6;:,0\GjR_*A >HU]n]Dz)%` g|tǧIO="!5~MX:((,KSH I­ j+;7bjx3D3g 5.Q(쵃̩!tVD> 'w5|hgww-g:SQjaa(V#uKJR|ejf.V_|!ԐjgӥdtD-NW2I(4-*"}VDbTB,7,prf.X- 󤌳w^cc@ǷxjqZ,7o(A%-VWngwtʐ ,$k(QD<1*)?d8goh5 ,X>y]e_B+2BxfBNv` 0nDE8#;f{UH9%6t$kh6H9FjPE?#7Pi !صVf] S/tрwCQzmSO@)oMp {`]6 >z+ XeJi8˽(0azN*C3 !qR(`j\g'{魫n-Me޳hJVꁖ8>7~? 'jx4X"7z3NeޒDL3 .OR{Pmk$퐄bف:/ }I}g(E_`SҵR$oJ_VΚdt_j1\ vr=bezQ]'sevRڠ.c)N"dFM#fQVૻ!IzҮ[:`uk ftK A'ZExR=\IHuWCR2y WGg@U!/Nc'3kph~@`ѧYYv`4 Ow,kp܍PAS>^W/%-^9m}{`\JÍ8JvK@7K7&Ejߡڬ5#7-^j'Wi0$vx+qpsn0A~k {x윉zNVH;t:TzAZzn:FQL^}f~K SX1W(ML8łR}"S>8npx$s dE蔿F$$LvjoɄ^Vw.h+c3N 镩h*.d[+&,$@=:ޤQjw&WQPn/~"kiŖamуq0f ^9P˨gҼyke.W4hzt FjiЎZ:[i1^夬ͼ\LhqIE˗,YE>D<6grSp׿z8A1XV&UQcW.ڼم1CF#oq4-D%FgN"gn#\3< 'դmv 5Morp%?,/uKle%j"ϒ GX,Kh4>筡~N;XO*}goO,fq4= uO$(ZHrMCǬqz)1*|t4z ӧkex:jYzVǷIX\XWfA!|rQϸq k} Y#cp|m:z)҄ʉi|3 :Y%o1ރ%x?#a1E0mQ&DsݖcaF&>!zW< ,/ v;е^T?:M, ch a#d=4aa0?W1a9]aZ'!44i$|}1BDbLc/K`ZCzJ&"]^TBP YQ~ w 7\缪JbtUq e?e5L`+m\T*]Xϕ(ªRɛT0B2LE>\kzz+XM߈+ȋN||ҠDuKbcy%ߤTLWF=]ɷyMt\KWzFSU}ŋ*wz )~A1^Mh Ƶ KJ_9ѷڼT^l4ٲPPZ>>jK(;26G ~Gapa~06%oe%}Jftg"k4Z[1QK F_( )kj҇y5x5N46Nzw߿s0|LwlJߠbvrM=QiЌcYQ*EX-Ux?B:H-