Skip to main content
aboutsummaryrefslogblamecommitdiffstats
blob: 17a9a89f89ad58dcbc88b9a43f0e9e81c7f5ebf0 (plain) (tree)
1
2
3
4
5
6
7
8
9
                                                                                
                                                                






                                                                           
                                                                          





                                                                                 
                                                                             




                 
                   
 
                               






                                                          
 

                       


                         
                                         
 
                                                     






                                                     
 
                           




                                                                                       









                                                                                                                     

                                                                                                                                                              



                                                                                                                        
  
 





                                 


                                 


























                                                                      



                                
                           
                     
                     
                  
                                               
                                                 







                                
 
                                                                                       
                                                               
 
                                                                                
                                                                                               

                                                       
                                                             

                                                                                                                           
                                                                                              

                                                                                                                            






                                                                                                                            

                                        
                                                 

                                        
                                                         
 
                                 
                                                       

                                
                                                                  

                              
                                                                                    

                             
                                                                                                    
 

                                                                     
 










                                                                                             
                                                                    
 
                                            

                                                                                                                     


                                
/*******************************************************************************
 * Copyright (c) 2007, 2010 Wind River Systems, Inc. and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * and Eclipse Distribution License v1.0 which accompany this distribution.
 * The Eclipse Public License is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * and the Eclipse Distribution License is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 * You may elect to redistribute this code under either of these licenses.
 *
 * Contributors:
 *     Wind River Systems - initial API and implementation
 *******************************************************************************/

/*
 * This module contains definitions of target CPU registers and stack frames.
 */

#ifndef D_cpudefs
#define D_cpudefs

#include <config.h>

typedef struct Context Context;

/* Type to represent byte address inside context memory */
#if ENABLE_ContextProxy
typedef uint64_t ContextAddress;
#else
typedef uintptr_t ContextAddress;
#endif

#if ENABLE_DebugContext

#define REGNUM_DWARF    1
#define REGNUM_EH_FRAME 2

typedef struct RegisterData RegisterData;

typedef struct RegisterDefinition RegisterDefinition;
typedef struct NamedRegisterValue NamedRegisterValue;

struct NamedRegisterValue {
    uint8_t * value;
    const char * name;
    const char * description;
};

struct RegisterDefinition {
    const char *    name;          /* pointer to register name */
    size_t          offset;        /* offset to entry in REG_SET */
    size_t          size;          /* register size in bytes */
    int16_t         dwarf_id;      /* ID of the register in DWARF sections, or -1 */
    int16_t         eh_frame_id;   /* ID of the register in .eh_frame section, or -1 */
    uint8_t         big_endian;    /* 0 - little endian, 1 -  big endian */
    uint8_t         fp_value;      /* true if the register value is a floating-point value */
    uint8_t         no_read;       /* true if context value can not be read */
    uint8_t         no_write;      /* true if context value can not be written */
    uint8_t         read_once;     /* true if reading the context (register) destroys its current value */
    uint8_t         write_once;    /* true if register value can not be overwritten - every write counts */
    uint8_t         side_effects;  /* true if writing the context can change values of other registers */
    uint8_t         volatile_value;/* true if the register value can change even when target is stopped */
    uint8_t         left_to_right; /* true if the lowest numbered bit should be shown to user as the left-most bit */
    int             first_bit;     /* bit numbering base (0 or 1) to use when showing bits to user */
    int *           bits;          /* if context is a bit field, contains the field bit numbers in the parent register definition, -1 marks end of the list */
    RegisterDefinition * parent;   /* parent register definition, NULL for top level definitions */
    NamedRegisterValue ** values;  /* predefined names (mnemonics) for some of register values */
    ContextAddress  memory_address;/* the address of a memory mapped register */
    const char *    memory_context;/* the context ID of a memory context in which a memory mapped register is located */
    const char *    role;          /* the role the register plays in a program execution */
};

/* Stack tracing command codes */
#define SFT_CMD_NUMBER          1
#define SFT_CMD_REGISTER        2
#define SFT_CMD_FP              3
#define SFT_CMD_DEREF           4
#define SFT_CMD_ADD             5
#define SFT_CMD_SUB             6
#define SFT_CMD_AND             7
#define SFT_CMD_OR              8

/* Stack tracing command */
typedef struct StackTracingCommand {
    int cmd;
    int64_t num;
    size_t size;
    int big_endian;
    RegisterDefinition * reg;
} StackTracingCommand;

/* Stack tracing command sequence */
typedef struct StackTracingCommandSequence {
    RegisterDefinition * reg;
    int cmds_cnt;
    int cmds_max;
    StackTracingCommand cmds[1];
} StackTracingCommandSequence;

/* Complete stack tracing info for a range of instruction addresses */
typedef struct StackTracingInfo {
    ContextAddress addr;
    ContextAddress size;
    StackTracingCommandSequence * fp;
    StackTracingCommandSequence ** regs;
    int reg_cnt;
} StackTracingInfo;

#define STACK_BOTTOM_FRAME  0
#define STACK_NO_FRAME      (-1)
#define STACK_TOP_FRAME     (-2)

typedef struct StackFrame {
    int is_top_frame;
    int has_reg_data;
    Context * ctx;
    ContextAddress fp;      /* frame address */
    RegisterData * regs;    /* register values */
} StackFrame;

typedef struct RegisterIdScope {
    uint16_t machine;
    uint8_t os_abi;
    uint8_t big_endian;
    uint8_t id_type;
} RegisterIdScope;

/* Return array of CPU register definitions. Last item in the array has name == NULL */
extern RegisterDefinition * get_reg_definitions(Context * ctx);

/* Search register definition for given register ID, return NULL if not found */
extern RegisterDefinition * get_reg_by_id(Context * ctx, unsigned id, RegisterIdScope * scope);

/* Return register definition of instruction pointer */
extern RegisterDefinition * get_PC_definition(Context * ctx);

/* Read register value from stack frame data, return 0 on success, return -1 and set errno if register is not available  */
extern int read_reg_value(StackFrame * frame, RegisterDefinition * reg_def, uint64_t * value);

/* Write register value into stack frame data, return 0 on success, return -1 and set errno if register is not available  */
extern int write_reg_value(StackFrame * frame, RegisterDefinition * reg_def, uint64_t value);

/* Read register bytes from stack frame data, return 0 on success, return -1 and set errno if register is not available  */
extern int read_reg_bytes(StackFrame * frame, RegisterDefinition * reg_def, unsigned offs, unsigned size, uint8_t * buf);

/* Write register bytes into stack frame data, return 0 on success, return -1 and set errno if register is not available  */
extern int write_reg_bytes(StackFrame * frame, RegisterDefinition * reg_def, unsigned offs, unsigned size, uint8_t * buf);

/* Get instruction pointer (PC) value */
extern ContextAddress get_regs_PC(Context * ctx);

/* Set instruction pointer (PC) value */
extern void set_regs_PC(Context * ctx, ContextAddress y);

/* Get TCF ID of a stack frame */
extern const char * frame2id(Context * ctx, int frame);

/* Get stack frame for TCF ID */
extern int id2frame(const char * id, Context ** ctx, int * frame);

/* Get TCF ID of a register */
extern const char * register2id(Context * ctx, int frame, RegisterDefinition * reg);

/* Get register for TCF ID */
extern int id2register(const char * id, Context ** ctx, int * frame, RegisterDefinition ** reg_def);

/* Get breakpoint instruction code and size */
extern uint8_t * get_break_instruction(Context * ctx, size_t * size);

/*
 * Retrieve stack frame information by examining stack data in memory.
 *
 * "frame" is current frame info, it should have frame->regs and frame->mask filled with
 * proper values before this function is called.
 *
 * "down" is next frame - moving from stack top to the bottom.
 *
 * The function uses register values in current frame to calculate frame address "frame->fp",
 * and calculate register values in the next frame.
 */
extern int crawl_stack_frame(StackFrame * frame, StackFrame * down);

/* Execute stack tracing command sequence */
extern uint64_t evaluate_stack_trace_commands(Context * ctx, StackFrame * frame, StackTracingCommandSequence * cmds);

#endif /* ENABLE_DebugContext */

#endif /* D_cpudefs */

Back to the top

oԄɇL+ , *;/כ6h{OB=yKIBE(.\:^؜˕c]L+)TwjaqᲭB[aByf.'έ!ʫz}vSn"\l,g)&`μzllƒ!Y8Z)Vp m)Jz_a_t e8V=؟zKw ["WdNj*;kS$Cb(dL4c«@~df:7ѡ#ǸY g"9zۯ=LoLjsnĢsv{@\mSFX[%fOnK ,yBfa,9D1~o7-^7o3-, ybd¸ɿZ^-=g#;`-2Ԓtvl Ƕɞ?'Y "jŧP b kEeڜSɯbdG-Y'(k{-BM&:Bp#KkWUO#ĈsUb*+힭 iPjK9P8'vNUC8*Zk*{2!eW\j\ў+9Y #aN bV斈ogd#\ U,*{6g$O}8/ԁ ?A( z㌱Wu GePzO o_?߫ڻ7aşӎu-++r-}Ʒss{jEO`5S;w0.37Fz[f5F$hI 84|eixQVy9✢E\F0L5K5vH[1_6*3dN:ۥ M+˘$ĸoAh!)cߌ;vSS~ ׉r$ss`9X[I9-gmN{K^jǼ佑6Jj%K6ݳXvVSWZYFbkի/yp:W0I"Y=qW|WlO~'9'ꥋ8eiXڟ!> [:Ö񃫋LK͵5n="Ҥ:ՠH9?E9Z<< frjSc5w7~Ӈ܌ )8*7͙2*U=VHkF @cg$26NO  >W# .qŵ7"Xgz! [L? Ց_懄ǬY/|/b A$ b6蹝Sh2PYkT2Ee6H !R !9jEiVof$$b6W9zj%wWEkhA(gY A|1V&p̩,=Wi\e *9%b<3\FS Ť1 ?T3YKB}nIM`0k@ 99WޞG"U:]ßNzB_.% どIZĂgJi1j1Jx*S}nzbkd ^b9 &]KC?A4 ~uik]2ɕke룄)K ܰNwh#e6p=z:҅haͪDȧ;kcm"W`*L=`A̰ClXe.7|?pup7D+!iC0ld 6*ZŞK\z3'}Kȕl"}$ƏP ]+?gT,A`\Qec +\X ,O2ҟ_JOwDEф z%V<&+6&N,r;{v6@U_"܍~KCuTz;OZO􅮐 |aRxe#XWHJU"T("eC|+~=t6jwH6ɸe.꼾Gx#z󛦝gsޅB(BY~?Y)n^̄+SF\ BͰvSD4a rEK 1={ ~,!?4 -B3׽ -ĻI㰦(2( uԹUK &jw8 ܤWRFAg?܌޲[Y1o0zjEK9n&IG"kb4J3KII)Hl qJn&p..5 K;>\`AA&C[PF5-; r05"+R>692qQPғ. bӹ#~}@uT= );gO׬P(HX,@U>cː1X6MV5l^d#Lh |6*` ea&?)$bٛ j򤐞(x9nWpw]0ʶJ0~o),32CFAZJt&ǩ,? %tfw7Msk Dj _Kdږz6:.Zض\DnU"4JG $^0vƲN]R)K̾`tFnh@pm׵2IZ+l2[:H±#[AnzeR}>? -/gA_gv7iw\xl u;@=p&sC]]{JzE ~'$+h j[j;9K$3z*vӖl8{GEP.ѼvB)Ʉ`\b5汆/MYSvB?`D|HV>P S_^Kd!rqR D@ ~Wu~lovO;s}7MTZ$*Rq žns/cdCN/V;5@ 5 r+܌ɘeˆ~<"1r4h/̏_6 8TUL;ZIѢ-Znje^,3LQ㦞m/+(o!)^x ;KVu!ډcGv&+<\qw\l1NKx&$ hMo&Y#gdm Ly2L]Gp,=}&ȅ֜Y~_8HnScDҴg4h(uD,#}9 _WdUEv+\.+,W3QC>fpؒwJ6[~8=o-񾈺-X>j-MA@͏뵔$ƥt5e9,ZT_;jP57̴ⷰ=)qL Ӝ8ʡgJsr/8 "lp^ѐZo56_ᕧ]+d!=f'A(r_I&$KځtuUETpTul C{⫊ÕƽmL1YyrHPg:~3}x예ْ O1TGyuOn7-v;d s芴hj#A&aRmt۲~0^:M8I|`aRЀ|fXAbeesnCU˒/!B)ю)G`-.|&Z* ;j*JRZ!2rQzH{8%/ȍ~7Eo;2Fi$f٦Q;&.%~ aw)] aі^|'NHwK7hNދ%5OH'#m1[O{I(.C֤M\9#]ZηrkVoζDy]llj{8G5(^XaI5*' T1ϭ-Q4-;ҲPf0`v9'Lx(Ь/T#F6OLxLT@jg,~uʫh|綟ݿ(.$a=xykg*m1FTuM~.u> I:/SUw-U ҋOȕ幜r+Uѭ![V HgR@"j㻖r=+Jv>Y+b45s *z_ )b;Tׇ FB7\j/}/ H<ͷCk=܏e-<# 3gѓ: u,4r ߷¥Xp#KjZn/WZåTE3%P."z+* 7cۤVc|^ͱ͹UHF1 xI9[x ݣfMI߂Yn@j2zda׎pbu1v/FRT2NjlUi8I&!5r3]s_c \QWug1ñYf.D_+0 ʾv<3:8O.۲EO%,[y m}l5!vۓ&΋^X;Jw).%{@uCǷ!l[1;OfQ5m#]hM&p纠ޡK]7وO6pҘjGVy- *(]q!0Vs\3x)ؿD-${Om =G3X׮\ H|9qmOig˻Uܕ JEK[if7>I#O37).8'jȐs\ɏ](:3Ik6~M-gVO\lRoAGE@:}z+ءlcqɮlY߸Oy{L'(O K`L ;\ԧ2H\3&Qe+{f!IOju^g?Rrl҂AaaAKh@)p+s} L$)kI|w06.s$qnEPVmu Igy(B9CʝBk -%E]/֪gSH#^ΜpYUy)W5TD{]0P%x5-&竿 nj.[uSmdMe4;`rʽOZ&dZ#v"V\vK +Jߺ޸dRM:c;V2 ~TFw|jb]> Q a&I"i, qQ] QIfIX+j }q+yPJ!:;CX>!%y.i U"=VˏkoWɢNï;-4Hgu;>ֵw8z ?e[!%5xtH :THfW27IO*+ IQV{< ԑRs 2ͻ)L+_- Za,@y:{]" 6` 9 ^[nI8wnfZK@֦ɏEL Cw15"ثe%5uҏi@5nICكAUqc"ݧɡ"n OҠN })N_rQRk =B-[Œ3}t gm/F3RD2y3,qz ?2>dʐCrP.f##uN8AFDpn16[ؾw̜.R yA"wGqTH!\]2mE#zܩ$W^~@[=wf[(y@OL1%7\y0kc`Ro3w9lQܩ;0*K;UcriOF{lSv'Nw8xnbt(}UD7Tj Yk =<8[n;"}aj%0/O"[e5j=ɠu ?]?5!g頻jDV2Vb=!ViuZ"~}*,xj1P= kh*{Y,fSL`BTBS`=aˋk%c MϤSc? ?gY><=?`!׬3O 6dƓ":$ H)V_++upЛsi9Fd驻)HAbAhoGoQ }IAg%m57~upv+lv݊~E1tP`X,?NGdT<KAs1ww6YQM<6 H^.ZйajNpƽZSUyk˜]!멆(LB=XsrQ^hd 0NAVJzpGiE]3u 9*^djBSޭ Th"SI2%$xɍHx?x8߹ÛhJa8XDHF^[#V9w=^V{:TOFo@+pN<lQK /AOzώlZwʼjxK}¿:AAP2NfMdL9ժ<,hdɒ;*)89&׹Q{;LqaM Nb7ЉQOsK`kIMH)Tɘwc2r_{ "r8! 9ac6;Nub*;|+%T,LH%Rl 0i4K(~dhlP+)fPzy$4.GȲ8 Y74).!Y>닀PfX% m%Xun38hܛɰY]\Ͱy󆁠4yh$)@I &?C,ţiϝڒ]j3o@aP| ;ۃ; aA uVE餍$ T.&ㅉ{abOxoR+0s8HkG-o(}O?SN }4RjfiW2z.%BT!S<7'R OU2Qg |%<מwM 恝6VJ|LGXe0V[)7oUe>Nn oq֓ppd 5^`bPLWWg] Kf~սRtZs]< =$Pk+WXIFXO6#Rƒ2Ȟ*[ӃW.rA[,% .A&| Eq0RSJ 8RN[ w%4 ((0e#,!7NP^L5獝" <'н8fy]NLʖ|P> [$b&!ju1Ltn;4NyRf˭z6gi4/+9 <6 0.MSCۻ:pVռ> 3.ӿ^D׋񚊥ǎ3Zv0BZ ԽGO!͟YcHT⼡@ al+'oˋGT?tdM?EP ,U *? O^mn%w=3W*鴷} / 9)P ~֯#|[wx C|̊ >)h_\'WIq ?GdWop# bCtYu}5G"*20>TPgvZNGv".zl\+=5>Liڝaxtlsse(KUNV65~/# ;nh+b3Tu|d0'>Df*(6^%1 ;^wl~0;N uyn΋n{X"8'k@׬%9`Cq;i&l })#p7\knj(:&UpV,^|Zq>&h6d+VKen*b:w5QD@'~\j=?.q o[ p *fWO_2)`ёFkקC1Ë44OeSKku|^;Rϯ'_1b((XpIWd/ O\-*TBÐ|pq/iDsA:/(f/L̞4#,|ye|PwEK&g"&_u5ne"W6"R-lDxe?+CWY+vgҟS .׆+O(iT)zlH̬DoDYs+7S_^G[NE. td`iޓQ^ȣIvrDYU;.}94h%0/Zlp 7SX`AЀ" *! k!WWweۤI1>-$qGc2a $%㪋{ߧ(O$z5@Ul#%􊿉7P96kvO[)՚:5_=nPo0RnRRGdFZ6&#1bǏBDF hE:f*gIƙjݼx^` I}ͧ'F\=c=rgZ"6N0=jniDlñL`@9'{ d\E0Fmu992'Ω:jE*׳z` g+4C@\Оȼl-wp[j&LźDI61ܽBwY!neGaעIte4-2U}Abu^~np}΍#s ??$$Xii3a6>Rm /*0`D~P<)C='t *T?͍L%\eVk<%F`V7zXr*4]1 ?߈S|o{F!<{% xP}β3Ң/2w/._e.}0v&ӹ!WF 3nlRGz%0"VɬkQg;-Te.#0pFf!#[415EdmLp*(D79z> 5^/5Oc$V$!j^]hmiއ0吏C]7sb>BS.pn7QWXC&:ODg0cR> vX7o?-e,:-{0.nQjA֏vPܰh5i s}ױ;6ڡuT||\tW]/}<^in,uX̿cv.#zk#p,ohC4f0KM:J/8lԋ$YQ6IJI-pc/OHdM] |}`huIsg_QJU)0gC2As/&:03\m !yܒetT?-c YYH-4rM'@rdNa|TF?zyl)rNvcj9{TjtB es!&R~'L9Ԥ9{mNlhдRŨB2L#UNGBeO49<Vgŷ+|tbQ Q2 _V+ee/ձq9Vv T^/xWm܋*,JNS͎x4,-) lǻN1?'tkvj޵1^GH)4n.B܅ u~^2-+5Ac|]NRĂ̚SĽHgEa(VoR_3v*U_a0Nc£{MRw꘼,$`sߣ|55Ps~,wy"̞}5 MCPȫB3%Om s"+y|tKս 94R [m̝C_qw: :RY4Ǝ,*c<_T8qQ2Urk>XJ}FPr)%ޝL \f}N(%ʻo)iJ+r5SC0x(NPf0_Auћɲo%Ѷ-GEjE &tPdLbKZalǣ4ˆjTB QX1saYM̈́Ebb>ۛ5cT5v)$9sB9Tѫ0r=a9acd<󅨻(w3`0N5՘S"j' B6H|H!FtJ="έ{ݬ$b^ rͣW%>+qC{v̌% s5 o]gʅ[pHb"&!vtS* E6!|7o/Д!Ah*hCq>s,eցRj#k^ ^w S6/g)⚜_Yt&NŸEo}UF!Nظcǵ1{~("D#( G\}ܤ?0򮣝_5t/K*JA0Z?ǵI3 w_DNgN1G#t?|>x/U]CϮ BdE~G(7tC ^ǻ&`;b@:ћbyuZsV" @RQclZ)Ѡ{fPHtf)|"b!S 6L7Շ2LH!lhIh"t_p]Kbc\e>T%QN(e,%< n^sh9Q#4c:,it7 b0<` P:؇p[@,yN2n<$!:7*ܛtmwG(x10)=[ EJ%xU/ -0E_]ZRH^uW}*ߧu+ -{FnMO/f/ &SjU7d0L1FbD`535=LI Egѿ}2) =MIZ`Ԡ&E!@%;^-bNni .wŷm?%P;\`aݴǍ2gD! ӓ&H].wE#05l8WmݕLHzm#TS9#v@e\WF!KEn]y0lJFb0/>L?qy'QsTmb$ОQ bG ^ 6PJDẋ7n$o<׮SMuq"qlpKJRn:_mjGNTut'e^&@2MJ#vYypNQᖜ̰d5ՀgM6$~W6Ƅ|B}LMyv8/=i'vmEkpnӤ&fr޳$/xmA R0>UM Jb"2_?$縔2*rϋ(R-aOE޷K=՟;S"It}$jK)<9ٌ=JO{O |#v{ BɈW)hf:2DžރbK4l˦4/ʰ'W .xR=(=QG=Azbe̋B@CJ١7ПJN\'v݆QmB&Rk|D?T5?1? H * ῜X`my C5|.A)L)#N>L*KC g=w: OO=gڥ2%QKqyVIׂʅ[OIARn ӝ}&)tUKzaN68q2).rFR;؊˻2lA$Qei2C !S7Qz `ӭs,JU4hml'S<[!EMVc2>ݐp~O 4WmdM-2)JB#I@hy?`VӲQh݌y; ي3fpdE(vv֝Gםw*j͐LY`2W ϸ^agBl@ZvHD\(A{Z fzi)L7h :U.keJ?8f ݈cTշ!S}VsnQ] Rna'-{01P]0 >9S\H4܌)K#oA@5d“|> CǜjLv+88 ?<_rRɟe/$u,ӿ?L/{R풁\aZGa&H}ޑ9M%?am~:84mx>pU2RL<k &pO#H\"\״ /dRmBïRn\xI{ ںrj$Ppgꎭ6̱ה&W*xM_uF5bz[7!yy|fUX9PaqPTPEd\%VE!КA+hyMּ $;$02vܟ_OKpƱmJ)rT46E1k+d`͋ elУ3 aZ<\F̏\ΰ!1)[;*޲rvڐТ1 v=zĺMmLbC3@},Rמ[C^RԊ`ް0]?vGLCԟ{Qpp/|1O϶&!ݫϷ27Em6Ah_4zDPCھo}5Y'$r~K&¨hB'L-v9)E]#|cPd|}|~V2;d9TGoaa8ulZ!/u3*BWTy_Ӈ.%x٤*"S?'lcwEprQbQC7ep-ws- p\K#sXl(GCy RL늟AB" Q!%VUqcFh;ae׽0*\r[| %R!r|IVנęk\1:*f0JA/񹻥> fo#EO@w&6[7}eٯpttFlIwRܖ3BwI›hxl6^3uivRlvrSD]/2 SEK@)#] dLe^ :i%͹~@ sÿ藣~j2nGwr!^ź0/kIסc5|8+jJx3em#G$O0'OYQ|ߏIb)jV0eqd$)cL?E-&PS("+oy!3/!7IٺEs\3mjO~j'@5]T>(Q8 <4J!Qq5WH=SWDUy:{68@STbk"^s v37Z$O'BwԼs~;Oj2$9Ix7Ҳ:r6FL<*l$&֤k+vnr\|[ɚp?Ƅǿf9$C¦qjhv$-\y 2* ,x$E$qXj2GQcC7 1hbi6񥧣Z# ۧz/> o8_KZrQz`j:;(-]6Y+7cbH8k>>ӵ~ŞJXcEu]G_^ btc:ȠY<;r"ءMy6"'  [&vSln:mkX7_{E;A$ :1$D=^-.Pm<M^r$ۤD;:ɮ>5jyN`whn" .c$=^_(v~ot%c޷/5ATˇrˡDa"YܲJlE$O6g W!SiX*Ĺyt0z@|Gs7ta{/B>6kK>7 lXF$VX rw@kZ m+fx;`O YT]'UOVEh`=5QY'm,U˚f/pVp{i ٕ؞%@ d(JgGHBKJfUpHj _} !pGI(l祤}nR9#knϰ˶j?Sc AnPpE/]-2t`CJ^ݯ&@- 6\qqoW h2xp\ȄAUNU/ Lڝ/ۍgC9Tg~連h I*?: d.^f's`xG69"m$dR5O|j{tm(ҋ$ۮ\I8$7\xDbs+T;N`\hcʬVM>WB%lRWKOLuEV`9h?|*{}}"ӸָB5&M.hu[G;y@uĵAyLZ>1%aGh@x;+B_PSWTem?Ql2AvE=*V+R(V_7|ioBȲٴOWon)mqJtSg\cʱ0“s!$i)(M[Qxvٵrf)S'TܙU6"?}ThܲJƺN4=Qzf5yv=Hu 􆡇mӍ*}٨mp2avйA*f$i`1R ePݷSb5NYV!"!/BU/5LU@ƍm&zc,js\RJ4}ݐ%gs03%[E2=z`qUPcS% : { rDŽҪ cF!'gr9l G 4Rh$O\_RF Y9IhO>~Z((1_xvL`6P_[C`BK$$eA%_H 2+! 2]*a P,M -- U@CocF_"sp < G7a7n˹|/b_~\OzQvk8jb@; >c cboQKwT/TpK \HB TOoFڀ Cޅ5{o@0 $ QXlgQ n&n;[lSƄYW9J+2&ų(DVy9yJ'&5 x6W@I'-m~G|jbz/ٕC\|T8 W5`GI㢭k,CZ@c(t*btv~\#]^(Bll b|1C(}`>nq'V,şhp G85Z/Uj$RDR^ЮsV~u>8'"'+*w;I>B)+Füb:9߃  E~xLWEN !UQGK  41_jTl/m_<O]1R?ÁrUNA ${x^e.:jכ5TW烷kWPz\Rb*>=w3) R6)k7c?'k6O<_i?xkrN1D1ŹC7L:UVyi]J#4)'mEǛ+o4tbOn[@ؙ|KYgPAZ᚛ڳ?`i'| g+w}^嵭@;%V!a7ݣ{ĥ4I%I47?<0e 9':d1`Ǭ{5tI@Gzj;ݷ22=G"9E~摄LD6ttuxnu&ΐjpv8Ŵ"ny uuU'yЖ N{kͣvmd َ攄Y$UmV~/dR~uղW+~|@U93[*ZO9فuoI߷IB{I G6,E `fBlX]F=r]Zbɘ􃫘Ngݭ(j0)\B$Y旙+EeZWlsWMV gj(}Vy7ЌUOWW=^VIiY,7%\>xֈ>Zoýb ʜ£Hq $Ž ďbWWJ5Rq]Уo?G\cd"/ܭӒ-n';0>;$rZ! r6^Ig}]J ǂ=j#hcA(mO *1<e@5:Z*UWպH&і@+p&tԶo.rA5C4Z\5}vJ_c%suJ?5u)'NܾDQNU9l*edJ 7ဢ+!)P=dcQOʭZft~yyBA:>f.|CHڕ$t)yD^nP`Cnn uǂk`Lqmv$uX<H,*N!=[(Wuubܡ[%)؅qqcYtdBS.Nۣcb}Ǘ/1d]UKwX/aIۚ `M׳՝ڙNfJ~UޝMٰQqRYO|#-Jjr1QB?t=M7COCt-szRoaB(ot߼Y D&tXBp4 ynd R/Z {oU zՂ6L߿V,,z!7T8{ ^I6H2NwDFمoM8{b缂,Y4 [{^L.a+T@D& R+Tf*컯 9>7+SY{M&L͆qP(mk16>@s q/$^W<3Jc{΁9\[ (JET$ȳY#`+an|f̫i)CO X{i[ѮU7HxA|j^nXfv/1\#.:)4%QigE߷A%NU _ϫ.({8IOg{O,a>pUk:Q w`wr;sB,3KO8x1^#Z(]@\'L7ب} AVnS(|Qymo2?X [ %D3쯁\ҕ=Ffc i!8PDyjEUwIJ_Ynฮs#XKR=YBJ_40[~(a&;Yu Ou:Kccu7)SpRk-Ci h!L<\ l9+2r#R\ߖ^ ViSAwjܢ<:ooo<`ռ6f8l{J{0L9a'l}|NߕwO/\¹ە.'ўyVu3U^P1G@fBICM׎Jj 0thvC]K8~H-ӿ*{Cκٟ Uz7(6;+c #N~R(žCɬ<Su|H6aV}jaP)y;z\Rt=1ywy6nG}1&pQisp؝gFhɝfa|A+ƍû͂ؽ0Y 1>4D"ύJ Iw ;z,GcŨaGS <9*d]X?ycDdX׺vz/J44$|?'.1C$7J"dX"I5*78=mڄ&_gVٔݜO¯"B)A< WGh6&Mu_2pE`e,h*s#H,G\G܄wbS+1uq@JV l@9丧xi [cl&_+Cre&OT0NS[!Lus]*䕻3݄;QI%%UI}&h~q%3}253in|Js!Mft:?tx24ޅx ^[Jmq|6d-UB[zZ]좋dA ڟ`eea~/JW<=[i`Z 95j)jŰUw|U.tT+D@(=zytLB"觊9(ƛR/,QUQ) wa37vrA8?M!\^!8)CMMsPKU'xֿO2W5|]߷BM閪 "cێa}$vR B0:"xi {@S^9"*P)vC ?ϫD[oJ/,$h]! „EoaR0I^w8cp<,ӠmxK?-}GG)/qfV0vLE}!`SiyC ۦj,BFoN7o>q ^ :.ɿ9h}%AmZ&Me 2 Sc+vntX-(zoF }Nϑ xlmC8\Za>pQev~4rMȌvmWv,Cl n+;I8U}2fnira wM)z> 7Ni*j8Ƒ pUx\)̸Wu,[ᛚǥ*A$=lwܳƖiDyU3rHs3nN|RvP o`&-OWږE n_X'P.X&P#dJԏyPUGO:E:p]P1)۸HciCs$QV%}O9FfEUٔ*ydJ:XvYޥh>~dnd5݉E;1Ir4umL?߆'O7L͆h1k$2ZǿϗPI79)jo.8[݁`I6N$C?;Sc$A.KBVt‹kJmM kb*. 'WKt-KVFŚ@=-v>L5cF'fڜ'.O9ܬ'gy}Mj0 FLk4eWCS]&z'DM&\e*hp$ȮcSZFS_mVrV۱%Z WAO^l8 !߉^~Sēn~Nq;4ߣ)oEmݸw<9-;xGwW8ɬ"S鉕@gS`z?3{ 5vt$Z N.Ul&HjzKQn;^`G͏vqSuUw_sCOrYyb>K7*QoK"dE=Q&ʷlgV>" Ul s߱,=[!] #Жk-@߈wP O▄YeWڡp2uX|o<3*'Gv[1KZ X!rCkڕx0† 'GW OT*ϱ _?dZhwEU$vo =/ Z$ :_&NsC<,xTzZczPYo`:q ͉yfKu3m#ڵDIHmUz?}Y/VUl$P=iΐ-%௿]f\G(GY]|7iKHUax;g`pu \w!r632 2XWQ鞜gX`F7Id}uk*XcGs"HBlE.P|}ŶGә1k]E`ܑrfe4y;֊sKF1^٩*l'sz)G5 Y4h^Y~:ٮfjuyf)cYce"]{wnN} C F.RI%x%RSȄ!ʣeyxr84׮ z[1ϯ5,7 "Bz,ytS/@FfΌe4*{Cx_C7+}yFChk^hӪXSk9!>ii`oF+`\V3*Stt(Xŝz3EM6AQ.Z_@gS q3UDSxc$9X h/V^ #5K {glȧy wToGvfԾ?&GQ ?ѩGD/@5**g_DD=l}:v m3ABoq3-b3rqTmӤ.N|ridtNPh)Ob404f0yv&,F <ρ?VD?ZVz$q ^ 4iѽM2;ڥAR$M'sm~=iXTmP>z 5>Hh/ 1J)[pJ§Riա.II0^={k7X!u1!|IûY6Q3tiYо\*0v+ڼw /Ʌ#ĉ CTcǞa-9#SDE6>x8w@V:l-1-{IpeH1wsuK,S:[h|8SgHM tf>0+^\Ş~#khH^_}J6@HWH9]֥֜K:,S g: }ʩ fld.>c~~f7Щ߯y{DJfU։3E.84a2_F \HIō}/S  shK>pb AI>QNN`AYI>ZݲxbԹ?Ҡ.Y[yԔ0:IV#$HAg.i`/?`ĽRd_8}ǞN0>q̌(EZdHKLw{%G֪o$جh^ǔgV+AV gϧcƙ*3<.kF/Awt \0o8K`0Yu"OOP>;(ۃb\Ls)fi@>0BҴVng`zEù`&3ZծZXgOWT|)+Au HiVֈS۲ҼLT*pdz_n4 uab"#˸Tyhe MNi@cG55:!aqIyU*N?Ln&1$"WH|{=zMY)=NRY9%S3ubBl)n,.*)dяlPT6ZZ#N[>"ٚN֋6^Do0Y#w{+|k#̜CrȭH $jK3H[GBe8W(V`^Cϓ Ќ@&V݉9ZUF{ɯlf.+X[zTn KބM ja7DW=^)@XhJzl@B)V7Mj$=\sQ6ݔ1e#ƺT#Ub8#ɚjO#_pA# Pxb{ `J7 r W;=NbB _D>\3ذ<V#}nT*n2v)QNݳ#OrH@Zv uQrE$ ^ K-c# tH:[  L ,X^c\ZKtΥ&fykmӕzkq mIsb~x9 ^ɻW9@ah0Cc{]aMN'`쾑YtDDt}?#@a?AL$#;b1VK5f k ųxg'd$n&QS6J%u4ܸxf!;gu_lPKI dVsTWC5Z&.3 rb~<ێV|1"&gr!έxw9NPVM ;Ӟԓ,Ew .^+i+ʿ \&yYáKP17$e, KaG}n6L2? 84z*MjB)'꒎}Y=9SO|(pk}{W 8Cf9B0Q)c {ȼ!Q+&^mHz+x0}lRh79F񋓉?Cfkߣs-@d\;kdFhp]tӖ^Ñl[y2L3ؑ,x8eh=Z9.ik 8\!KhCB5ױMk$=lg`;{F҆)AN'2>xF &0`t_(»D \ćf a2G$RD~hkL 8 iN>/ /3o)_Je/L0 (@΀XxpSH#lf53'ro(dYP=W&-q yr>u^sɊLF($Ik5)k"t64GǯX0o ݲ8Yo't`ڟ9(Qӣx1ڣB8Zm)bkn%m=yRotNܰB([LZIڥZbH`n9H(VYaQ?к8b3Z%kZP%H0-Njq7gWߟ>"Mb]EQhۗEDBy5mf$h^fʠE>UW~i $d=: ZDE+bq{ꪊ:KK8|̶E,1 nčmǼ)h״ʲb  {c̳6{`MsSUCkJTE5$Wf8{%%C,dJl,SSt/p]>W7lVuJ$Cz9Ofn 18q!_LXdW&ѓ4LH+j7iPr$W>7tt-slm_ EdbwNQ͈?OMl>`94g\s֕ ToV<;+haX=4ʚ  F F6ܱ1\Ph$: ذU7ti=S{A e4ÖEahARCXZ9^I*oIiڼDνFcT5*ϧ)!y ar}Aȵ“**e?SrzTSRCgjdנy?B2 |BKyt{{1:V%R<)v?ڥmE9<"೮`lMr^֨6T +X[ ]}>:o% n!M]zLcDJZ7yI㺯Mߝ`8#9YI^1C{IB#+3e=EN:E(|ʰJ57<Ǵɉxc2*lW[p%>h&wX }qyrA [%~Du/H}BuJ+<}ǁ2+'~]4CRNΕ(m^˛ǩ zա5& .?MVc3dj:dP |tw9F>4ָ$FM0 %kt' ۄ fNRb:hKb,W$bl2 %,O@*%Ht6ǶO}@sSW͒[r㔼1Qi?kaFI'D{%|؇̵sN}u.e UcfQ~p, ؀L JVS⧴ܡ+^8/#0;g+lj[i[~wB SvqCr2a̙ݐc .p,hnOl^t/IpF;Q>R$ϲOI$y^*$Udcuhgީ~R0AI>u9/mS<ȳȢl@όOXo v8H%%Ĝ> \V),Gqt`e {t$`gt`e3T#Fќ]1c(ۺ ihE<sY^jj?QrrZsKvEQ'ɿ\м YIrmٚ %FP͆X͕;򥱍V`V5gZ $Ū xРrb (,. 1lB*\2FV7'n M-E'R,I!p_w5҆ *73Ĉݴ49730YSm4qټ#C`nY2Qo[!_ ?^}=]Q`vdR$Vc YXfDS !r YƢT AQ҆[Y3Y%qj񻭓jR|ΙRp5?,?]ʼC#!VٍdݻsdPL-Q/^ŒpLliBAqZ_{ްKTl YHACwEBυ^w5+9*/j>l?HՑ>!| T#̢o)IЅ>A uInV#}STPD5o"\֕C+N\ W{=)P in5EVDXJFs9.=]`F>}ГTǣ>9TwO Z2 s7@i% &wa|753% lΞѢWo?9L}h.Dϵ׽pBRcD] ̺0A..e⮾^pPKѴriKAHY*6?ԿgJ^O yO*=HYV1j8A*w23G.nX,d=S5 xT`x*XOl4YenaHC1I%= 틧}EH/].8OiB|'L3r|=&[!S^fUif^^v5(_'J[ ƴ_x<^?1НA"`Ub@@x5GsFs nGg̪θgѭw]NX QXZ8o۞ 4(Q8$zSIdyMWDž:OHiH5c/P @ԋn/@)$# hK/š_vكC2];:Ӡ^ !0'{LŐ]h[ayRKX^.8h끍;]]t E+10@Td"੒YfFZYݨ|p[tWܷ tvZcۅ.nF7X F< =w%2+^S=S2.]o Q+Q;GP-QGDҔ=HhZ2#lUrMK{& PASnx96:<Vɗl{GP.3yq^;Y 7.󈀷ЭBՆBj)r'ZBbCQCq.CF?wVz ]^<|vM'響nTGItW}IV!_"'%+Xqm̓7N1Vnh wfψ Q2gDP4VW{,@3Ry3rN{ >ZX7Õ($I5d ?_EW'&9-̀>SąپJb!zLw|zo0>ư-8U^B}CȻOMsuo1wx6@tki4m_Z!pYr(6 9e dSO;j)P UcZYGHն|{HdA'm/$8A9H%cT|8P<ݣ bF !:?Vƃp&_)n2{OCdHnkoAh.Զ fWg7uyC*;ٍV^D4C0^ ٪ˇCK;*V7xF~[& Dp@v!qʳXsXa iRzʀ9>?os>N>4Ui=ѝI7G߆OB] t$Eeiǁj{A5t|?v /." +Pf1đ׽JfL؅=bE6$bxSyK42=}0K$FvQ\ 3G˯KZ\ClhCYRq*#Z #Au WD|?!F0VR<$5$Q&Wiw)]T{Κηhi"`g6|wf|;iڵj>HV_Yb?0A%%}LY Fs:Ng8]iG;?M+"7ozw8Taoaլa EA:Deȱw,)a.i -Yǣ+XHt*Rg (Dj5OJ6}-À쵬o&Eyg5Eq73UNL~#K;5Q;4~|AR~YW"v<Ӡ"B rOH G]mS^ ObkcyA\gm+AɗS$;cѨAUZmJ+r.d"tgyG>yeN a ٤(`%e]7G*MRDk-r %YhM`u5E+ɴ1Rf,[JdjI60O0`Zm+I>e1cUBXQ щ. hG Ċe=6 zjJ@*hH.㒸M\$bcsi[Y- {^/d.(㖥F>!PC]8)>j'Q\F_ђBMw_ɍXk=!f!VL;Uw[ xX.žrݤSHvH, )Of.^"JFY{C#}3Jқ37v1]"5Qӄ /M ZZ⫇14M#sSxk[X!HTϾsXjz_$)蝛eurΦUV5v}S2C[?vnid1lŋǀ'؏ n$q(-BhNȋV7D9^hmD%q' ˬt2y.A5a⽮ʥũyVMMWư) xq̷]:vq)=T\-+%f9.ϲh5eqq,ƂH*^w5Ύc0>p8M940HuŋjeQrcCO#ΓKO?(`)}jtf#9IR`nҥfb DmU OVIzx2b?x:D]sېhv5Ҩo}ud?:9Wxw0+vh Ǜ:x]ާ܇Pd>4, O ar[mG* &NH -u+eNJKU{g_uOEIi^y2;OEh%[Mn5Gl3>`!osfj#l =c+_7kʫwX({8t֓e<$F*wL:G7ϸ\@ !'RR$ >*zC,6 H$% ;]WCB*$}hT݇,\8qG.[&\%GH!hp+f(1Y ?-^ wcx~,|կ=p;=@ow %5ֵ#AC#̫A^"QւtDUS.i-?T.`N(`(]gk9 <.PO=7|bx )gj^I>CReRj4M;c6z-*cF5 p 8)[z ]p8n^qVXOB! eʛ+vuR/NՊ]:O9(CGUwAcF3yLP 7P|9PDd) ]YJHwnv:as .s6v[&Dm$Jpss VQbJz}䛮դHUq\k]9;qKay-W׀4Jetq~'_3 ZkZK+e%⩦%vJv KedQi~Kڽq@D_$`VR,g^]ֈ,2U(jmSS |\p84?sdp#-{zR!a.obN is3-!6BWH"d{|6}`ɍypWгG@Ԧy! r,?I4T[b#k#smK!kj6rk!+4Wzkߝ1B2B;7#t J=^b"slӗYɒqMn򂦪ؿbξ \j!3jS1W{wX߾q=rjHq2ľa]zы_BǺ\ (.b|t%s.$˪w?ƤOj@ŀ蕺\%ŐJB. LaH"0N$3}Xsf Xbǫꈨ(}=,֫6%*߻xNG ɓͤ51-S"aaS*(2_dw,^Pg"C5fKiڔXܪ4Dt+ ?BJ:mW'0Y-Q4#([IÝ)y p䍮HL>|YwW1$刉QӬ6w) pM /h'}lQ&FvV`WM\{O|q_6EX@4T{(-~y\s(ZT#}}a>DlbAf0FI:7 c I21+4 b!||hbTStz tF@;>7`C˒)B+SK] CRzZFop2ݥƠOݥ[u.2u'zVuC12ӫrNϞ5U~Q; η6Vg44cםѝ| zw9:gg7,nX%ƬJ v5 \R ;{j{c6BAdzl0U iF$Yh];B~#Z(\mSYOkͯqdo3ݼ#dd7vUBę9 9 kv]V^4x!$Ȋ?!% lM^JL؝3?a9;2+3F&\Ny*(($rx[(tub2BrjY 8/PY:(X&KtS:lq[5|$rmΝsT긄θ=*9ai,dz4e0E:er;!WJ3zVɼ RŶ3QhjR Ѵ{zwnL6|xQj0(((Q?HZzMհnkD %Yv<8ξE-< dB՞:Pa  *!ېN$$oҳx[-ۈմRdb14["Z{ W ke`. 1H p=MNпJ ݶ۵Y>Q~;..E09zM^$a.Vz[ЧOd h^  fF anD`Q8B,qXmZ5 t-䣶<?äHEhWXtuhp^ARbyS, 8)RsuUy!9((jƯgSm.lb|cT-bIkrM>%V"U~ʳZq|B7au"zYy[y\L^1Ye;i;{Hpm~u`^3SgZ<Ҙ ׋R_P=mTw.Ts@Z",5+fcmȿCQzk q<6K'Cmck^r.'Xkz,EP0TRb(ܟKMQv\H^фRúy,O K]|g!.UC(z+ ^GkUsDjpwy|aS(Ȕst:%:髯v,n0%xc"a Qgy6)&/{q{yf;̶ pʋ"U_d'p_359H_yUSʨg}"Y%<4qۘ?B1a laHѨcʥg$\|\u^Q?yG} .fR?ڑ{Uc;A -OXT{pͰG{ 9;^R("0 +ty?׷9}7Yٔn ɈXN\()һgDw/-kEilFHB^JL iPAC=XSψ̊HA j>r] 켽mwNo@2cu}>U"aԤgX6#|_wИ[7N) iqPĀJ]m:'(}Fވ']JrLf92 d+?nbgH, ێ_7q[pqf&%_%^2μB\ϒ3~.< C@1ф@֌jŵRm2O|-e.~@zSSV9=vka= q{(j K6=cID:oudha /!?!>=z(lO~W#X s (j񎹓 /ix J*^ڛc_L<ٮ9zb,_4@r@5}WRGj=kSKJ7~bxX1XW~ 2٣OHe2mKYhQThJ*s@ `K]|ʧ {RIDIK H#>Dĺ'լp[?ʇanT|-~C>,蛅fa.aEy~wqYd!wy"vJT#\bk)[I&;̜ŏ=\UT/{sܓDe왤3 *n9i]RRp'}rPUfB@1׸ULV剾[T|O]%Uk+!/KyM-F<Ɨ<.'Gꐂg=:#2fj5j.}G5z;h)U@r dQnkFM?[4]y;}"9X$Y6 -UywM\J h/:sw+ 3O֩,:\7 \I Rܾ^ɐ\n=@~TwOko mhw|yFZX3ӆ25n`yJڎT8F T% AX}7kq3"6q)G:uXWFt2uFxʮvւ9bIqTU$%?#^!!8]y`75/ީr3K.K~H $s*ZMeHyIӸ$ %gpaҁ]yWm7ZÃCj=Nz]Rp(ʇ3cbKaR)|qe^=\{6?[;q"!5L ח< 傕LY?P$FJ!mP乗S(i;Rp|T-Zzq n'&$Է2)6q(oݒ?(ŭE!Z0L}O'cJ2FC/e&q-,lo.Du~sfMA.B.l3d@,4wS:&dU'ߚ\ғepK* 418”^XCq[=0Yo#_Ώy#hGϼwt:tZ_]>t"G">Mk ء^$Y`xD˯K!?OhXZʻh$*fs YJR ulw|cƠ.#˃a$qimk56_m'(!.6p٥ V\1no/p_QLqWJYyʬRUxjGN41vw)ޥ.HzIY+G@crMbLU - 85,x*;@0_3zEWmxXcoAN3a)tPr9i_BX/Tu+TjJVش%ziSS0&+ ~7_l?.~ .|BxIhvѭϝfR8"2,twp[d.Gj=QEM_Fc\.o AC߬[|: g9Q|c*ZKc=,!},YKf+?'Xy9/}]{)7b 0YmoKMZ0 F(x 4E1w;9ʩ8:v8P~6~5mc7{`m UUY,\O Z-ub"c63smJ8B"MQ%X)Reې3r`#F*@@$PZS>t#EBx *ZdKZ{ɒc/^#wNqZ ˺(:k,\DP;1up3&9ڣ V˙@oVV,+pa>XéGe ^ZgB ПBYZUR%AuOB=xx-`Ќt9RW\+mHFs!e?K.\ 1NW \g i׆om@(9c~QSXūU޷JAIoj*vޝhlwBf<bSmڭ9'Y o$YBtɍE2񷼱,>ene^[uv'yxdŠTʶٌqZYGtGKCurFt>Kk S+ij*̃ygK W(t1.ಷ<ƹ5Y8. sQ?3lZӀ|k*gFK`/\"Xj39^ӹĄo@N`<OsX@؅cOW)D騯=]9m=eL.h܌O (jY f̱mD[A5Ί-2;VF,I o*[Z@L|}:ݴ/,Dtſ-{rߺoLc!!>R+:`H]q*܇pqsN94S mz`M=/OQ/ߐ!2YFb:Y8ǜۚF8j 00S3,5*8ߡv]ܽCrnI '{/ O*wh U89nS9p#?|5O >V3ȎuʁcA/q;.s7|rOoW('VX=`@QYL/E9 Kl1Xtx$Pn_"u<UO$?Q>=#XbJٮ?Q?1~~=X25e@+U{e^[jxa?h@ [&82YQt?{2F5X& z)>F/Nܕ̽(h<{.݃Yw$FhY+t(F?(~7A0nFTy (_#'č.zgh@ݛD\>{bّxcUG^sdW+l%uCR8\tɫzL{t+\ii5p{3֘ |:5g!܃8ЊU 2IeLx)p6O/ @bDvcr\ۂdA:K >Nut.wzi3bxLgz:xXaQM5k}Dm?,}cF̯`(Q S+HT?lc~:v|6 #5rr:78JjIv zwvz0q͙Isw "4@343 yֈk?}2$,ak)湲W67+7.ΩswˑLҴ3cfkswBҽZ3j]f͑gVd}hgaZwP# oG^$K鼘e-9@xlTTAd