summaryrefslogtreecommitdiff
path: root/src/complex/csqrt.c
blob: 8a2ba608012230d79a16ce788feb96e4b4d53a0f (plain) (blame)
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/* origin: FreeBSD /usr/src/lib/msun/src/s_csqrt.c */
/*-
 * Copyright (c) 2007 David Schultz <das@FreeBSD.ORG>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

#include "libm.h"

/*
 * gcc doesn't implement complex multiplication or division correctly,
 * so we need to handle infinities specially. We turn on this pragma to
 * notify conforming c99 compilers that the fast-but-incorrect code that
 * gcc generates is acceptable, since the special cases have already been
 * handled.
 */
#pragma STDC CX_LIMITED_RANGE ON

/* We risk spurious overflow for components >= DBL_MAX / (1 + sqrt(2)). */
#define THRESH  0x1.a827999fcef32p+1022

double complex csqrt(double complex z)
{
	double complex result;
	double a, b;
	double t;
	int scale;

	a = creal(z);
	b = cimag(z);

	/* Handle special cases. */
	if (z == 0)
		return CMPLX(0, b);
	if (isinf(b))
		return CMPLX(INFINITY, b);
	if (isnan(a)) {
		t = (b - b) / (b - b);  /* raise invalid if b is not a NaN */
		return CMPLX(a, t);   /* return NaN + NaN i */
	}
	if (isinf(a)) {
		/*
		 * csqrt(inf + NaN i)  = inf +  NaN i
		 * csqrt(inf + y i)    = inf +  0 i
		 * csqrt(-inf + NaN i) = NaN +- inf i
		 * csqrt(-inf + y i)   = 0   +  inf i
		 */
		if (signbit(a))
			return CMPLX(fabs(b - b), copysign(a, b));
		else
			return CMPLX(a, copysign(b - b, b));
	}
	/*
	 * The remaining special case (b is NaN) is handled just fine by
	 * the normal code path below.
	 */

	/* Scale to avoid overflow. */
	if (fabs(a) >= THRESH || fabs(b) >= THRESH) {
		a *= 0.25;
		b *= 0.25;
		scale = 1;
	} else {
		scale = 0;
	}

	/* Algorithm 312, CACM vol 10, Oct 1967. */
	if (a >= 0) {
		t = sqrt((a + hypot(a, b)) * 0.5);
		result = CMPLX(t, b / (2 * t));
	} else {
		t = sqrt((-a + hypot(a, b)) * 0.5);
		result = CMPLX(fabs(b) / (2 * t), copysign(t, b));
	}

	/* Rescale. */
	if (scale)
		result *= 2;
	return result;
}
QNI &\si!Oy xil˔tϧQ&%Jd;Fv5c-ZEӲĻDy\⁎< :.Ju)gKS/+ސg++x`QK#lxCs=-)3%SƝ(1 i|W0]3D-]%֤M|5DArɦp&7-eA cXʉ Aet .1pO7d[P1u"B%+ocK0M^hcDK=D ml,bI4mb3iLM``RDӴorNE%"W\_^:h"$=裟 eˍ{BJ'Ŷ`2L[:4ЅzaTf/c6wH6[-轇v"rc~qڰ%9@ F"w],,ndrdU'02 eӟ/L(7$> gbڈˋ I憓&4Ǒh$awd4p\{*ʹ'B*I| 1l^i w掘3̫~_`a篚ĈY NOny0/y@)ߓ}c؉(~KjqtߐzVW I? H9A! ]|Qtf-:ݦK(m9&w :7HΊElx/Ӡ+J>&SY4{8ޡh3yK`XC\KePءUM^{v'{p;겣y2GH",}( < 7cg4m P0)j ee)RPIf笋^}0qLr9_B)qD xzШr,C,^ٵ5%l剥<21z>S*D&HQ h.;th82ަPy-Tz9mr4ڹAoS bqaHf=Y@A-#Ȃ1F _vRh" @ , -/]6;뼕 &s56JJ/؍ӊN-)_hԢ2E7%Z˿8V K)hǙݧ=03G|rAh0{I|7ͱ( W?m"]AhG3S *G?#nte$ZofCW-h=D,RP b^䧛 ЮZp0@dfdQ{ribni]F/*&g (I0͢,xn١i{jKN>Jkz@w(6_+v,‚lԺe91[P/;1L*GnohfP30 C ^-gx kBQ&P3M{JXyᡁ-誷 x' $ '6;R3@W!h+3lܷh 0jll>MpԚ<֌vVk!y  d>ץPd8c'a|I ~wGpfk ![&ހ@)c]Y(}L?6Y/FO jcB(OJʠ@өS*e.ke 1ٿ4_BKr3Sx%^¦!0 O32 A@Jޙ/㽛pug^b+Z{91$$zq=| IHWW0Ώhg3B u;`ĢƗZU6i?^\rKh N9RetC oH @inYJmd8V;Mּm )F=m%iNԔȺ_M49&VJsa3΀ϸ X|jۢ]MR: >ޯ93f "xn6)Ӿ2ð.]%$zԩJ9k?`叄j%ߥ.*Ҟu*J̔Gt卲c@e7K҃>Es,5@hF^pEPivvAk_r(Ht>>j gb} 8>."0dn[GvFRCu!-h6$M˧RGdX76NJ b ^XZ*'P<qppAe,icjs}3ɪ *nPf). _4@8Q/b]̄gAѮkuUrPn,w V<.4h5=9o5i)"xW[Owh `C 2jMW }ܜjFR{WmL. d㘖8W-LgHBQkzFrZn9;ȉݑ0$F;^Y~P&E V˥F1b$D&?Hvt끊D=Ep`od}ujr 5k.QXݨbihɮNr5ވaOp%-;w9/,G19\ "Tׄ+L։A}D|@#ЯΌ+N\ƨWh`YT⺦mڑg2pCsm ~֝`$#zɋv/w]\tA6- >Jbրv3F!T h|ms:A1`wozjPPbm i0^wI Mަ-eX#%%\6B+6'8t8z'+b7./F1>AS Xj}a(m=<91ݽ66Usl?/g8haQBz5]^%.EEw\j'w8q-\ѤtHb1Η,8/xлd9mϣI&s"F Y`;ޏR!Bf4Ն E !h0d|VWlpJb0. &¶?)o uoDrxH8"m_Ŝ䜔oII#R@RUG]8,c ]rbrߡI{6 E &M2Ƶ.:5-ѩTArPeiJ%p iᘫ/c͑Xpw$H܆C CĆjF^ڢMOE^_|sBƃόƤhI$Lu6LI̔HRAtpRh9Ԉ$TfO6=$ͺڤlbvj >op:;,M6,l륀jAK8BFt(cnI ,!rMt2 4RztLm&*}FVA'x Av2 O"pj6dqD_nL\ٗlYh:i⡋>t|;|\gFL&MPʵG6J#7 r&,BxrX 4bc@D.X¨|.Wr"ZF!Kf2RFldȋ1̍][Z'ӜؖTIJOMgEAiF7i'ƽeV'{ baz}ōc:@]mD|4ՒRd`;&nOX'*elNu:QІS yؑY LOajYO,aiF_r?%D}tpRɵ{[A: tӻ扮ep(YԽJec'/@~xo2ih:+Qπ՟,Kf5 L 4gcb]fڃ 4KHGZn"$a*n8/xA[9BI2wd Aa@򶴇+f棫cp/?#A5{6gSwk2m\6o:w`cVMptuVw[/<ӈO~}v,#_O(@Fcm}DcF i7+F3e7>@<)+^>1ϔUtrhFM1[D{ 0`6yJᦂkҝ6&0StÅ9FYiLE6 *%]b wyO>ԋmLMO`EaW0|y/껐WyX-1Xz[e.*|6YPy Ht%[٧\jP y+ϐH6('}^X{vlZ/>fA(`#*x"ADS ~B({ bx[s@[BC>oհB |OZWphu˃Lǎ-<}/i^+áwJxB>8]߸Ux&-!*FͣN`P/>*̈́چFR8V;imEAp)^aEXsEanW;O" X4i͓yɻ<7.Gv섣zY+1No -X@Hjvy m9-tʙLZwN e44G^ڨ`{?M>^vnM<Ank5cS:O^}!k&]gpDvxy@>[Hd-3{ٴ)u"[}>)#^2sB&^jLXVcAw'7$;*СJuŹNhş {Hba|"ݸUR˩عӼt9ոL Ɗ#+N:Z^ dEl*8(9֐jD /&.r(qbx>v.X? AP8^/BȕYͰٮU;tcjš.kuNA>Q,a9iJc pNfm{bqN{Z4˭T:zJ<-ctF63Cݕ)% ٮe\l)CzIQN"F^RJדZ h6"3|sGXgL, K_E $a5 saxW7-f{c|`o,uW\z&v'wFdU܉W!=<0X EQ_B-1;I(!&?U469|8c6jޝvQ8硨^&Z4GrfjCPKtXV\њ"XtT,Vr^c :艭7v쾩 9zG&ǵ .aKuJoiG2jCHC@Je%hMjwkF[;1!"ٸӮZRc.UOŸ~t7;d2ID8¤v~T'Ǘޚ3$q.FWXcc2qs4,? S3"s0SX ddHJX4B |h*8`ŤF;|_mĬ<Ս6AjGHt Wj[Mn3쳔 "DDGš`SH8m k`+X\1GN mL\2[x[6@//:LEF~@g]8:!CB z St[,4 MPGlaGvK.d3nӫ񌴡 g7FW3PD,#zM"=|GO: ԩ$i)Uf*. +kA5]YŨgd jQ#gvҶc=Rf/,`G:X0N`N2VP,vxq]]1FR%RS8XGstm' ܂OLjvQ4#Ee!vraXӕ>[b@|Fou 7k;upxF*'T8x$tW[^]5*H,Q+|AZ;'iWʜa8TLKiI$Ȁ2=KNNT5?z^D/VdS2RTZʺERջ3ֽcWS7SWa&!xp^#ׄv!ȑT!xw6@mJMߙ"-{yJ+G߱\L@YSoyMr4ۍnNX壛-o)BI|,Yog̵ J29pQ"2-H eV#a8|`UvV&,p+bqL+{g3VSi^ڒ<=oYDV $˧sc*LCP&!c3OT_Aa#CV&X;pbgW >(D+iq@ʥIⷁ0{@qRGpm?tB]v`cį^y߽҈n9J{tI]0B! ,M6!55^ =O,V91ڷR7gRg^{=81M'bS:~,].#ԝ?ک_oJ$gC#by1vvƩ=q%4m)<Ƕ!+V"ҭ ͔9;7Z$ޛƃ,^95.x^*[l +ATgA2w&w4ή+ |{D4ThE!GXǔ EZH7EMw*qJ9fCxcA2z NQ*y5 *S',` {7o<`ePiB65ѿk6jiF ý #$Nq))`Em19UHN0pf8^#P3,NtaQ༶}h|YƓLwk,=0Vo:q{]K\^@~ڝIY"zHウ&YvhpZsFur.ݓKv7vg:Z8}kW[~|j[Yg0WtЫ)OE]C:f~|&5oc=*@'iAVQn$jr򤽔$=ąl6 <- A8q˧ת 0 hAt*Dl &Z#fty 1d1[Bg LZza :gtrI f%&HKw:08,#9Lc=baS]Lj;B#ghpZ69;_I8]r 4-9j)rsSLxLWƇV2cLsC]{ uux(%6"Dz4FR9LDgcjE 5HuKZmRld5Xmgq} tdoǘO')tن)srTh^̭e- --_nNDI/C[*$c E.@sBK~a߈ƱBF vz(Gj̡RGefׄ^aڃGR^0%Hv15wAy%<[Y<&(-.r)Gc"9 |T|7mv7 /GAs's紺,Z{RaS^)2X4\7>OƐ ݙG}caUhQSYWĘ6G NY9o|L:-ιhN= PV#xd\}8 My#Fv:a?'*4ⱆCrp54Рc bŸs]ĔObZA,/)Ȗr @tԚaW_l]%-q*m!Lƶ' q+V jk%^EV{c K .u+_BWvY<e5ԒY`UlY-Zޤ|xsb F67AE/xn{AX{m` hrBܑW\vIvj/`R@02^- K e(\ lhwzc6i: q)U&'C;3d`च|*+2{+F55:u?/xKؑucK.0Mt/!aVPW@);i&XBK<>(ohj3dON7uؒ)Xv\H+Ԫeyg^ǀI1R3P9ЗMq͓ph jhydio=[bRPmp&cT&ED{Ode㓀'UݾqK9fb5{tr E4Y.QAL%F+mmUG ^O9G/ɳxxMG厞C4t>|4Ay6V;B_:E:Q@IS-05!i̯Zv~VB>1Q:ɕFf+A va3yIR戫=;S D/!6, c(rj#0?&;8߼I knqeYS\F~;ƻ5@Kog,]BPk6f4ZRɄ8UǟFEm@6DӴ["6,N(֓7Ϊ WZGFGs +WTI7X`UTn,  1+LPQxնX_''2D[,f<3XƽcW:^\(;XQ09k;z'> \;Wg45H=|y tǬ@zڄϪC|ʘܦU/Φ9PٛoxaH'{v1ph_ f 5dj+]]%Mv8oe)y1^MvUy<-5+۸"õt:ٝ`?(I^ïhf\k0[Av/gA 9n4܋a_d͝rdYoc>=}4Sˬ^4GÕLfrR~bF`xG,kq5sN]oQDZ _ආ87V(ap㤃pFAEwMx< |G[,`o}ӡj.G=x`.T]ڑL:-]̛dטZK `R:)rLn ;p)nthHAy@ȰtZ$DmަhʛGcuUsh~@֧]Q"j &7F#㙋QAXUJ|bl!=-.jfu۵h+?H}P/G߭ڻ`K;AR f H6 R G=eA%FvۦYFZ3R`n(<Y(_ѫ9y|kF&|!]!̎fz}кl5]Pu{=۫:V{Oe\->*8NYΨ4 5vuP_,$#[^eoK >衤<~qp˕ҠR |Q+ޯވ_u9BT/Ke / M=kp>ݭ#oDo o{QrTrP(Cr_YxVTwf6M;f"c~8X-l{iPmn*6_BEw6 zYcƃXm E BH} A ~l{ i Ї  q @2C͍_^on(aIk;~"テ"z_)mW2 jy _Q)E(oMk)  j4Da% Ó!ߧ a9:?DۯRw 7>˒wGNt7^l(;tta~{o˘b6z( ? Oo;^mmrA}a؏ab]^`jc*ҭM~ ܈ c@h"|)xDbSL "U3A__{x-OUn[XoB^.8Z u5h}CNp_.3=ׯy>ⶽE}J oN I9x^V˩2\= [q.M2Fk}|럕33:s[i!Nҍ 60;1X(=E~?~Y!g飲lP?T苲\ꜙSY$xLl LcemZ_ogݟ=x|v$V= %Y\K&# `^緞"gD叅^{xkk-榘O[iO?RjIe7>ውA<yL'yw<7b/ݩ8 VQml=VfkIg_y/S<'xL΂Ω'LZ=A*$.SLHtoxJ,&VRؐ$[%D̏yRmY5'$'>!YqEkILAq\=o6K2Q$ZQ|hte5>ԃw2ՁEbmDk4|MA$Z!٭u.}(8F314 5g3Y I(Zh}/H5hzۚ^EjD$+֨պE9SAn[TbEVY%[㣨X4~QF>/x>o֏mA9l銞)i-S-R{iTEVcthIHVαRE:rD4[D=JluIr^*FY`Fr| I˲hxD3!Y\3!E"6G @-ׂ$]+yIW{Մ$8MR)X&%bT&9^gE4I'81)#guE4I.W s*["5,Aq D㭙lTE?,~t$HM*{qj[- "AtHxÛ! ~R"%@ n`j,|WF<cWrݠ#xN{dxr&N s Z:֡;6BHAंr~FwI3,>ԷS$q+ VuHdw-hQ_6Jo[Vd[4r)hZժA:ӊ6M$9:bJA8LOhsYA?/z ~^ 2zO\chjaߓB,DR6ћ|)ƊfM|)ȞךAUoO/sM+zhڡ dt.-×,ںq~jhR%hkV-huΚfD%p訔i AbM;phR-ty%]}h0Wj^T|)voėQӊ&wjR'q;k7//v|%OghBƞ/Y^ܨjѼV=γeTJRGYJ!A" Zl|T^$M6 MVP$ij$  .L&U嘪D=hV?M zPϋArPՔF?DcƁXwAa^(-ݠhhKPpe3tF&{~Q?]gS< gn8QZg^TQ&a  @ex㟃Nb$A(%~KUfB[/(5{`T,"""2U(;PddGl6}eėDHVʸa8y ח->F9ێ"nJOnjf/au儅&rx޶o]w<tcT>([)J~i'؅B \| yxPB K~KB/rm:vpm4ۜTKH?to'Hs.&3ok`*""JN-L^~^eWgP$zPkVU41%ϧbO<_AA]>ţMh׶ۃaӟxzpJKxf%vNxJRyMEqaLPm(v{.M2ѩ|%uɰ$zO|&^ Uٍm$6(zn\p߫~KvU\swu2 >ڭ f >JЊ5+eVx KL,I v Cf${?po'5œ@_xhu̔BPJ:vQ7vxWs`>ժڥhIo7ڸSp;66tl?pj햪J)ZiT) ٽu}_l`ymnwA`4װ`Չ /9L}) Bmۿ` fj: ]bf s+1U .va:\.p5Mk̀{ls/ɾnwt`7NXt02K&4oN]zF`A5!aLl6-i}kOF (3əOon=ErK>b (J. L8^>E8nw &2Rn +eA`!LD*"9ب6>{)oa}T\IJ|Nnp9y>O2o(tHv:?L`yߡ ` uYlφTg1< k2BZ*-Z&i@̗v r_62&>|ڮO]ҧY ͆Hr6xO=[ٙUenȮ$(r,(A [a*ln&nvRwǍnx\oZVMCN LTnߴ·(o1I3!. ='Շbu($h>qS,rwZ|/e;53AN^75Yzд5%X@"OTQEQ4 Ⱦ\pIאn6ƺ'6⦮3N6M}7!mr?ը T+&ԧLMmtӤQ: ԽsAS-r%}:ȩ ZIPP;}mV&u,r1N24w'MNF|0dkK- Glvug2+9괫Z$j>?M)>q~*y͠驁cvz0X䲓{j3'\3'\r!UӪ~z0;2m;4UATG-NNPaA|(<>SS?eR+EsO]HTX %_;$a ~KdG?C9,CUuY-eU߻%~~zPzI6 ǰ>Ԃ:fu(5Ccǰ}23ÏunfY$`T)/ W4qZhtF,?GBi69t%_<ţ h$q甶 "ԓiOM$loS ͒M8wtɈqλ)VNц)G ABa#a4HLeb‘E oѪvbK,i@왟s4c8l&MʢփGd=:ErMEKiK=k7 3:ٜmrgќM~{qGL.Y]wCÆ95'Y1:Vtϊ ~8ZSȊlŬvgbӕ@d܂II)Z3w:oQ{5 y7$٤MmYI6I^Vp~ S]XD;ŭ\[ wJCʳVBjS9Z4rG*I >ct9!C:~]nFz_~TLx?}Ih :{ŤߍZ!veFe=A1/VQVz2WD3.AxA& ]XOW~>u+UFX\j%k{c2:>YS<X۝:ޒn4^=q?!&O*)M /g=ţ=J h!s c cȎDž7oR]58P-~ROߔ3Eѷ9u,])7W./vRl!лz +=W_e~S<yTe>={QhZ(2ذ^?o'(ۉ1}vbR iŀI} j50*ZFvi=@oxgc -Cvbe.fUM!V8ƙYWgc~o[]hX: ^Q{wyaXO,忧xVd2FA# W?Vj0V*]mj p6r aD7O;.W oz뒂K\V+~vE>_Q;Lɒ." ^>榪ynEԓN-c)^_۾?Y<|\U1X>/c!Lxir VLAS*KNƳODe^q TC/*+<" BKéf6$»Fmd 2h*x##ˉ7JVUvD)=6B4Tg1slhcICնbe*)GtU;9f<zܟ'ݎo G`C P6a=6N߮&_e=?n< I-]he|=-y{uauBףsCiГ;.X5P;V>wY;A:zg=B'|hfM^;E*ע,U+qo 4?J>E_!_ 1˫rӬΈI^NUu<^Ղ~q$G\ ]Tst^B=$LeRg{Wx5W__Or>>EY4akg(h csb"p{]yX(&w6q$y"0pB#t\Bx1v>'D!|=s^q=M2xxBG㉎a<샀8L?r%Y E|nnaЇ?,gOhjz{=8 /j< -ʦ͆[9uT͊Ɖى)26H$w[8m(ϳ< $=z??'xNJ 2 GxWd}$Ե&S>qn b{u 123A*JCf&v <˹yF6tpQɬgGF( cgL I:e{l>?Q.'>KB!K'y>NH Un$$Dnǫ ͗6 N6FYWF/FLqQq!ƁVC;lM ?UhpmNWrw?47wNi'Lz18N.b<(8׳F)[ʃ-V (8XИ}~mgcȡdE'Ocu7nkb",ZrZb^lvX0n."cFɩ R9Ռ^J)x?a=ar>ՒS5uhaK(; L(o^ݼJȝ6*nAЪQ)QIJ)~\lT1ӬxJg_8 )gTvWxECq)Y_NUs&="pGA*CAL|7UwS_N2vq4_lp_@'wgb)6o:?J(Ew0= 8|s~F iH7.F0*q;bǗKXAd,3X" i83RLU3Dÿbũt"`~ |@wW2܎­jMA'df?>^G q%kp4YW@H1SE.дxMO3QsNlᮝPa4[A4E7&݅t|v9Sr*lJlE ]e] NIĞrW)]u)eX]Uap )^&eBwNO/0a^y8.8wh";8t3|p1ʪ x%EVmJlO+RL. +U#FDpi9 >槛EgV4F)M-DK/ )N,UHz^ꀭKP]n -TGZ'~ƕHBx߿BN!%EjJ bH)8!{XSLRѭ 9UcCr:w"i䗴TkLב& ަ:Ͳ"J!-2#s%zrv(Px(%e J1EFj9T Y5ɣW\<ȣ A6 \!qzw #)؈TWTT $Z I2[E2I<52S6.iIܱ@TecAҐ!`[2Qp>P]BruWc+y4yi$Hn{]q%5[ 8bX)+8.|6#<4%?d.dBgw%?@P+AC@dS _'SfxJ pL舓1@:c,+6BP-r#2[l WnD[mGe>\(Z*+]P}P %[ %ŬF6!O"((q^ Q.f̵cM]9RRKl8/jP&d&+hB0W̄pdEWȄch+aB芗]9W1[߫]=jʹRwj /-nʏH#M:hע+=^ ~sTʱざZ>FUr1O_5e%c*V\A(˩2ŌݫpMaEu2i$dtأ ܅#B1(Nی)k Ji)LӎQ\ATpPe'R- hik+ByH*@q (dA)z_AK(B'vr~l"%r'&IB$L g Oj6$gNz섫FPx>s҅P4D-eM3&&dMh,&R q&L MMLL(~DkdDDhDD>x%:Dhs%;p%Cp%w%$w%f(;_VkBȵׁFPx; '1:& vLjƒhςxB$Y&2˄PL QA$,dbH !$}> ~D26>B# LYEB(R6pDgƍ(Jl)FP0#@FJ 1z~Es$,HBX,H!*B,^HBXT'a"zaLDPEZ>D)|MNCfCTx8DQ! Q d !5+ IB08 ~h`B08}&"D2!IISx7-8t <0LaA(,(YHQA@]wQ *`B" Q.D?y\ u*`A'-@ZCK /TArAD!ِ#A|vCUpf=C`Oc=)ށz(%aX A<> ]`ByP3AZx!d!{UaYk=FQNZGI% @EyjϪ|OM>b]Sوn8S%Y5r[Q봚*$k7I6u&g#ë^rS8]V?MP|'iYKsY;rk6r6 2 z&n\p[}\n5͏m5V+2zљVpf&ķ Y=WUwz߄g>2:l>ZC⨛Yˣ3Npf&ǜ-*JɊ˻*3f2^K`eIH(Œ ,S$|L|T g>H8Gʋ $zh$%+aED=C:d=J/:_Qnw/SfL-K A?H%ٷhB!JB.cT\MN) V GJQF z%+hQv(GUPkr&gVLpA >0V SwTi s:Jqdn)v4Q⍓ .ШU[̺< mgLB ҍߧ[T[fm6 `n 4kfY0K 1H-.T]6΂VJ^BF hIWk`BaVg=;dE =޳wN [aI_{{5uzZ PݢBu5M4`5Ř1?򋕬?ܭ]x>ZŦӂWx_zƷ˯ݘ'ftϢ_ěgqWlBUBW&FxD \[IW@axdZ'+]eFsnbѕĿNX8ltɷ76K z,)nZCٯvYC {t_NʩsL[{ˈA3rT-.YwL;*cЮ K$o KC?_H _Oa?֋l^NxA&h=#98oLX?x c,wbÎ_Ћ |=Obu_?<<ɃVV;_mX> QsA?zeӉ_MAwo}Z+2/֫X`>WnDS{ü[7_䷋/Wދ7[eOx[|/qnk]T:m)A},'qi4K,U2SDse®oGGQ>M&zVw`;@٨9񭗝䄉ڪΰqr=v?/|E< ??|S<0<ܽn3 &0~axN=xoIjr ǍދbDx03D};> ĬzfŕY E+66/C/`plKvXk}ܺEy{C+dfύ?秐_˹-Þ??y81O(w >̓a*| Z$Y_H2{6a38>Vw <O?^໳%?_?AىcPyoZV5QWo{SЂH?EEn}YTB3@Nr]C-c} ?Fkd6+ׯb<ےY[&z]_x9Y^MVda _?yT'DĻWx@ϦBY(U|j?jknBDS8i׀q~+n>B/j< VS_&J 41ycCW8D3#N:SsD /&0z_{[턘k`ebR{ }MqaHX>tf/ Ui{ۮ×x&oMF@{ J̀ЊnSIcX0Z:wOF:IaLCǫ2Lz: f8 +LeuZސG/ɭlV\#j79ix?/?~O'°>{=l/?џ?= :x|q<z$<9v,xҭ =)o}WΠpDN&ͳoCPKHZ?AmY5>'UHVkoҠZ]Aq\=o6I!Q$ZQ]( PƇzN:߲h,FJ'.^yTDk@Dk:$5z⟠w$Cc`{8i@i^Dky޶(T['"j])UfE5A5YB5> NLkf[yGa}>o֏mA9l銞qč@03;-JH~l[9ĥ@@". -[E[՞o%kԺ$JhC\ Hq/$WϛbRm ~Y. |q!6 pm3zIr-([Mҕ_x*FSUhsт" e D1*V}/S tS ɞ2rV{$7*tNekT>[\u=iV[3-҃'VY& q\I2vȱX@؆[5#XҡE:&9-RH$V?$EK< H%Yxs7Dkؕ[\ w;u#aN #n ]8?@}_,3.QSt9?;kCĝ'Hrla񁠾e *'Q7\1hC&Shwul|@nw(YKc$7[*oѠ -'VzE L+4[\4$sYA_\ZkiG}qq%1zNu8I-j=)"M4/j̗blZhJyϗyTE1GФ~@F‹2|)8oKgA7O MʳD1֗-M &5;>vJQ)})Ěv'q-ZS4' sE:˗rmܛxyntf,d{+?TW=ţq;{C o d[kCЄݺ]:FUoh3#γeTJJvXO?ވvhHȥu41V6[;SJ`YMI5IT)+( Zi2֬vN2?aa0)اgQzЬ~-8/- O"A'VS8V}vvJ :c-2S 7Fi1GC[$0M+7]4޳? $ E|mFh["P/|T,~Ճ%DMšvm KH+9Ybnfr*C(wV~Jri3-\(?]E[YrIzn\p߫~KvU\swu2 >ڭ f >JpkVx˄׭.n,3!'g'3&) Al#"}};AEۉVL))dQN8l5^qkowu>v"ZôCT-F\uacCG(F'{nԝF; [g< shphނ:1%g4=ٟt{/nẄ́P_?tFoAP5k[U@m>pr䄫_,oZ^ke?(}NwqĢK)\Z7}s6<N87ERԠ$93fr5Uf|iO ]{24-əOon=ErK>b)J. L8r/"7ϻoWx~6 v{mP^)PR<,H%TbC8GҦa/8.na5ؙ&$3v1Iwk nL P;:MgAK5s!ER\jrZ.MJ 0_rso1kN X} 6fM.I&.]NãO0Y ͆8# i=hggXUQJRP('iʂbVX9alnV)VJr(Ki7λqilN=9#MBN11 joMQjXcfeCXLPaLWՒ$dTꢕM]i OY(ynΨ"׃MYN/9 D亝I?jƱ9 EdMk{B.fkE7s\rScݓnj\qSȍ"ﻩmoB>tS~QA vW 7MO5]&GԧItjA.S{R[K~^u Sj3:ա69աv.۬ LTYbޝd,iN2V=`8T+[3=(Tdd(VsiW*H #|$ R|(YK)>aTއAKS&aD/; %mue'NgNdgNBUS-gaywdd'y=xwiZᱝ H/GPIY(<ţep-)uXtt+%_;$a|tuO4~~OW֥gV)&z5')y~OX'u p?\Ji?ςVfZa;[fUO#zA q!H#4ovď@fl>sG ?>o2~jFW`K]ed@Ama:SlB⾥dN:]NAkz2bGV'І)G A{j@a#a4HLܲ`‘EoѪvbK,i@왟X@ΧҖ촭6(頉ñu#5iFՎ>!3Mž9l*ZqM\Yعd7l=cmsܩ;ҭ!%Z sjbt!pz ʧ}l!Y1VĐ+E,HL"OX֚a^}r|;僧Yp/}?Xw4uL:~hzWzJB]tz4NBGz9mIMֵ7v`Z 7R{w<|D0>}x^yTkrSm{X)aF_b8Ox4go{b>f/Wx{j]'hKt(f92F:׈^#|0N>p1? DCgoSVb6r d'YMXb&!/%vX(^Tpڏ?A-YrK;7cG d4ǯeMU_`i3@%AcNZI''+`8Jwj|Y]'PTT-߾(Bzra?E_XN?g .7YLn W"0рP/.CJe9Na$LiR$՗\JS<{/|1|OOrMXٶwF?z+o /4һVWd\"7Q5XMh}hIʏ0^% !W!;? Շ>Ca6Or7ι?qLi1 L Nv@xqm\L>i-l bۛf_70E`?nQ N(LɜِbgEnkŸ=`$AvaS Ɩ(f?!)&Hsm%ئ2νɽ:3ey?#͊Z#n~QGB]k:;u,lzqۃdt'2Ff&#T?dfbH΁8s9w9zs1iv(޻Q ;Ϙ*t~bXA T)d+>x'Zp~elPv‹|;x4_~¦cE;f9^E^he;x0dc>L<vz~?;\ K w*f v*<4c9͔ÝOWl ߩT Tx>qQ ΗjS|=Ì N׆9VkΩ"8ՎU3j/VNrjT N5 ż[;TNES٘*Ptj<_ujx2`"H8pǢSKNe:u]y)cLcUKNUKVr+.i,*ANeTU)=#άOr. ũ4Z0ة3]ynfT{J1NS _S{ewL#UZpB[o5i*Ըƨ'E\.q0Us94@'ԧjD컳I~:.O_"e궢MMϟ|~nɄ6e4h~x7U+A15'j8-BNUvm4_ T7˼)pp 3>Cw]\އBS9-0ҋa0=|' V@V=Ft2ol:m0cNq@<wG$B<_"!=8"HK3;~iϨ*T *5qEOߕ ㊄Ӄ |) k ]y4BJJ\R MU  Hs ʅS?Q{)P5+ߕÿb"i)q9/Z |WT$?Ϯ'XLEp_;!:2>&Ӧc; ߕ!^W}|%GJ]Qb8+.J039M|Wb]x#k._zŪN] Fҕ2Yt ߕ5G,w9U6_ca!-nX +NPQTו7a?#3IWTehH\#uEPp)"F@/0qХDS-n[sEUEpڿxؖo<])-u<[Ek |WgxEȚ]vh]ɖC53dۄ%2u vZu3ÕnsYW@]^˔msKIsu%Y ˕X|We}Wej†]QWѕ W BWnОV<ߕd9}W] g LJYuH]1zpJhHp ;ĒڥOw1%͆ti~1QrP6fJk4o]+dR<r\ iQBqځ-cE*a.I < LK/ڑIz-YlŤL֤ZHɵmS+FF-#q$E̚.TWMW\7N"%*!&0| ) qLw]gAҢ ς+$)&hBWȽ ̫EBJVj#h)U@ÐNwG Mk[.+vί#\wbSݹcSYŵ~#ShBե FFoAWYֲC GB؇!B*DpZk<"S$,wHtu9qk /h(2 ¦tEO)jIqr} +jy[7ػXZoLi.5pg*$މHs֋p8N[F()L* hWf 1@t; .fJNCKQ(4@fQUoc+[?Y*%'՞բ3ܗ9+~fDHr$a oWIۃZ\L2,B5\~z1F[w呏L)+ӟiÌ݅g%%*։G@4@|5ݹ%pG ;;>0pZ]-[$)&l[)VP"j [\@I)J˜ f@umWe951 'ktl>TNٙ?$2ɝ<ӘegUj<1YUxIJdҸ10-&SUr)Z#WAR Y|GI $5 P BZr"bB[Ŕp7.#4*d) M;J`)SiE{X#i^]Ќ:e8I.(^ދd0N ,QTt^P #\=Z*2{WPe* )2>FEH;\Br "[t56SZYaBqTtXxdo)JĨ/yf% y