summaryrefslogtreecommitdiff
path: root/include/linux/pcieport_if.h
blob: b69769dbf6597ada1960403ceaa370a75a6303d0 (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
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * File:	pcieport_if.h
 * Purpose:	PCI Express Port Bus Driver's IF Data Structure
 *
 * Copyright (C) 2004 Intel
 * Copyright (C) Tom Long Nguyen (tom.l.nguyen@intel.com)
 */

#ifndef _PCIEPORT_IF_H_
#define _PCIEPORT_IF_H_

/* Port Type */
#define PCIE_ANY_PORT			(~0)

/* Service Type */
#define PCIE_PORT_SERVICE_PME_SHIFT	0	/* Power Management Event */
#define PCIE_PORT_SERVICE_PME		(1 << PCIE_PORT_SERVICE_PME_SHIFT)
#define PCIE_PORT_SERVICE_AER_SHIFT	1	/* Advanced Error Reporting */
#define PCIE_PORT_SERVICE_AER		(1 << PCIE_PORT_SERVICE_AER_SHIFT)
#define PCIE_PORT_SERVICE_HP_SHIFT	2	/* Native Hotplug */
#define PCIE_PORT_SERVICE_HP		(1 << PCIE_PORT_SERVICE_HP_SHIFT)
#define PCIE_PORT_SERVICE_VC_SHIFT	3	/* Virtual Channel */
#define PCIE_PORT_SERVICE_VC		(1 << PCIE_PORT_SERVICE_VC_SHIFT)
#define PCIE_PORT_SERVICE_DPC_SHIFT	4	/* Downstream Port Containment */
#define PCIE_PORT_SERVICE_DPC		(1 << PCIE_PORT_SERVICE_DPC_SHIFT)

struct pcie_device {
	int		irq;	    /* Service IRQ/MSI/MSI-X Vector */
	struct pci_dev *port;	    /* Root/Upstream/Downstream Port */
	u32		service;    /* Port service this device represents */
	void		*priv_data; /* Service Private Data */
	struct device	device;     /* Generic Device Interface */
};
#define to_pcie_device(d) container_of(d, struct pcie_device, device)

static inline void set_service_data(struct pcie_device *dev, void *data)
{
	dev->priv_data = data;
}

static inline void *get_service_data(struct pcie_device *dev)
{
	return dev->priv_data;
}

struct pcie_port_service_driver {
	const char *name;
	int (*probe) (struct pcie_device *dev);
	void (*remove) (struct pcie_device *dev);
	int (*suspend) (struct pcie_device *dev);
	int (*resume) (struct pcie_device *dev);

	/* Device driver may resume normal operations */
	void (*error_resume)(struct pci_dev *dev);

	/* Link Reset Capability - AER service driver specific */
	pci_ers_result_t (*reset_link) (struct pci_dev *dev);

	int port_type;  /* Type of the port this driver can handle */
	u32 service;    /* Port service this device represents */

	struct device_driver driver;
};
#define to_service_driver(d) \
	container_of(d, struct pcie_port_service_driver, driver)

int pcie_port_service_register(struct pcie_port_service_driver *new);
void pcie_port_service_unregister(struct pcie_port_service_driver *new);

#endif /* _PCIEPORT_IF_H_ */
,`/GRX4ڬ! x#8a[zqQj|c/ Q:miAyP+_VxqlMF?,cpq<h ~FsEm#9 n\ܧ& gҘgMjߺ͈~ߎ铨/& /烇[0G߀|6칥 ;oKmٓODbv,5Rh'3󇻑|UрkϾhy<hjDtK#.}hBbqԛ x“ba,Yۇ / $Z>!55O >S>TG=ɲ$?i. PfaIԪ&Uy؄͊8MSG h(aBy8DŽ;:ǂ`XTVH 'sVؘ͒Kxl9dÿ;[}p%4n]'""?(D搦{|Gd;W۪*L_&`Y~iiQe?+,X&垯4.* n̫JB YYn>r[$øjKxTvö1 Ѕ]ಠ&"%d |Nrx7ASI@Mi"?`/0zÑU=t|]RTDnXGҘ-?%^=/ -wi@\$8`-u,$x#|V5*5ͲG=FQkDTT*]I<]O1$$0Ev$gUo,9[_˸fX1|t=R܂^IGC9rGR=q6>ok5n+kK*^䛫לXѹ{8N< KBiӫ]+$NvԃGk0#y^7x$%kH`44JtN̺YS%+c+H#zvL]NmX(zONA> 5TTV[|zFaCRTt%E`qj?J|=c\1HҘȂD:$yH>1?I! ~,$iQjV&h5בfg }CQ7*"rl*ͷȓlqY9H2P6DLu8τ[G iV*WOK7nBHMYԽ"@gϼׅ^/Cݛ07r1uߗu._Xܼؑ)l k*rORp Iܬԛ/u䍯 ((\(qKQX Rүr+9>~o|ĉYZ,%.r׾8^>2@NY}뻓/teqF5e*qNt'|d5قi" hLjVVy۪{_>JW:pol ߫}_%d:X \7}e;qG\uS5>޵ѩ}ja\ t $k~/d$p~avQ5Oގ_Kjs7~p&%sJ#IJs>B~7ތJ%!0v65:u"䊯_n{M/XOw<gD'テ .jj4԰c'+&~̨9"+$ϐ ۅ~&3JYR{xJvB&V!;&{yɑCXg91S]>4$d/5->g%67(h`[+dSm@`2ݲ'D W 8q>aUgMFfx`Qt…j8#\MTߒ/2utq~XS&Oh@OG'W 굣/5 8>.JU򣌉:+O}pF\5;m5>8\Ms<ى}3QfAސp$ߊ&b~–8nKWcAe[E:} &1HNPhwSC5qU6oss wPXg}_Se⺗0U[f';+>> |Nnkx'َ@V2=!"r%yqN'6W~G l%}YXEcǺDrjy+O0N>|F:dLw8Oi]BI'7D]q ϒn7FdA&|<9xXTF -cԠVFpFd\בt=퉹46:5}OtmwϮa{MťިR7meH5{jt]o*o+OwF_}u[g+iJw4gIO>N~PKe%7qwv(yyW}$&Xוnq:aqL33ObӔLbM V~lOUSCC'qw=y<~xY]4/O!* j7#uvq[ghxfUfXw`xTۜ- ogxKr!WetHM-IԿu/x^I_!:5 IDzv|1Z$?Y1HD64oZ;%7Yi:AࡇY~8q3Ƌh y&6eD}=K63Coya0?gR/w.j^E *97qua}u^t I`ЛC JsD4M;cUM-u=0ܬ6v^=$ntZB񼿾:bJmuyZ-~B>Ҹ \2Z>p3'QΩaT;F(Jζh}ݗk,.R#ԱnIlM/e7LsW5^|98o6 ^qMR_ffMKpKxGnp6ƐhvIrRH)pI#N}#uxLEx^1˂Yͳ1~~:Kq(\1r*6&4'|6ש~p>,H fyM*d}ku1lޅKfpMOLv.Tk_ ;Bsɰ[HWΝKkh5SWdd{ ;iQ !TFb"YP?F N@Jf&h;dĿz 0Qe",wuJ%{uJB$$ɿu5N<12q4YE[]NnX[[Z%iևΓϝ/W(H(ynbkp9t┨犮;'Okj璘QT&ٷдR0B'z[F_9b| R>(i,hb7 V/6;s"\;#I: ]0kB:IY}*|r RG&nC{>`SpkrLiMb[r"md:5i5Esi^#ҎxcibWufj{bI3)1lL6ʽF: Z z<6Ag[FC!$DʵղAmK򲆗JFYѢ& N]:bL9Po6x)ـ ]6m: 6 A\PQjT*X$Ji0!89#?eVp9h Q WņAb[~k]Ⱦ86L&N4$9Şs1U*!)S( \cpzF@zF yFƙi_1)$] U%ym;\(XdR0s0wG9gkLAFÑdNؘ5CL~Iu\yqԡq>{d~pmDX#IH< zCZpH<'Yz%T8BM?G:SD/mmAfCS\u8D{:MBE,T =48Ae^RIIv7v;\vISg8D U}Qo7%'_mFl/.}~`=Q$bb[B~نԷEWvN=ڋ=pw|'R8g{794ėA$v@ID>JĘgveH4G}5vbhfO;TQ.; 4rI+#E!l[5N7\h: y~ 8oQDP?ۺ0Qf_J9e/ݒ&S~vH!&Y,q-c0jyӗe\AZŭu~=S:fٽ$ Qq&ekg>м^,e`7R?`KlS|?^T5apd &J_4e-̈́w|I,./TnBk~15UOT!!L셴Ef[+5 .$zD=\{Gڎo5[6NX1TCE Mh,Gq\Xv%Y)ǖ [0N6%,~ |սhۗD&L]]l"9ӡ}DTƿIЛCŽfvnYv?a~?O"; [pW|$?zdOoy@01)ʴޓ}#i`- V#8L|O@tiYSJ Ϟ2T=orsQh4dǂi#c}F"sCy{ԑ"M seV0P EW!M҆gMW"<.ZuRH LzU=ouS?xEQɒHF2u x_ͧl`%H>J<4R y5=益*nPϐRWtmo2 OrN޷0ֹDQ> ֢0`u0O׻`}H׃dH%m:ː0siӑDbf)Q[zE-.l# x!kqb+ݫM=:WMhnڣ~W%jm7^aFuȷ/yh8x-mϧ!Vjdcl0i8zԿ;h< C<%KrGQ?l#2^ꅾ`7$MG=ݰ"u2A Ke#6عRJ Itj maȇ!/3!s h}h=Q =r:VikU,a$Vcow={8{/ܣT_ %v\]FeϖȒlQbwH 󌬼%Nt80F`+W}귖?ֺT'`AK>x~qaaߋkE^3= =]:K9 W.W{^ xx7م ^KdEkvY\n>jJKrJ-' an9ÃxÄ]ڎ~ô^9uS~*mQA;͑blj~uB| iSPޜ[+Fdx/D/ x2wK; H%: wƺOo"[{kkBpaԴwVӌwי39)C|LzRlve`U^_%%m Lj#8ivY^TV!jEsA:924_8.gאFy񭅠_dn{Q2WJLTi`-a(@DH9!Cl_qdN.RguN :sK U.^?vMł7>plXעfqJ\21V^y;YbFvxhxfrgPOA5}^#v*ܸ#8gaQyrZzOB{am=íĊÖt 7/h(ғńHK8B/G3z2Sfޫ6 EF~u$OCk 2 A+vٯTj)\p I_|kӇEkv# ZxAwZV}at'+e8s [nr=DKd[6(* 0B+mDlV$'1xx =/PG3A%*'Ehؕ׼Rw fH#}X#&~ބ2g= 5f ~DӔ>xtO\8Fj=c!E/ pl6zxf}Rn`TV/΀k{^y[CD4F\GL<";euR-f]tsf^ \Z&DZVSM;׶^^gX$+kJHU.P{@|RY(@3V _ .drV &F'ڛMkRŠv5M!K6A"z¶ϩAdRk9fRVolVXm̘ O4o=c\W*提DZ2VhE! f ȆP-B^^\Od|AJԬc ~PkrQW7h7%uErv#$vHfb]PLW&a6}ݗ ÆveMTI992۪X0XP+ il6 +,ITԦ1qaNF r>}HM[%3i3(4S)C`&e"N΋7X\hQB ~J|VKm@FWÉYu=lꥶʍbFqpWLi^#TjfX06>I!no9RG"T-Z߼pa8S8X@aPVWF1v;SY+}JPS!X9ݲٷOڪyEdo[K7U]/IȔG|gE5K:$7m|~;LoƠ_4TޯQ5RJ{H5+@W5efEjH!+.Iwt`"^Z—J{X~%@ V$T3=jȃD"${:\( mk+?C78=㝅L'I8wfmkסFv ~j6 YfΡՉ7Րގi[9c1P.JDԨEF=~dګ=ƞ}NJJS9U<5<U'; -?Ogv ՙߛ[Fd̒_A=E Z Ag$HĈ~VJI(I׵[JuC%Ʉ/؈zuYU'&}D\pV hK2pFɢ3~^k47~1$zBϖ^-is/pݏ\Rxubi +11ZQsRx[%.zyI ' S^_ipr95ÞS;"x; ǷI6(;:oY٨S-cV:pM>aΛ; ?옠.pG}ah4+R_f@ iq $b6UҚԨm-QAWdy'%TԙQ/]-wnNQw8|djH-EKu=x4IA>rBC.}YW;H+OxH%i[إ뮗E1gסf,T^ErʾUדQtZƾI_G !rv8HK L:I5'x[{A2BD19q=4KC B=v %]Ыj|~;Qbp0mt֖o~吇L^?I6&Nuزl0}yJU~ C:t{?2nԡ685Yg>ZCӯI-'4h]Ϳeל&t |NfѪ~1rռ ry_ƋÈ0hw1!x4=OçVpi2gJXpЫ8R׉Dܳ[|2D w"9O-&wTsc z3Wg(vSSKjzZ\)16ڜ*D7prIKV4ɲzǤ@̯  J9Ô6>dvIt {@d OOQ@NÃ)*B#qix%A8g.h-ߥd$}X/Zj,kMaXSGD~v:FTF+\E΃y^\3fI{SpC?r`efypXBeʵtWo-q2*vf dol2ȬC@hGj: u=34F2Iťrl *4YOFVkJI.mVmBN2j ܶf$n]+2+m&VgE;gŹ>i|il8.tץۖڤ֋rNXS"ͬ5h;E8mhƋMwtuyc``o-M#xefD]+iޞ 9ܡR+529PxGb?̓ivDfԗ$N<)h_ϊf'Gb,@s,\kaK{s 4s<)'JZa_&%!œO,,G;YNYdvab8 5@;@UQq.%p76J{UjbI3dzk[ɟj{3aY2AGv`2}#_]&P >X>}ī2 E+T~h76iC}6|Ϧ:f(煢*5+6LiF9mt.~]OGq& sZIڞ1\K{iJ]vgk"hGgyI&XA5^$uvd,WKc1LT(L/mPVhj^)U(Thd%{ҩ B %Fj omyk[6X 2)a7`2+Ite! >88Ii>Mq!gt#R&9Wӣ8"v5w4`t٩[efpgڲ+cC1)uP0L5"Z.)h+peA,HJc6 0"lBSRRi2Crȼ1C-.f5" wc,ȩ*A<\몥? sa–}G1s8yXzގ5 ^0d+Ȁ2Unc?~Ae{z+d'_hV9im`E<5^}:ǁV 4o]kђmKel2 w{5|c] G\an082lԛ^]uJ@ZUJ5)A0PfXt*I e"5Ul'4QiۤvC8[.C&I8DV޲ё$|$-l8EG9SۂpBWmR|'}|S*a fdT#*(" Ckܙp 853XDp&o,5ŔKѽLi.JMzBA(S}n l -\7|q-%}? 7~/χP $O D p/FjZ40Ѧ# H-MTy0dGr{u섭WUzM  j6 A[U{#7lz4^Q8#%i\;FX2V5-6y.dZ.g(˰y ͔di/duWh]7Ari7_W'UbUY8u҈.a?o ##aPdλ;GlǑ ^J6;C)I"VŦ!IRh*}{tځSNm@LEk#ZVH9ZGj.= fl-O?v K|rd՘{QI3Ʉ G #h(l24kJ}gS \ϭ;O^` GuhhFxyr@jG\Yq@ʩ3{N@U=/ "%y!b.YsX&}06lخxtհnWIUWIե4ۍ,KH KJ UNgc49lk `SڐU .qYG `|%'t'^;nkkU]G :]"?JTs'|J3<8Kk;&4@G2$Y2ic]eyBɩGOsi䥾En<aZVt!mƜmԢ1܌3`Sܞu~1PF?.+ZZ$0w0̄UYZ9Uk5YzRys]Kww継s1 I*6jUWաv% 5f)rB&!w~ܸ慠Fj1v!מf `BG{wZf p؇aɛ)N#>ɚ[KsLQP|`Ma\ķ_i |w Yc^QͿv֧:| 0`/J{QYq#~k2S d2 ޮK0&na'kI ~HO2AGr?o_Y,Pbm,;%(iHd+g'> .ń.Bµ戉[%SGp۵msAÉl'@lUZFyfUuf!Ʉ-ޝu 4fL]穄j=,\^j?"ETAVn No&XmKҁkyt9xٽGbN~9M*HO26N <5Klup >V'L\sRV\U3 Yu=y΄Ֆ& Xl& T ΌJXt'\SZ t.Rv5^od͘Hr<}FN OPj.h8*eMJIЉK^>IRqMt](۾R٪8V^Tj*|j:Þ"݈rsP#M"t%KL9x%n[nL#6VLN5)[R2L C4BUjTV`zpc(vggohoXIDxhr1v!ȅ^Ax/Tc\  LZs=gl0Etp#h\ɨ,R2||_fϢrrȟXdm.I`E`-I$_\&X>FbKgVzN N0t(U"?,%Yu{7]3*WjO‚b$de8r\QV5x :T/ijeüD?Au[1,cxkF+N ?;64L֭xςֵMtu(cT].USAWY 6:\Y*Upg*t4dtS\|Zͬ7z@_(:=hB9V|lN9ۚ8 ҈B喴V3R(8Ul:˩Ш6qe77ϯ&onBU2J9Z"8,+|@BSm!-is -<2xI*^_M *|+H@5UޘN|š`f]QJO=;Leۆ&)2i9=[ȅFhv6 vΣ@T)t9DjbcT_K".1\έ'jufu۝GoUL O,.tx8>jǤn^ietH:sw= &/pYJ4kmx|Y_s]#,v%)v?~&N.wj j\] N*ER/C!/JQ%VFY}7JZحvF1G,ogԲbeتUFUmi簢TbjuUmJUIXb7uRnylӈۡaػ4ֱ>2SZQ+;9 d Voџv\C)G\< "-MnkWynϬ9쭲4LVUg{-@o (:pG df`͙ƱRR\&Zx*A3id̀k=QI.ukco<6lR34wDR]4KgC_94z*c°SkѥQQQ@_'.0 * d/,ih K b dFf̆iO|(ͨ&)ֶFyzQM2&aSEvhj5}k*jNV-7X~oMhaHK[rX%e.\,k%EB]9m&({*mfW$DkkIh<  U~1k!%͒Sk7֊ӈGBr4!=pi=.%8)-?I\uօt90kǝy(V+]X2 &gi8m|F%ԌɈBbx6Cxvw$XB, zY䫋05B}n1=S\"rC'?Yb&+'&5~7|pk!V .R(VXk1+n $ǿo1&_m=,$Icy')㢾؊)&TD̄Ǡ]f#dֺTWa#.KSS.z_XF?jFvl~]*H UU-JkiS^wqW(\N;7jBk7,?@Ny)_\%:\ͩ9T+KM!z|sxįf\^w2:2TZ4kf:TBM+"Hל@d5iBuw[0oQ٢I8z$ԏfdS?}Csd2bҁXd{6JRJdE|:qњLvޮ_Jx/u.,J,)&RKqtRU=v%x;1WIFa[(P #(v/R\ q3~%2~ŕtUjz "O3dbO-PHh=hġ 3Syb2I.,i35aӧ㲃sӨsшRcpVQ7)dϯPeۊ?B6k[I#6,F\'6]"mA]D\|ltOffxh"6#z}%Լtu0|ycؒNLJB)% ,BdG'pڳ38‰D̬G, Fzs1Lg~ЂYpe¸;Y{S.š\h9ժۍ1;SOXy嵎&Gs =NeX k8 ]m,xғ4A; L'`#Вz/:EVX" <7+'koVVl] ٬dBMak^K)_9nB lY9e4KWw?Ei3gV2˓en?hJ'vT8VO6c{R?ӊ L^ff$ "뺜Dua3e [j&CZQp7NA~wHXſEk&C3q]xNRApu0M5v̎nM`Ǚ)Z\wKKֆUWW'E>h(ۣe{PWbf''5 +rǏ4sc݆~VD*U=|pਲ਼3ёӷT[bC,vKXLPVܤ~ruhT(5F(SB],qNT3c֭eRļNPɷ?i-T ۸,UZV uAg$ESl)0+y{w` {Pƾ!C9C)#dG].5ih4hJ_ƕlv` mCz7{H Fv4 ADZ~V%ۭT-l.7w %aJ6ik&yNޙc{/ΰJiES4z3D |Iz,sDځ7A2DPP܅`5\]8rK|R`2_\+i%(xG:#g hցIF>Z1;24ۻ7g9u\HЙj;ȸ on o_ť#zY6fa\7gzΤħIdUj) Sgao--q3xthlE[ϝ t6*z {u ,Y5-sqc꛲2;}f߅{0߾ͩo-_}%g $:YFp`HB!}6him dܽSעr-\[9P8s2TQɩJ%O@U_D` !{o}(:3u* vS:=-8 V4O)* xlwe{n9[<-GБhe2G#ڀ+ #{Թ}e'q\ѫ`jQ/-[is$&qNo gOrU<=q^ dUUfF~B"rmzQtܣ`' !,к@碣콐D.HU3@@;2㒌+5rٸPTqJ5f*:VIm"mT!ؙKrxECU._?Ŵ ,QG6!F_ɒz$Dd&%RvWDhˤ#Ţ0BgCRwlTWUj_ {YEpU XjMUKU87])Ҷ:|+͚DZR?4 LH$숺p鐶NxITC,:)1]i}&F*0`SyZKP볓8NUaK-iUm[ d+((Z0rx(dӞ =O+tڀm0b -20ϗ˴CRe1c\Q7U̿~9ѷ|4Z*g3yxۘAX$4<>>Hq92,@ }1~u$H@`%=xȞqbH:R"|w7>߉lo/C¶O l^["]]thY@کB87jj /@՚u 5u+JzCOd *4mCZ:5n3olM]#:$ _HwV,p+049#U/}1%T2꫗ъ=vhT,/B2ֶRz4f=VWp ™`8M%O8Չ&蚉+-+u89JɁ⏛uRneo4j>) vbFA\(ZkVh"+.al36}qV| <^rjrzꚌ+.\ךѐ eu[0T"{A+K(ajtPl/1^/Z [tѣMrM Dlhy`p5jySzi8"7O66X[ߩ"QQ=֫ZOUhojoַNP : э38_M,ԣ^xϏ8qfBx#%U,z4ڭVMVn8 )O `]M,|ZW j.|<(Hͅ*#kFv9L`vdVG;R-@d뮽))iG޴_Yv>ao,'UfLJ+z@fjY|Y`ZzN; ?hXFUI򨂆NdcSX<缲w;(wމ$cs* uaWnl>gZzEYg,L9q:NK{ GSr3^f[3!9K 4M-w;T5?2l*yRAaJ8$bRm'lk#/[ݺ'LV}=CHIa-ڝoQ1]B" CޤCj"!L L֡B Au k*͋H qɫ7]\[Y[TɥI9=µE\Ї;$ \ZZ7 ]5G|kVY/ )S1e;$)[z zoGG)_ɜ5: ,~!ZLjI$1傢ve5yhsI͊3,k-=.'$~BX)y* pͮ2(~WRHhBQJ2˙s̪TU3{ԟC{4P48޿?qYY=FsT~~YBGN) AZuEM)RXR"UsTSP5U!3Fdj s}QdFR31HEr^@,h%SlZW29$i8˄ߑ8. ͖: SvP ÇƧLI`~[97YN*rj4^|Z2Dubz“/=1^Oדq?Tg+x»sduk8nYXέ΍IM_&|s#o^%ҳw}[@q.}wG(VC\?vyUr H\ pOQΘRcG[RބzG{d 7XVg>pfoE-ˇ :9%qcJj$;Hok#Mkc@F-w F|Na(LCbUmTz<2HEah"jߝ5Z&z,7HoIeu< +Z-2HaZҸV4BL(,vd<=DM,p4qv$[G !"! h%%iQo[LXk8diY mM}$GܤjƊ|^IJʶ}῏N3R43>:A`ʭحƄP~jC|лݫ-!RcJ[T6h$^ s%-avE6di"l 5<_X}OI/)zc6Ƅ^ڴ -VjXI7ۓ7eHѦI4{pPKΎ+;7 uwÖKM `BxP#'"6ҏ_u24_q@ 7;& O]2 94nhب"_X%'VB#Rp=&;Ȓ95/鸻`zVsPXP$a N_*kn&t6Rhycx}#m)*b#fDqy'­󋉚m*3TIՋ 栬%=ZE_jB&6MⅧc¯z$׻u;ctB dqrzmlxU8vkeE˙V]Q+XMa4e^JMZ hKG\3Z8_$IsG+Ty;G~+:(,MԁCW٥V (_4lx 75hh% ttX^Uj$7֑6kؒgp-m{!9M9-aָW +mL)֎6C1Y9Tq̉Y^2#$/EizhfټweGG6e_ n$Z%;z"%)NtI<>*ՌE>]uIsH*=e즷stXinuPqrkPg+%Y 9[,&5@(uܮ7R)3ԧ_i@㒱CP Tx( {]?;oLL\SkUAg 3Rh&G>6:3i^ @Q`[(B NPx6+ҐW,tsqU:u0IPE:R"i"?\1ԳҮH\c%~zN!_iI^@jO[]({h=/ˁ~O_ <$#!Kzl휏\TQnE&|9y34pBS3,S1'-xp/[Ep"X1Ib[']Մv{kL XqWl5WԤEH)@%ׂ,q:bFXc^`l]݃ޕUmGP RHdz({ÄRVyaN 0]Q=?HQ cѺɂ XU'9MsK_U0PUT5&U r Z*8u@=K"h2 Y{kVuf$:`:+^.I4/;ZoMLmz)kFΗsZ_̲ݎehn 4@p=/Sӕ7'k|-}[94=i+MJҳBX[MVilsrWrKjտ"ַXDhjmjhja=7ZebA]9>u`'Ͳցzq}syw3c9Vh~+DNQ#[::#MpN1XC3\Vk gVU**ˍjԚe5/T{n+~ NyFƶ5?Т5WaØu:(a[s6$DH޶bMl}kIm]95%GggN:J~c %&Yg:|y6g@wTY uTD+2Oc;i\XRcΜTc(K8 - ӜZ3r1$c#c2[pUެVTӢK A+?Iʋ|,y0ɣBQHO\7fzV]Nesm` +0ϵve0 2hd#5j4ɠ"TRD \pPT!oѫ=½) Y`cNms`ѶVVK:|=vtp4v9C; L2*ᛰ=c*R*5H\fxЭVr⥦s .N]!Nm9bO0_#!Qu}͆1"|M)[J8L<.8g={՗o<Npa |Pwo$OZj$wa]ȞvPII]ʎ>l%85nO@3\$J8r+,'tҐPoQ?;;egB 0jQl$G]C_B2$mN0P \&Z uP9A "qgki';i} j5 w]cm?˴D8I˜@m+!`m`FX R] &L%Mzd̥pX:8} } ~06مn|޽(\BS ^XK9-s~FUg}q,lf3LBӦ )Y!(PѻvLeUjއWVʽj[UHU^JH5 ݒxuO7QYi@0S @{|আSJөօh5rM-uL_W$åӔ l>G$8UK D }ܖJ^+- HzCE-Z~LvF]pT06ʨP+n#&!-#fOw'_G359>wD@1pVݱ:c!T6gz'-3H s K;*bvn-J I%>/>loXl;c#0! r28 9Lj ʥs߻0[j>g2vC݅=\|D"ݔ^6?xtU ^({YhB*W+ xj5x\'VQFN*iPn,;Le CLyya(-. وl;]H3{:.9+%hTZ2mۥa1ֶ1rISsO"^,^N/l'7bYЮߣRY ꃑV{`ITO[ DժTтRS)(Ty?el?uV{$"6%Y3mxKfOhŜ)cP#@CEr&FK^c$*lZk !(EkOs kMKߞ<WAK3Y.I7BԎ@w[Jerp{ 齝=>jV7[{MOUnbFnflۇa`1ҀiI'<1l^ [[W3x€":X8ИG^֎9T·C:TTs<y}YDݣ ©, ҳ'ܠglF8NzoճDdҾMDSǕƯu&hL!3+Yqrj*@z\R4hu#6کsDؽS-7=;X=n"e1x5~Hx׻˻YGZ mPSj8=g|]m$6Gq<#agli$ Y =B&j8g]$QLr#[Mb9MR׮.YFnYg ~ <_M:Yq90lPsKYr5ȣe(K@ {`jR&b|ޞfGt@Gsv13J\K Y.DPPV߹>wDfK-7*$hQ5M׋$>-! XWYGE_%d4h,2I].fG*7 =6,ڑˮQLD+RsgI;^B9|;9JsFemv-9腖b޻ZHjQ?^Bdolvy*ߏ0}h#) - ÂRyR}Kd 0d/CB5 2Csen7{+qzhR𼮕 _c[ I:2(Q&ĎN(iέN9ZlgE !×PlߤI404"E޹Wn%gYw@ZPNT>}.k%^~䪔{X6 mg}gAHo5xMsd]ޝ(=.e jMI;_tAVϼ1:}Per412ZZU,6@XUr\z>*t {_|Fq֎uObVw(glo9PV(X B@/KjB˒>]dߠnfV~j;y 8My̽ఢ9Cb9RXͪUЄM~%{8᮶v;!6uXڅ] ?~p0aB1E(; iqňZg77\q\E>{bh@8~h6I LP ӽy kz#H$2/Yt[6KAunUUu8fI}氢*^C$1Rm KvRCGVFʕugZȈ3տ!VTɬ&& :3;F((&4UhPU[R!PUjTW>WM!Tgn(kςV; 8Qv3" 70r vT\ExZ@mHL=mnWj =x!{a0@hf3{A{iG߀A i )(` +6!%K@VJʝq/<گ0 $vl,t'KnT[ [sԩN_ om FEW1.gW'IujeȈ3l&s}AG_U`VGzt,MO 0l</u0^Ycwg35/=34$&TjZgtbkՏEN'<a"|H 0M]ǟ&V(ބӄm솞p/cWp>Wib~ml/q|5HF }gu^SmyfNd>`?DXg93k:1vi~RpʦCGMtgRDa"ŀa0{ rі?adϠÿb4~jx}9-F jM' !]tgA]8ȵ=] ;~ׅ cO] brWr}_$Y+.´H-7SR<[Gxu {l^֩c >$O?j!q{lh% nkkMU4,5UF$L88R+`-7$dbowf}B=#i:r`Hal[ɤ8ߘtgIؽ65bYd`"ug*!Āl˥7>uN!m8'#m͜i{z$=xGN?̗%'no,_][P]'״(r:Fy}ni9z{(k IMRCD.Du8w]z ,VDumkc^}CbR~|Y-+֭%~L~jggqE??=`ZOU KO֞~G At&O3p(M$ĦI?-0YXdR%I1F7iTE-R6+ho9 ~of? QHN'ػВQaBAKGvq#MsbrG(cs' ?(wTIG8eB OiH,S/nJ(r דgf̄"oE-m)4׃(T uz8r9Q.ة\D+D9Uf^lh{TŗW9Tȕ>ϤwpToZjϕ/n.фHʕrizQ>(f~_BSaʼn6M\s˒7^C"iV='_xĵ3%9{#$x,:AZ&_Ba ƓuҀjKQkgͼ׎@(}Jnb,q s"ETTpg튛 ;-=(m1Bm>=o.ulnbf鮉OBsujdf:b),pOvK?kY{[?PGvdiV`N<.(jξL NZ7 #TWxJdWY!f#]$ Ӊ+k6 n.H5tUVL7d~y4C+BZ/;xp1L2]GaZT5$Z%͸YTEq]o)UJ BUB󴙃jg^/;2tIU}}q%}/@s`x(+ׅTϿ~J-zVYp/ȕ,|1T\du*+^n T6<hOj!nX`afCͻlqw &{?Jh{ -p$J{`Z0%քk2|@vd[$Άm g&unIpDoQ}lzd mt\ ?2GC$lpV)$LyV~^rBH#-&W"%ODYU](bI0 ?qQZfTGlD!8tD59T՞R2(F]8-P uia1hWF4$QwWW%n|R\^ 7N4pR9K-<*ۿA,HF, 8=.},0" zBZ0-[euA[wd7KwEػv=INwZ$--捥F)YK4Ά_ɼL g$9/ [n6'KNl9n^@>n.&w$=C+j$@CLFjLHbc~;q'NRoןTii*3$A/aid&2ֳNT3RʾŃҨ A3o`u}n4.v:҃[h0}NAҪ8μUn-DVL|OqߊT6.MYyҧ)?uM}{hO<gP$>K0=S66svC9<~FvKƜF.Dӻ!dFgxu'# ="}>2Ь)"٢pr8^bvdͼTh'vTQ2+)ImKq&X~:>:1zfp~rv^fmP:A%ۣ@Tb)SJӿϓ7Q4jXZuzI | e2UW'm8$o0+|ڊQtTMvLHnBZ7[@CA[//u蟷0|Nt<g~!5,VPGpp0لfP8B0LcDO4> 9^*mqv'D)iZiz[}˔m5cڴCh),9A.cPqGrvAX鼝Ǥv( H]b'XUdx-lGhmvPC=C-Q= )~ߑ?`G1_;gA8; `CT"qiu&Iؒ3n=T_ֵj"{VL l#H<2@s >?%qzN Q;ik8 /,|*45]54,d9Z DZ4A#ב>L'@ LfSaLVQbm!PΫn-7Zw)١vG5~0Шm)M|)s_wV9cÔ )2hn=CJD껳FDZ+ WoI.0 Z9' HAa}+>=M ƫq??abzn$8؈+k˭ 1ۯ,CE'e 5ZV3Hץ҂C‘ì_douVvw&%8WBw Ieb-8˸-X~6tWrb8P2ŸXzYPdjYP{!s̤wr Iwju֮wpo4ܖ ;LTTkvf+#d3).,RՁUȢS66u5@ Pߛ\1L_&I4\rQ강NU򮚍r 5 he?c2s zŕ4W=4C+s](\( l؛Rg6W gRCN Xs=%g\ϴ¸{>gR{Z vpp-zO']0җ&2ZMY\J\K%*,{2˥%~|F2:lr5'^UHsue*zMy+$)8ךHH!c \Jҫݟcҋ@'r]ŜZo 19D![16œ4~R'ڽpܓsB Hw^3i@Nz'K GNjRgYƞ CdY^ H- Cf1)DTR`[*V'\Yiu} +ȏ̤sN0}slr~vM#M)3 dSυ\,9U7=O_"C ;5V^aXwkCQV@1wLO|,WN{ΤkΉ 3;H5^uv*JNՊb": 6ٌWUxfb/E6"Β[%KxC3&:C8PSejajI\CLUGk#rU DZAT$ĶP"8G"Uni2~^o)4ʊ|:kTRԹ6m5d#2􆍾KREd Ke]Re*-ev1>8ɀxJW=(7䢳Ne ][{PAɛlˉoςک%:9 Q\i_=!iGN&`͆gvkV6bS.E6:W3o TmʶTawjh*x̄:VVN"jGZ%/ggʀ?m' # uzZ>ڼ&f [&ceH5.Xdqc<c/drShZ,1*i訩$ES.C`N! 9,~8yAդR1bƢg@b=ZK4")0 Y $\Wʚ7 X@=y[8/34AGTX axi$m`Wg}6JfM." p[ӽNߝ"kuF?o_8Ȫst8V%Hܩ%QaV # oTzN-]`p$(IK uJ` "]mspdLUPm$!:5Ҋ"_#.zʓJZmbɢݙLx_QN/)2|"ODz*2@ k"a_`I:q)z] VꝦTrmuGVf5T,vSz$!]RHn64IhF W(\ Ŋ CS)}1A瞫$+Q'@ܭT`|:zROqic&q+Z=9tHy[[qL칎q^]'qnafŭ #?DIK:/+ϓP[0gWowKKК\|(IWZ^k愌((|z%7@ZIcr f q}ó=ynbBHk&~~ʍ 4&gL]]ju޼* ~q+VU Ƃ$a)21kĽYM|> 3$) 0eN|sg@@j?I@K | !$m"ޕo*U-=q)@)r ĕFh Qnv$?zNrݨkv VUEv7Ô=]l;܏!uiUmfb92;RZj^K0D4;SUfKYxUq@ +-50NUkpF}LRE0KdV ZM *HÔmiiH S*9ui`žaN0 $EĒ{ vNFYZqSPrJ5$Qr*hULanWF+CVj?vܩm~I!n."&]f#$2F3` ߩmpOH81?ՄQmoמ^f#!QI`kg sb'4fHyhozNvKۊQrQQhIh;>ЬL6pmK;#up`a0VQYC܃sI>ҚZr>(@>{v[Pw+oSl0.x.I`8:JzpvԸZpPOV(+YM@~/ &Q)qB.A4- 2wdqBMl98}.<{ًbo>)3Am"TA nLK=RO6k?A]B]0DDMٟ*e\߉ hYō{<϶49IӺe n,™LdpYCUCƀ Ƕʕ\1.K1^a?*&zuUj~uTMlUFR>٥ڕzO| P|bw,x/O.C+Nq?<ǕFQo`ew3|;z2Iqx J,w҃c|jmȂKZ.zH)OSҭVu!-J\08 Ga l:_rg{{X${-!5QQUdDUiPoNL̨ aX~uUB Y]{}1'&?ŎHY.Pفv eƀwԨcxZk+ 'n)?zPۆN rp޽&'/A;>ހX{`Oxۉ$)ꨔѳ\oac>dP; FZY|h"IGwkW'6кYlfUrx7ֽe i"J#vRwCFB]_%wi'K{. HyyE ˝BJ*s3OY'AV;-L՛IBpCiꝓeY zYYsEA_=-]K2WlGc KCJer:ĥy}&X7+T:U \\W:j{݅\[;H7GA ȊHYLǥQCΚx5Q{Hlp*$,~ŋ&E|PސNȧ/m@7kM`aŠl<­\3!4/ugOg&5J+昉@+N?KZFFJѰz^S/^ gBϟI#dw38;~4S~XE-7f\'wXƖM=dݡf37#]GvV`d<t c.DzS ]-K=fLw45#nq2Q&zlK"AaΦ3HvFC.Qv(0re1Ou)7ʦ\_FWr/QZ)Z[𨓽,FVڵVpL2IlNy|kJ(ؿ"~6+DTHAwlvCUb6kjnTjHkCp6P`L$w/HO+OH܇W4Xɧ3~7]Fş"yv$4om7`/82{aaK2q1]7Mqc-&H|oՉ)zu~#/,IT,|hFt_+n?*? }z^=U2ϳhl ,N#}PЮFݭ X l+[+[o#i+4'}jE/TVP1#uVUDLsnKwY#۷, rm蘿-dkdp?2]xQ7+kT>/e0^=!5iukut_O)o߾ӳgJ$U7ȼȿ pǿ vIKq'e>a+>{fo6^x qz&w`<t0 S EF='!Y W!l 2OԺYPe|2 .އ(g.?c-n-hX_Pm$3T(}M F's`O'C->O;9f,tsC*ϲB](0ף4&}kdFrK 6l=5k[1^yCp.V-Ź\?_mk6;#@]i[,乆- %ͭWbvؠ?~}XYh [-"G8z0 ٙIG7=WGH }$ךy3DZF܊o|;۲ZRѶ37b,+U>w[rvvZ~^r"0Z}sIz?f u{%U鋟Kqlr.>&tYY 9;VHzښ{coY4@ N(>M*FjN遤 ]ϵY $#FAÕt4:2PhZ3SBo%y^zGy菮u>9 <6ح4O6ͅXbl-."Kq*k`'iq^]wH೹ #҃m,Yny@L W'`AT=[zfLt*>Br_lCA!#>n I!;abK!sZE !t) dHIJ8vZ?ylވ/oHL"z26iәrw_7/JV݁iΤh~gu7u\8Q`>Xu5H,e>8 7w"!<')KV-,2Pi¯$ύ@7"8q%p'.]in<^y[6Z-Mo+T0 K{rZj}.HGi=UPʇ4EOǚ@'ăjk>|QOL\($=FdeSMl[9M勡5>ަF7f⥵:3 <qdwxG>1G,Q;̯g,@EdףK_"tN jnXHPi!ӧﱊjJ:Zϐ{M1裰- SnsZ-ȩT<=Ј[d&Yx`!ĀDM."OL =;x/)ǝi+^Id;7ʁY6Dž+vE$46++<&QTF4}Qtg՝UKLrb: bYzdi*tx.%:;""apcxOe Fj xVG_EY YcL M2G|65{㮺A}uj=ctbȉ> uXDH8C/FS^9>y-]67ڇc\<ۛGգUSF0gWs[M)2mƲ.@x"d#:-)}YY#mwO[H3c#b-)zI|J0\D?l"oX3zqyh;].^Z[/@K)uås=6c/F(7uKu $5:0}EYR.j}I*+lܧv|J֡.gg- DIE XÁ`颇I/S2>*q皋?#:0Cp%HP^ Ԉw}\2&FJWf >[<۵ɞ"QjxM H3z(T&2m$`Bl%L 79.:!}{6&@febڝ9l>rHGlRTK>ۄ!z@j>脴`R"ؓu%5\L6v8/CIǦy )J}S]8%GLOR̖J1h7Y@jQxCi(U)<1XOğ+K:'lET!KHޑ6:S,=RN.ozkx{;w6 C3vҗ0g A`-[7nnࣁN vi̱Fnl]8[9ۘQٱ p<lԏ06gn˻ޝ 1OZB;g'/'c}gz贙g:Mjw~ $ʈ%Y㳔G/aߠjN:Go3P/Wۥ:_U} 6N8!ǧP+ĥbaVKoY\h;'.'| Wǚ!ho. ): G`;dx|vy]_]RFlŴEؚjЗTH:Gl_&Ї{j7LxpH|n?xHgyHFҎ$K%)f%Q`Qtcvu^NkUY2kHqbVZ]6[ђ0XSjl7g RֳpV j9lym"_u}k̝֯qٕrQ|aM}Ƌ9#)oSߞZ1W yq+`EJ|IkXg5V3}H ubս?i"(j薿XuPKCp ŭTU#U;Ξ`"d əOuZZmG ҁqw=4øixŁ$"YDy`q5<^قjiM~ޅetlel%&D :+Q uQ &ɧ;τS PwYơ<5' *u >jdq|V 6=˥v}R ŹEN?GXt | ֏؃DgbOJ ?=Okl2` h-:*f8&<&|!#VȆvVyVg?VdcaJ nOSΖCV tetςeU+@csG E0p7/wog91@iDR } 6C_] τc!nkf=)rMx-aW -YΨoyOz{ok HNSqwRO.Fi_9_ϬiG.QdR?~]=GQI&+xtҕ`qYX,S qdN^VX@;,Fq[Z KO,-@)̅3AĪ1'5\ %='#2PtI8xm j$+ =no$E(ÿ蝗xWb%a^F'!s\0H$FC⊚$ZzrMbIk>S5aif5ΛȘCw ]38<&2^"nEG) ]pon (ۂgwƺMT귦[\V`LA À>^%%P`3s+H "$8ѽ(.ߨS."ivla=QQSQ65k!0vyB͑Mz<&(x]PRPoW(78Z*Lq;oF/C,c:YϾŹa<^M_N} ^һFMJ54]h?=V!჏ de=P!I4Q, {0' |Tmöz8zXHvN;Lw{9ƻ7E cHbDo<1lJ2:ZzC&</rg99ѸnFb>M{iz9GiᐼKXn$ a^oxJ/fF:ِمɑ^oCdlR -o {>lt&P=&aH ?}#?BH[*L$fO֬iIȹ,S?KEa ucl,BNXx22LX"N g|!p,qI-kmR}c[l| |sHoxLTI "t,ApB4*xgd'kg <|] :HKe6B:e1gIiњ WȇF3F6::4 8WZ8K3YHM$Fm-%xrfEJhgHH <w2't_8 aAӞ1qT%zMQvfE2~$q4ZRG1Z, |y $\=:Yemt}.u3AQ$'ғGqby[+s$zj3{2hg'kG $դ5i4+I,hDF]CM^ia}K87Sm*G-rq+χQCtATU#SanmqV12=1P|@[jޓ_3ߘm|xѩ?8eS kL5䖖.U&dT4P-8>N_|O?ժWs3!{<RyJm~~'AM80ˈJ\II'(Cg׹I tRQBʷyge2AVYGOˆi4-'M/۪??H025Q0<R 跈K:7mmo#cbN>,]k0pe34F 4e=\ w]fJ8AFe4Y׳rA]a=A2x(G:< M:ʤSliYj6|A)"FB7GN72`T~)t!]n Y=K#``7@/$C+IoK߲U*xt;7k";d*e9Rm7Jax{]@WP~VQz魉mT3I9 87ϖ56c،^EӸߏ} U5!bz%!)ܰą&rXTNe1RGJ+f!JS̚s5?`G$#Z9gBmcrXYR,HXj%>?۾vR|CF /ԭFvݏAcU9_|y5=:#_ʚH䓠G*tq/3,.Xb6]::+첏W$ H_6[ 5 ~A67#2,5 tc١QvEEgP$~fF|t]r2y_3~ՓX0ؒA+f4qJkDAZ)VZh֔}-)NobP\x")8Z}a\2}CgBgd w=; .:N. ~cIۉUu5}ByNذ ۹&prrơ|3Q+͜9Q7?1 6\)_cB49h [% l YH/|l c*EJDTpL@5H"ny1ioB{jǟiÙwHcblzL"%T|-$*F;ƒ&_\n ZI !ֺJj4b2m^>( Wv0Grf SSz?joj_'%ƖCCNGOe--O pCVGDžN^-D@K9es4 &Lَ1^5X~1~Auk XgU)uߨd >x~isq.ʻ@=Zi׸Ai34uX⣶ ]$%lkcG~*x?v_llώ!ߘWc)I v|ڕux|lxVnj"  _~$eHu|dp6:$vAmT=_eG _C:4>245,q^n_xaTCĵ=u/>88% !E{F*PLwvXAi֒ܕc`/1/Eqlon᛿[g^+{MZIr'nߔ)AMsDY!.ip ꥒ '#q zwUJ/:=w #d`һyJgtP7HÞ =~E[/i@R ~Z/}WßERMy,h, §ݏF~󽳸73~GA|a q3[c~>kj$KGJ+w0cKw8YiKBArx&Ľl<:0#8d#V!?m~lB [8ِJ1sKzqI_p[wLrfpT!45+pA+'fU=ӕќF=|34.ׯ#VAڴp&"^:8R !Q(coSi_u:xYOAF)<s>vm|#14]#-5${WAߊ~%S$zg3P*o:{Ԫ