summaryrefslogtreecommitdiff
path: root/fs/nfs/flexfilelayout
diff options
context:
space:
mode:
authorTrond Myklebust <trond.myklebust@hammerspace.com>2020-09-18 09:19:43 -0400
committerTrond Myklebust <trond.myklebust@hammerspace.com>2020-09-18 09:25:33 -0400
commitb9df46d08a8d098ea2124cb9e3b84458a474b4d4 (patch)
tree87088627e6113c68f237d291e27ed2aa2ffa8368 /fs/nfs/flexfilelayout
parentee15c7b53e52fb04583f734461244c4dcca828fa (diff)
downloadlinux-b9df46d08a8d098ea2124cb9e3b84458a474b4d4.tar.gz
linux-b9df46d08a8d098ea2124cb9e3b84458a474b4d4.tar.bz2
linux-b9df46d08a8d098ea2124cb9e3b84458a474b4d4.zip
pNFS/flexfiles: Be consistent about mirror index types
A mirror index is always of type u32. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Diffstat (limited to 'fs/nfs/flexfilelayout')
-rw-r--r--fs/nfs/flexfilelayout/flexfilelayout.c34
1 files changed, 17 insertions, 17 deletions
diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c
index 1edeebd51937..a163533446fa 100644
--- a/fs/nfs/flexfilelayout/flexfilelayout.c
+++ b/fs/nfs/flexfilelayout/flexfilelayout.c
@@ -715,7 +715,7 @@ nfs4_ff_layout_stat_io_end_write(struct rpc_task *task,
}
static void
-ff_layout_mark_ds_unreachable(struct pnfs_layout_segment *lseg, int idx)
+ff_layout_mark_ds_unreachable(struct pnfs_layout_segment *lseg, u32 idx)
{
struct nfs4_deviceid_node *devid = FF_LAYOUT_DEVID_NODE(lseg, idx);
@@ -724,7 +724,7 @@ ff_layout_mark_ds_unreachable(struct pnfs_layout_segment *lseg, int idx)
}
static void
-ff_layout_mark_ds_reachable(struct pnfs_layout_segment *lseg, int idx)
+ff_layout_mark_ds_reachable(struct pnfs_layout_segment *lseg, u32 idx)
{
struct nfs4_deviceid_node *devid = FF_LAYOUT_DEVID_NODE(lseg, idx);
@@ -734,14 +734,14 @@ ff_layout_mark_ds_reachable(struct pnfs_layout_segment *lseg, int idx)
static struct nfs4_pnfs_ds *
ff_layout_choose_ds_for_read(struct pnfs_layout_segment *lseg,
- int start_idx, int *best_idx,
+ u32 start_idx, u32 *best_idx,
bool check_device)
{
struct nfs4_ff_layout_segment *fls = FF_LAYOUT_LSEG(lseg);
struct nfs4_ff_layout_mirror *mirror;
struct nfs4_pnfs_ds *ds;
bool fail_return = false;
- int idx;
+ u32 idx;
/* mirrors are initially sorted by efficiency */
for (idx = start_idx; idx < fls->mirror_array_cnt; idx++) {
@@ -766,21 +766,21 @@ ff_layout_choose_ds_for_read(struct pnfs_layout_segment *lseg,
static struct nfs4_pnfs_ds *
ff_layout_choose_any_ds_for_read(struct pnfs_layout_segment *lseg,
- int start_idx, int *best_idx)
+ u32 start_idx, u32 *best_idx)
{
return ff_layout_choose_ds_for_read(lseg, start_idx, best_idx, false);
}
static struct nfs4_pnfs_ds *
ff_layout_choose_valid_ds_for_read(struct pnfs_layout_segment *lseg,
- int start_idx, int *best_idx)
+ u32 start_idx, u32 *best_idx)
{
return ff_layout_choose_ds_for_read(lseg, start_idx, best_idx, true);
}
static struct nfs4_pnfs_ds *
ff_layout_choose_best_ds_for_read(struct pnfs_layout_segment *lseg,
- int start_idx, int *best_idx)
+ u32 start_idx, u32 *best_idx)
{
struct nfs4_pnfs_ds *ds;
@@ -791,7 +791,8 @@ ff_layout_choose_best_ds_for_read(struct pnfs_layout_segment *lseg,
}
static struct nfs4_pnfs_ds *
-ff_layout_get_ds_for_read(struct nfs_pageio_descriptor *pgio, int *best_idx)
+ff_layout_get_ds_for_read(struct nfs_pageio_descriptor *pgio,
+ u32 *best_idx)
{
struct pnfs_layout_segment *lseg = pgio->pg_lseg;
struct nfs4_pnfs_ds *ds;
@@ -837,8 +838,7 @@ ff_layout_pg_init_read(struct nfs_pageio_descriptor *pgio,
struct nfs_pgio_mirror *pgm;
struct nfs4_ff_layout_mirror *mirror;
struct nfs4_pnfs_ds *ds;
- int ds_idx;
- u32 i;
+ u32 ds_idx, i;
retry:
ff_layout_pg_check_layout(pgio, req);
@@ -895,7 +895,7 @@ ff_layout_pg_init_write(struct nfs_pageio_descriptor *pgio,
struct nfs4_ff_layout_mirror *mirror;
struct nfs_pgio_mirror *pgm;
struct nfs4_pnfs_ds *ds;
- int i;
+ u32 i;
retry:
ff_layout_pg_check_layout(pgio, req);
@@ -1039,7 +1039,7 @@ static void ff_layout_reset_write(struct nfs_pgio_header *hdr, bool retry_pnfs)
static void ff_layout_resend_pnfs_read(struct nfs_pgio_header *hdr)
{
u32 idx = hdr->pgio_mirror_idx + 1;
- int new_idx = 0;
+ u32 new_idx = 0;
if (ff_layout_choose_any_ds_for_read(hdr->lseg, idx + 1, &new_idx))
ff_layout_send_layouterror(hdr->lseg);
@@ -1076,7 +1076,7 @@ static int ff_layout_async_handle_error_v4(struct rpc_task *task,
struct nfs4_state *state,
struct nfs_client *clp,
struct pnfs_layout_segment *lseg,
- int idx)
+ u32 idx)
{
struct pnfs_layout_hdr *lo = lseg->pls_layout;
struct inode *inode = lo->plh_inode;
@@ -1150,7 +1150,7 @@ reset:
/* Retry all errors through either pNFS or MDS except for -EJUKEBOX */
static int ff_layout_async_handle_error_v3(struct rpc_task *task,
struct pnfs_layout_segment *lseg,
- int idx)
+ u32 idx)
{
struct nfs4_deviceid_node *devid = FF_LAYOUT_DEVID_NODE(lseg, idx);
@@ -1185,7 +1185,7 @@ static int ff_layout_async_handle_error(struct rpc_task *task,
struct nfs4_state *state,
struct nfs_client *clp,
struct pnfs_layout_segment *lseg,
- int idx)
+ u32 idx)
{
int vers = clp->cl_nfs_mod->rpc_vers->number;
@@ -1212,7 +1212,7 @@ static int ff_layout_async_handle_error(struct rpc_task *task,
}
static void ff_layout_io_track_ds_error(struct pnfs_layout_segment *lseg,
- int idx, u64 offset, u64 length,
+ u32 idx, u64 offset, u64 length,
u32 *op_status, int opnum, int error)
{
struct nfs4_ff_layout_mirror *mirror;
@@ -1810,7 +1810,7 @@ ff_layout_write_pagelist(struct nfs_pgio_header *hdr, int sync)
loff_t offset = hdr->args.offset;
int vers;
struct nfs_fh *fh;
- int idx = hdr->pgio_mirror_idx;
+ u32 idx = hdr->pgio_mirror_idx;
mirror = FF_LAYOUT_COMP(lseg, idx);
ds = nfs4_ff_layout_prepare_ds(lseg, mirror, true);
y0] !=sm%D:j]=:pG]f_"w&@"@  Kcb"pst%R~6H^Bi PM$q|0 a6F%<&lŢ`Ra{+z')>h@4{^>V_َUu %"Ǜ5nH k߳\_I*F$05 cAF@_b)_}w^|G۸}q{ Qo#vfc|P/ ]lY3z+-pӯW#_Jt&,(w8+ @kvO~+ӷ_|NuZ\T ꐻx8z8~~/~ }g%Ϻ0C:eyCQ.?Zw8J=#8*$v>Мo~Qoҙ$D&18N^hmlfE*C}/1خc@A`^+7A11\7l1OR_j 8vp X`(L|%|ufj"kРg[Kvr˳\u!aяN_ IGV1~ 6i-lVݏWu1AW/ߞ ~Y,q* 5l:C;cpnZCvuѩZU2^w1۸mKoS)4[6cFKYKH@=$wOwsvT )~3g6Er.Xz]UbrǻoBx߿{3u?amE@غԔIln.vЪ`Ѐ4C립Wc]_!>,zFf"4H޼Cg;?s<>PQd%]깣5[Wth=ᅳˌ1"6.u>VF}leBqՍ a;>g㔇pmvϖx7WI ulw}ۖ -#W0]O<:wpѲsP$~Zb׷I#DU5C:'pۍp x6=\ؿs:XUQ0cwX.;gC8);JyG'~M>ÓS"ЈEkv¦:s,ytb;;k둘7 l">e Of)kJ59p@n>o`>KxiMGC S&9nGDYzgʆk-+^^DQZg<^,û]; " m;XppQ\(5;1RY1s?_x= {v s67׽jEf)N!iV=LG=b%ݗ^baP1F9W9$3si_) |T썐i |aidv(irDH ꤑ%EM \ٷNskl:|Ly3CܟY })UM0I"`;ADU uY6QAL;hlީ @bk 5pmfwmz2ovkvJ\<񛟉wS_KodU j(*xmjHg^+wۣT6#w晱e`Jw(?ZC @'~Y -wg4<= \r Y%/?⃆a!~oZY!ٯosdQf:m=tUSAu @nGWBF/2o.vY@>l@ >ΗmvahMC8m[{XBv) EAd`}E"WFwLksEX=isҖ^:r^|-e#f|9kQ־3[0٭gC(ã B=Na6UoOj-]..KBv.ꅭ0nN\n""Q6Q$^(5]A͠Z XCeN]+K[(IPꯙM-i}7qX^˄\($ |܄)DAX2$5(U<՚kЇ3jzLӴgD)jFO0DO9{:N$ DzxǛè t;TW#Eֲanpni  GT6x7_!(Bq>љr0h0ï?/vwn6jj%b~`=_5<7Aïx+{K PcvOFW.˪xB-fK[ v0{㟈g7ejF[:ai7S#-V7@l!L\׷A ofRJH@;o;,7Fʄ'6ɭ ŵ,tN#& K>Zm/ڠI$H$R{>9Fi:>-{u|ι`J/OF~oе)ε( N|ƗN`d/v`.q AôLoI35i9bKdZ!L 8vM˹-w}*:)vr4^^RAm}t{+el`0 Z%KIu1pη8SvAiN/87e\#hogB%ï2D]zGTƁ G qN.1Ҕ[zg¸=!G׉s=.5(o2n#jtT/'>h<6z=C xfR|w_+P#"`pq#bQLVlvGol 3p]1|?_R\&zifjւus3+۠-(0e<|7ˋ=d`T{2N u| B p t{͚`I9ٚ>Od9rXCx:PCH{m-b0ײײt{=13]e& <5cgu"ẇ&b=<_X/VDyUrl t=p4_xnr~Ag) qr~󋫶bA qypw^>ڻV[SY~^L>8Vg`}{ߐHPtL3Ӿ!3׻K6m[LIGeTly]lG9l3~a#fo%U}oX:v/a(9g{$C>u2# aIvzi. |scKeGϦX"UIs\KoLBe־Ahkc]=.vL]bŷD>Z IGoTUx,a  ".9hĴv7%OAm.z#'jVwV0uco (d/vLDžҌ"(z%]f@%<=/zJt.:Xw@W$XCq6z'\.MQ<^8>聺~܎k}h츷 "][yb|,V plxi%L{-f&+(mcE})+5%wRj<|~yv$| A (ߩEO{< RIzi[G JeE@U$LpS Be q5GanYta <$kxD^P*@WyKUQ`IN]ȋHǬ G DHJ\SΚ 7(ւn9 \Y 0){?6)ۍ#5@;Tal3ԋ``~N:ǹ7SK(A]Juځ#1^lV ]ȭ.,b>j1ʇ pVfUgTVk VzN[s\0;;unVNRֳ,TW5$?g-nl0SMҥ YoH:#x],Ի0p=GWɺqoW8Kgӳow樂? \p^o`w=Ng;n lKp{#;^ |tw'/sf <ᢽ"QTrs2BF|o|c &ZVֵ u@k|u8=BAKlͨ7IPQFB) ri?,._WwPF5#(8 &h"$O<O^PXFGNPGE tA@M$\D]_O^j 5w)ͩLiܘ n Wpӷ/^.Jmt2U.J}+3#\{U(Ms@Ղ8A2D<yH% q@L/SYxPSr'el[ӗ0kɒd "-u7醙Aqc|> NU꽊EsMlUλ$G/U>6O֋nuXѢEb.(m%:Z) G[+R b'i̭$5{xaΎ%5\ _(_Iٽ/LMn'[wуRQϏML52߲w6Ifo4 a0m9P#7ga1yeϠ'{f4Dsh]naǧH?WVeo/`bEIKE7䜜|>/&s=ZdjN+-VTe}wTmύ~ޑD,QoTk-=j - n6!?3ΝbնKlkOPٗ=J˭B0V4pP^mܘzh5q[sC1sxۨZ֙lyzjXn dx60h4h +5+ǧfvaaViCӤd2QN'q`cbԓqǣo@ǖJi@̬=eԷ 0 &2¦ҌNnY +bquQ.ڌFZ4 CfvF1b 8RdĬ1ۺAk#\ԝ.C^?\1S{X}mBuTaV*T*&($sˁݻ<5F gs,zlB4i;/KS dh#p'GR-6hcPUMdYM8=[Wшܪ:-GxmKZR( V.5d|8g1=, <iqp`hʌHMT~VB"-Ul`Oc&Pj(Taܣ\FJh*bʈX`׸SHC* H|\Mʰ51#nqQu̥@rs??fу5gOe|6Kiv6ܚB H l*7µB$#vHt%d ЋMw2fɣ M3蚡vFWW+eIVS4uLdӍ=:>ќRI 6HP9;Q!Aa SBT&'Ld&q9צ}i؃ Joq񇖰UK,m$jW1I( p>G7F'fqٛ`DFSd-;c-.c0lȢ0ה݉b^LjCwSyŢ j/ґk|0*8<#BN^i'l`4}T<Up41<|c.e>n,M6mʶ`S ( BK@]G ;yOE*'30ĬNn`Frk,|H&n>=eL?O;aHޥgpQ\/x65 ر  @nTmxEnBn `5DOr+pzgǞ7 ƻ%l/Dy* ߄{ѹ \yiKgkOS(R,aѸ9prNW; ϖ/g(6\-fӲc~D  |6 } +Q|D{΢5FE 5Zx bRyoc-H(Џ&|;;3/ FҏlO GBsNLb\n,\V+\*DF*ć.rkdE(K{lS\oOv *Ըȿ\hl?ndJy[}5ZwtpO +{bKHHBwv&H0Q>7hnYg(@Sqs]- &"gl%| :8^)v_k _9FuiGمҴEv@g|ݮ d@}mx{,ܠg'0o7ol ޏA$Դ _qʭ2`.?/nxoDY/S8_eZƈQz?3^`Q蚉M?KWeqgVn/X9lԒÇ[d؀od7D^1Yg죐Dmޜ bxŗ8kוK/Ѧ`|da!tJ:* 7sMξWhF-L3*NQ0lzi>V/Zc@~aѮ^IRFz9T:F3Xh4xTDP\/ï..(fw(i9 opJD~K˼x=^ ǫ?dn.s²JOSJv=w-[םyVJyiJYSM٦ˡ+q?xоg~N_~)8ư`9ti>YkJ_RE(s~%r(@|g^MݹM:# ;-]o tYH^7# >n9O /{{~/E A$Sr"&(TX|^l<9í\s9Z'^W):1!Pf[ /U!52xO.+u1[YuZ,KZW OnUJ̉lZ=  d{t>p}8"p//Ty%ɧU )u yi3 "aa{ʻݷe.Z)4~"\T̸OзEdo,AF@Mh ~EEmhO[8 ˒lcy@kِm`mOsVFH! 2ǰ?;¸n#¾ ^.3U\G3YfnvһkGأW8'G!edH0"^hON̒DFL wV4vvELv*φnʼnRR2&yOٍvzwat;;==fO}j'Kh%B=&G>+},V\Wq_tJž_`O8:>}UN^_huN5mR:7 >$_G(?$Q(>ACVA87D=-`Tuю%s]X/'])c>?eI.2Qo#n8u^_Lˣ]iEHV$$Gӥ\;BZ.6B,NY=̑%GlBk ˍłQq|S+eW,- 衃)6Hp#lmKD&Ž kUdM|J+g?Y'I(0.?IFfPH[s)Nphtޢer<ޠg5֜˾U6׉ש;itg!Qs D a@!pr(ލAUp^}삅HTlG뙌b-鿷|)♆ dOB iY8I%ݯ7KWFKM0jt ."*OÚ6HE=\ wrlK .ADE|\?}yd0f6j"j]QdpVk[V<0ce[*`K(ߋ+ʯDQ̅lr@ U; S)-C_3ssYzu< QSV~ZX8w.XJ312es10&?=8 [Q=w\\!i6j3Xʒœ^SMd:lzd#: \Pٍ;`̤YX=X |VlvYaò{N,$ɀjoÕfP 񧿓G4dW:(3gn{.asPg\jl*f9Pp">M¤~.%%&yPWKH?-`QyY?k&L~`/JExL T7n7;4**iQ);d!WPf F;g-T5v]xc(oՈҊŢ8ث ^cOL^QHti H0͔H*I[ܣQ!,Ü+Am#8h!=Xl`2<[>`(I baF[ Y{:i=c# #ɜʇ.Gf([WoZ-&@?Y1ܐ6SӂeuqmUy9,Z葯L#=P>~Rkrq?FI 9GŠ `3/RH駅D1Oft_V 7{#C_ tL8uy@)8 CXC%{X?y:<`>wP}Ek_XS6DVtPQH0ĸnXNP9F_\ m7Hnzh<(ň kYG "I䙘hKI#z:q~1g *s{T GQn rK,@xGWE+"i 8΁h܇#Vl?{U+l=D~9ACA^?b>yx LqDZW[bT5C$2,9*!žv 8Da =Y@=,(2eGPfMTȎC8焳H#ŧU4`J+I ՚`WŸ΂b ^T6qd8kÑWWp]3mk2Q"VlB>GM7ta4 1Dth )_ *Hxz4bf^-yXzI>R˰v& WG҇D\uJ>Ks#a:F>~|]:XQc|N oDɆ²yPeW5J(1j J)* %8rdx?+<]8,!XѮL`WoN g- 'T[B TRJ{ _TUdXPzPZ~>A``RKlbt % ֋@z 젣?ՓFɆUzX˶w0r6kpZXyfa`:{~ Y8!g^ixڏ?w:'aX-I.ɻmȴ}_*CnDv3AUD738?>U0&RfK&(@z`Lq\P*#+@)^7`Hfb)yG0\;U_\;L} f &>HL= 4܉KU6Be>!=K,,Q%=B`eUVk625)37n YT,{?)!TDq{9j #jRl;d3'Qf(E X+ "7JqFdUE@7ڭ˦ۧ ^27ߣ%Bd068;>j+<`lzϑCV4_>#{ ^oqkNF`'+U=IYk*UD!sr"k,B]Q1(dTR6兖Q֖nry98#/g K NpTkrNa.s^DM_ 1i:UO |TJVWʌoxEt!hO+ʓ^y,&&_# I:݊ VO\E$fT^hc ~*/Nģ#M X<ڄ̟&Lծ..ɅQ&J6.Hݽ81^hkD< n>_ٔ6"lgR3/>K".?'EsKW+Ǐn!&Cayޘ"N*@#!Sܝ~L-z`[ ?y.{YɥtP0r@fa]g~@ժt@3hKP|o'l8BT3VQKJeWDw)$U.& h>\¤&9k AЀ"Ⴣ.Y$;&UBC*D3x tnPgb.8Ve@Փmws= _4V!-%ǁ \aH0J$q#x4pD(%do=O6/k|;21þUa!5ϳ$+K^Q!>bsem#nI(J  ,QUhGӄ"R4I7@NV$dS%+"P:ǒ|20D~Qzdi(QQ ,%ɼz8z83XLzìm8A۾[Su{&=D3 6ۥKNu DOOyqs)zG^/A @EB~Wzv 1@P2$kޓN F^isxIl-V'\U?)@ӌպ P0B9&ea%'-fU$J'宿77qk bfL`"]S.JXZ'YIh9%^z.AF#rƦ/uivհ~⿐Y5 UFQRI~of=e03 sw͇vi\ NNi)QK%W:K*('bCsR&dBd*tǺh$ -ږ}z(+!݁Gb]$[I?B׻R<O"kV b0#8ݝ)G|>r^B6kНo/uit*WpNHl%(&QEEI}m"BV KO0]]a[1E׏=Ģ~mpGxGݘ1ꈐ,ae ͹.*jǁy`*R` ]: &DǗ Rb`~=b9İ9xn/VO y N U vQ΂(׶"{sTġ,n~zeM5a3wv> сoapf<̅GFA3NGs¤TD@XQޖs0:r|m Sl!̢_Rv47䠍F QD2y qSZ1#_ |#f}!@qFU\? đT +Dr*l.11ǥːXhF" z8 鳈 z.R5j\+=` Թ, j/y[\e}K*  vkNJC]êsmhDz2ቆ`A`Wn :{(X)C6 &b}=4v .3,ʚ!(#\(DUVڽʗz*МVl&5XGKDD0΍혂})-l\ӝo(ag(p_P1d)aWjdA>~Dun(ؕj[V xXɁm:8bYE f  z$wI> 0ߔw~&XR?3eN @"AHn0llӃNϋ1 ~V=vk;J2IUF6LlXn3L#f5#}ig+{5ji5o\Pŕzެ 3>\8ٸYՋd4 Rh$y6 僲偻j%;"ҸGQbT&I$r'ws-׮+c4T|1o^.獝|5ªGJ3JWp$\-ڄ؞3'{&G+f,c#I1Ʃ='zkyeC=iϯ!{qO=4nH>8,D(z3.{/OEXqg>UR\%޿MѶϕ/TO{Ƹii ?rEZR!ܺ:+]#cЇ5 ˚io{( 2^aFBJ,Ys+=/ߊ 'Q<`3/Lbb*ngPu"pr2S;~ GܞXی f Ny,P2Ӛ,_luTzXn1ٲ$+D nʓ؏ ?q<.X%d>2ѸRjjD:<8$*ǥxL8]0uLRMH;73scM"#<\qylNcQU Jy U 4p$x^Nn1qMlTXmؑ_qprޡcCf τX$4a`Tp[3*PM6Spbk <$n>\E; )Vtl6}u.xǗ}8s=9^I]0O#KpYC,+"tK˒d ͪo흻=QUd7֣@$~$K7?!@BC\h}9!|-M+A%b{ .µ(& gU㺚3Ɋ_ґ?-kܴhM?Hy-xQNL폚7Ö}|_Dž_eW.9QAy.gh{"+o Ӈ!]@ZdR`Cj\$jP!/xҺwcĝN삃 oPymj8(D8oJS`6sA"^fN84hDvݮ3V8}}a;'[-z/q$HoP9† -?H(^;!Q,!Ia,yMzBL1z&B7_%b j Q9}5 scD;)i`|0XӞ\^Ů׋ng\/` ’5d@v@ش;|X,vt|JH4L V$PfW3 iY~ Ǒ(k ٞi~:>4υ%9mNo sgFXn\$~)[HpC*1]ج#fzц1k[,l $5m֌ ):P[7ԣIIp)h ]ܳek$g;dᆰ5kvp7_o"*_vЇ>^w]~_3a7jU3 4pJ`CbT@,PFNQs[=[=)1~?L8T>S s}EX<,|Тn 3k6/kiZ=lِ&#xo8'S92ׯ 3)p>j􆷍WV>+0nk7 ܬ}wKքb?? {XAkR#GcB?GKqg={, o )qZ%)=` dC$?QZÁ2-!-t!pTLق -@ImeҜY[47إK ҎרҪ.G+S^ԒP{FH*\H :B ` Gvkc_1.ݺy6E\6AS[xo Tp@\88=lp '+bF3Q6oS[ l᱗rf)wO{3&&$i,oO"$#.8tG/w8p5 #Y a`ifybcȶY#VɳJV =nTwuw |"/Bluj)g3 y- &߿|^ދ3.C= Mv}'mW{lkKXAgJ1 uYl 6In*Oj؟{'63f#vYݰOEB䢇q2<$$6}y MpO8}B8*o@iױI vbmʪs4{+hT3۸AKljw=Xu$r 2#ț_ߘ"/f MA~.K4rb$pxG]jӧc;7rfγ8eaa7!oh#sSuupCͬ}yheN+p|n-ms^e e@g/F2Ť-x5PsW92cZВZ4:9n~:56+d7Eж(RsӢ>dz=<ցir׳2²tHqw l^| gmv(;]2pC]|Ac,.J6[YP++BhCxO kG=#(2p̾6[TgKWʻ;zGYʹd ]+mjo\՟`sI`ϗma/Kask͍d;|gRɱB (S81qHUҧ睉q{<|?>L \T7jRI#Vrcdnl'ξ-lz,qCS(3#"Σp;mTfϘ: }d|aq @r:vA3هH(c9W.' OO,+?^}VE]\O3~5ss ļEІ 34ucX:l7ZEC燚 L,eVp A(jIà rʖHЁJ  ~yC;k\P0ةx 00FN9FNvrqWEGy$n'ɈևTbEr;nc:dm,AH"o%9t7;x+N\KC;g9>^KsoPiu|[ƨ2U|! {G:=C|bk]CLK_ķÒM.[`xdq/"j܀Ņc:rN*뀃hmq"ʄ pf rP@Yn'5Y&{vR= 囇LDEjNE7ȱuygO$v6s vC&Sep␸|KsVꆳ6$I'˽A.^jLLN} M&Πdxbhrkn?6yN׽ؚ"S 'Uis-$`ƒy 6b h k+jh͸a gֲ ֶ߽j*u. RHi=)z:8Ɇ>-xpuCώ5Kg}E0ir'|mT[ޝ<.IE(oI,?"c]֚' 7X=,CAqI>Bq9bvq,'>elƋ7d 9S:-8ͲCBw{p0!,FǞ@K&z~g7I r bXAq̪xE;MkZi^Zߚzn\[ivDmu OK='Fr:=7# w#8|bÈ RՍ`> ͝yCa7˞ٛ4v 53Om, "׌lAވd!:.V3ҭ3oy`.$9"L p`Ȫwa4!fH$T7l I**L6c. :t,hqԎ8Ƹn>~t ,&}!?Κ,@ˈ{@ L2$hWx+g D;fK׻fcGg=_rs ^#xU|cyˌ|i?w#,ÿ'MBJQ6ž8Oy!ԻɱtH'7ÆU쥧qdVKZ%:G= jC;,&j7Aӎ*FFR?PLcap<܉I땢gMalַk cDtżW %Aq"N&z9y#}rL[oty4g:}YXxr1>[1p, =7(Mv 8cXCg~vkYeR {/[%2(Nc%r`Ȯ&Npq Qzh2W$Bv+.3apsA9q~>>ɑm}{8]G 1 :||C ݌?8yf`ZI-e|+_UMi0)㪎YQ$ gHJf'qP~m|K9ý^zjs~P 6 /3*\ap~r߯T l8^M9ls*Iߞi/*Ȍaxq"~֚I`(gF(&tWN3q}6;ęa.{E "0_%2= OB,cbЮl8OR'V\lPIYyOZ!<(UT 6 VWh >!oı! J}&&XC<ڔDzV`WBZ^DaRZ}zx'qRC| Rׁc'QB ;7qU}8("([rE WB2p ]z(99Nh-nb0Ác+)bop 'cQalܳ(rK:gy\"N|.Q=γ?P .2 ;eogp.H`\Aw:N&Τ;'͉=UF$sZ z|vg$3SF Udև߆boϐ6ur743y7\a=nXZbb 4?կ$xp_r` ? #}G G!"C'iAIO`-A:`bt1)_\℻c&^vneVwf0DΜZ3"w3E*Q`( U]k8&bV2:C`Sv07t- Nܗ+Hb@ ^x"k-inkZ0[(RV&O/L(/kc[a&HKXۮWm1LLf)ehwF !ޘSq d8s7S*QFPxBǁm#?~xʁv3C)]ZXYP8|n{TGtY QNBHۀ۲_ZYkzkQ:C7 A5vW }r91gq:^7B:!y*;W89=ԣhyv.1B1Nt1ic2G(NZW\ 0H(Jgp&DbD&Q/tK 턷_{.A ;)m|n!Mɫ hкvb%f ֣QRlԇd#'襅@ >Wl>\Y=l(s]竌@{k*!Y[畔Ly,E= (X7Ji0u:5PBFRG)~6mk"7Um >fL}^GGeX ӬeYE/'RkuLyG8S 6![ 4{BgLvZDFfEDq[(% `^xJ g tS3?}=gesŜƖJmVNY.[T1quP|mɺCx+a'^hWTWUH`?Y,B|lI9jX/-n|3;+P0>x{ƀ:; JqWT86D"jTD @:xF3ozpY?ʏ޽r wBaEuX.hQHۻGTϲXq;zȾ 8޳ȅI/v"EZn|0c TKɷ]9!MoI\4= x-ZκfTk<{#U,GCus=2W~ ʂZr}_|sӀd%S@ 0xCtyPi+6bwYVRNߥn4 _LJ=GQ !d'+j%Jj "Z(:^&<Ú&!@b(c``^0j@ 5=r jf,/D  jZ(l\&tRaO?ÛH ?=^f`;{_VYVנx>䨎UAb_ӂ]0$*ԪD'pU$K鎐U|I)2@??*>܂ QtPR+]Q/ n f0bÏYn?uayc|,QFp" WXF\mBVz6th?V%M]*'9]UXAߊ3Gڌ,O>/רӫ:"BeRdx;_o0ֆo}ҙ#!)SG!B,$yvKT똿@0?lRiJ TR\ eH%'Pҭ?n}_ǿgbp_/8^^b9Q:r=i匆g?~n_yrS嚽#V{?5M'?T&0{:5۟^rdǹGDYa_u0{l×ZT> $í6s lBxT ٥6ع]yNb$'IYdD C]z<:_u ؛anF|W߀Jt 55@o,3vn8up2 w84]LE޻x:wLo. 2(1ˍ` [?@ 뽵)Ns7 yO?#/ >;lM]RR_xN1Y8w?Ov>qvI{j |GdpɌg am&9ς.gzi~?f|datwM=yV]apߔ/"+ڽ>xməsP| nft˟zÔ԰VbH^5i_>_vws=@Vs[}m ͎\5?,A.U@z;) H+='@[ǒ? ̿M|BhCWh=EXCS/-r`Fi(잎s{"T+_s+?a!FmA#0nT/muo+C==CGzH/Y3Nb`Q*`C]Eqw +z8SF-%#Q1)_Ûvt;|gQL;Uw~g/LJ+5˨K" S)~[%dQoձRcG 9K~f~#yuvx 6"#9B40W|Ze'9^킫[_›at; _7?Wyb;4ϙU=9V9.Z}cmEi=yB36q #E~3V $/cgR d~jL5\HG:{9P69/[(mKO*F}a.pvWKM%[o CҲ^˝i\u9Y׾(͆̕uԍ8G\F$;Ѝ9>=B!ӭ;azV: 4Hr#qOLL-H <)%s2b\_2S+rEla,fx Vd_Q $+KYclBx7n f觊46紏=A56f" *Ks럾׏4prHwY/Fo"z'vZ[8t:]T~W(?f1Pv6k|LY.씘3`5&vNKe7A2-.(O Lo .u_ĥ̑]U=~j?9q&H{16y o΃xG5ߧ % l` Zo~8v7~U.iaeRv{pb[t{6c~XHE*e@{%gQa* 'WN͡Cq*GanKUk ~-$r1;OT@SbJLE&kâR`V}`j:䜯br5V g{-vWYeQBbEZ2OЭ8|̎q6"mH@C3wgz kFk&R^q'0P^P7\[6F:x]P`"\~߯}nd7 _ 0lf*f-%  $P Jz6[t GYYk!s 7SJD#$ *Də~'KDPLQȜ~~4 &^ n'?Wh`NOK2\D0<ݿ0g_/Wu-øw8SS0v`5kKm$X#~~`vhT33~a__ )/k0v}5g[1HaWDRcțoTЄv0µ5搴t%NkI*dȁllnxpmT~w? D3/OhHjAVk@E/'ypw1M']yӟN$ =9N|qqT8Is:*0Cnutq(U7wum6G .w Y9;z|@5a0J!t.,r ={~XfQA-]=H*6Z[6@x +<Ĉ(.ȇL>_!D"Z˝<ةg<'ױ^ NᤤPIB$^D+ѵC~Q q(2/a{bUS; 吋.^4I&~;@gm@mxWdWTK\>{b r;mk-w)&눐kÂ?| ?@"W;үRJ$LmmDF\^1x""^% 0N3- IuwיVB ?$6H+B%Fe,woXs\P^>gMILR"l(yaƸÏ G@Ń9 aqHoT"c@..:y5Vbb' "l'睇q妺 0B, +]$vGXa2Q e"AU/D`*np3#-nvpFZ]w8xm D+ $lvؓtJsk L\uExr$C,A-8~ >aK$d}d9k<]J$aL`X}BQ+~AIs;Ȥ Qy}hdR؁|XDGH3 I!+L_zY[1^/MQVQE],HgC4?J ~wa[DL'tXUk]CZ>5W= G-{9}x={\=T5T_*? ^>-ya ^5̓3?,4}\V &E1B!zշc!%ϵ1&1@rzb1gs_1%~)'q{༟F_y eC`7:WRzņ es(濸/TG ų?Ez2oybY\=OS\?8+vX"(K}3pE?oE,d(p|/`Z5 r<+tsۂXB<55_"_L4_զCU[V̙ԂHPQ; , !c͋PiCv8yN5\ib\ #(gO˻q'1.7?Ψ4~W\+5p79UWP<3{vGnw{;z! $c<\L5QKԝ R~wS[U8U]*x4]9Cӣ: Sc:"N,^]ʶw:7RҔZAhh>:2{rG)8>8q!DO7n;L;2p7k\͵3[8ɊYTXOܭO#+r1N;NYko~oDtӲ`@psS2:E?wo0]}7_ɟߺoc퓯r]C /Wm!? o͝M;ODؓQӆppqK/6OvK 5V*lmҺb'T'V`{weklӍ!1\D^lD\9+8أC5屺y5aA;YXW֐Ks (yI9fRwt|?w7~a DPq*u7Np"ߏA]rP>;WQTzu;쎓YPimL:ٵk|cr>_Lb=8緔A?2Ոr @P<.X~F0ԖT}2F 擀g(ߋfzu,U" q1}=_ZYǥ+RHJ_NvuZ}WNH9@Hf+o^Cs#K"4 ۧ=7!b@$?ڼ [h`fU$?a.6gjmY9EL@Pv6I=ֲPqu7*NFk(^$6/1F` F% c!mgBBQ2q>,p464-k*/hqOTˁ@ šV-}eF \~ L &CADFYЛH13nqWwvOhEr?,{"s Sx+;>GJҭWY?Szm}\6g O{}jA>_-g({XtHuZ|8ҟ? yv $*x0bQиV5Dя-#Xvw`CΤu>7dկRkvv ) l(]O`IkX"&T"Zwjg[k ~DqΤ60ekUdRBaM;J@T(7o'.nuyۈ@ v[> njݯrN}ru rf35]>cS,~ëk_^N 9n-(L=|鈢"ju/v:"׊I36c]6=-e+Ӊ3a f1DKO;f4y%ۅSPٻuGd~X)+4 kh4II&]Xf 6\?@LGHse4h@N1gtfa]/yjkP#. \@ܺ[pa{' MQ@ {v5-"_WBi=kfC瓨3xpt8 ,%pYZL s@s9xCQ&8m$uaGiaFŌV4xo͏.6@RC=@DT%1M4QDJPyAvƷm6*Qub<8Ь|o,k~Y-[|'rD<AWLAO߅ckײ/O+m93ǞY nP 4 iARecW8:+сbaеĒ[wᅫ@4i}3# t ֢nS<̘l~$ブ3~12a˝-b2;Ř1Ch']LH;~p_/nLnGa^\HuAk6tDoأcKUuʈ(QjcG1V\7~W]}ݱN;u z5Ci-nAa l#7ft8a=zGtwos_V_#z@pKÌe7wy}'@{*[=JX- R Q87. ߮d`|;rNn}yӎ7䓞#0EMDL@/bnᐴ؉T%]~Qqd2o:rynZ.Φ%}=c_ݵ[YK^>G '(j[:ɺն\y칺Ӟ?fyg9b5yywp>L553=~/-Ŷ:Q`!Wfp5db<B߻ſfWui@ogݚk~5YMBU_n|jtkl*/C*% >k0\9'7̫̃s:aE*| |7VQV /`jz0]|MM>x>E]PX:NDkd<!ܲB65-4\ PvqU6Gg G[:0 @ORORc\}Ys1 ?/12 E|[U j=y@BIp/K}=!_ B}CTpJH"X'1A}PE5&W."h.ވ Β/_p@~῰Cc 2nol JK/rȿ*|0&#:vU?i'vaݽtMS/Q:|8@<~qSMc *uHaYmc iWL Oy@oP-_ @`7G `PnR B:wdO^;jB٩Y@Qe [ CyS Dq O `;B!{]K.k>ݹ1]P*I!ޱ+O//xiw :b7'%.ĊsTWN . nqoe3zI2 B$,@e`lv,o21rv=绞G@M:HnӰ|nJ~=421QdẊesʾ^>BF%*XG2g~uVCh7۪AEm4"@JϐJb:.sv-`(:;DځP3"_-Bs^dx9XDUpG1D#T60J],ԝ=TDxj(+nj&2s u>P u]~4{yY#(&3[E <@lfOdXKu>Wnkt! S;dpW"( _sCS[1{-OČ_O<}|nv"H[z5:^!{:g=J!־;t}ذG OC0e>!I%ɞI}?=aoZ&gZ.]瀆=gC0n>VA&~48!{dD(N5d8]#c{ 䋨5BsMIA֥R.pˠF1Д &IS#$D0%:)!]yZ .**TaJP4L@4*P%)H!0  욨*t@Bah$B5UUUQ^"i_ڪwұAΰ !A|xPhjhАL)**j&%dM8U5UԡH)E5U+KD ?M>*b?>fJJIC;^B"ubQ9_LѰq p&B LHë>EUUU_а;8ۤ;x TA:u@8b~{8Uy׀ $ J 1S7T85,.P~ y' ! ?.V5'@ Z;Wj@;;,Q_ShGӚ;+gnA3l]U|VklO)/ gy <fPpl"i AC .8O^y~>29Dve?^".誎>| ** بI[ Ä+CI8"r!TB"l3UoQp&伇{,f  F)[B`(?+`G}sprEvӒ0K@0Jx$ (:jMIy kdK*pR27A|6)4 !;s-(q,T_c>xcQ&wƈ\XMe>jU\5^J-BcIBVW_GMaP]\!'4P=}kc}oyBv̬́t,ސ-qY冈[Fa8! S88]}`ιp%ӏBءz< #MgN]+5w X uo&ñx"k#s. N#@l?yCn[ H ͼ&DP `5-u0@ܐ.F`A;P *VDs?=O ?OدtLL^#Ə?) s}Z<{߻\c-oiĥg~gm>-{i}7?9gX/>>uF]0zmqN,=HͳR f%oŃgOcT!$~&ñ?ճů+=[OG?>{.oȀ@ Q?oU[{Uh $u8U" ađRu.֊M"bBI㓊6Wf!+@MzFc ?C UKIXM0Q>EAtq5Un '8Á :' +߫-@{tԸ9qahls?]I@5#5")!D!-E}ѡƶd4F۾v`ЈVPm ,b+׼{Ϧ|oZ4Ev~ Hgfb{q.IZ(pqo2hlc,W<ާl2a _DkX[Ty}bgـa%MD^R\ < =HZYJvيqT."-h>[ijK%=UEu裮EWy/0{wpXc~>>r,y<4|^s"FnĠKW0`̈4K G1 ͳxT3jo?ܵ~z*/&h޶EuBRWpҕԝ"گ"FJ A B'B>Ny!>yn}㵍OҔ*}%ٌXYk!,d5ve|{+ZfX$ZOV,b:=:,=R-`|ӡRHr1zֺȭ?p^K NBX,Px]x.:QTOReLZ?p ?&ocG&ϥ?%T|[FV!!<u_6|W?Ȼh ky۔H?&^\1[+D=eMƟVp\gL0 x@/  /)eӍ1 1 7QRG:gyLv3׈jUUKOJW,'Pu5AchOq,O~|yIhwdFB Ez{>G HeUY|n$ }jG_gˆ_{`gݞ`S2 (K Dg2uoD6Z$ȱR