From a1909c89a21dffffeb4185ea54ceeaa590ad6939 Mon Sep 17 00:00:00 2001 From: Anton Krotov Date: Sat, 21 Jan 2023 14:34:25 +0000 Subject: [PATCH] oberon07: lower case by default git-svn-id: svn://kolibrios.org@9893 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/develop/cedit/SRC/Icons.ob07 | 138 +-- programs/develop/oberon07/Compiler.kex | Bin 272301 -> 272493 bytes programs/develop/oberon07/LICENSE | 2 +- programs/develop/oberon07/doc/CC.txt | 120 +-- programs/develop/oberon07/doc/WinLib.txt | 312 ------ programs/develop/oberon07/doc/x86.txt | 17 +- programs/develop/oberon07/doc/x86_64.txt | 397 -------- .../develop/oberon07/lib/KolibriOS/Math.ob07 | 5 +- programs/develop/oberon07/lib/Math/CMath.ob07 | 924 +++++++++--------- .../develop/oberon07/lib/Math/MathBits.ob07 | 66 +- .../develop/oberon07/lib/Math/MathRound.ob07 | 196 ++-- .../develop/oberon07/lib/Math/MathStat.ob07 | 474 ++++----- programs/develop/oberon07/lib/Math/Rand.ob07 | 160 +-- .../develop/oberon07/lib/Math/RandExt.ob07 | 596 +++++------ programs/develop/oberon07/source/AMD64.ob07 | 27 +- programs/develop/oberon07/source/ARITH.ob07 | 31 +- .../develop/oberon07/source/Compiler.ob07 | 11 +- programs/develop/oberon07/source/FILES.ob07 | 4 +- programs/develop/oberon07/source/IL.ob07 | 43 +- programs/develop/oberon07/source/MSP430.ob07 | 11 +- programs/develop/oberon07/source/PROG.ob07 | 19 +- programs/develop/oberon07/source/RVMxI.ob07 | 15 +- .../develop/oberon07/source/STATEMENTS.ob07 | 41 +- programs/develop/oberon07/source/TARGETS.ob07 | 5 +- programs/develop/oberon07/source/THUMB.ob07 | 85 +- programs/develop/oberon07/source/UTILS.ob07 | 6 +- programs/develop/oberon07/source/X86.ob07 | 51 +- 27 files changed, 1530 insertions(+), 2226 deletions(-) delete mode 100644 programs/develop/oberon07/doc/WinLib.txt delete mode 100644 programs/develop/oberon07/doc/x86_64.txt diff --git a/programs/develop/cedit/SRC/Icons.ob07 b/programs/develop/cedit/SRC/Icons.ob07 index a53a1e42ce..ef4bce32c2 100644 --- a/programs/develop/cedit/SRC/Icons.ob07 +++ b/programs/develop/cedit/SRC/Icons.ob07 @@ -1,5 +1,5 @@ (* - Copyright 2021, 2022 Anton Krotov + Copyright 2021-2023 Anton Krotov This file is part of CEdit. @@ -20,27 +20,27 @@ MODULE Icons; IMPORT - Graph, File, SYSTEM, KOSAPI; + Graph, File, SYSTEM, KOSAPI; CONST - fileName = "/sys/Icons16.png"; - SIZE* = 18; + fileName = "/sys/Icons16.png"; + SIZE* = 18; VAR - source: INTEGER; + source: INTEGER; (* PROCEDURE copy (src, dst: INTEGER); VAR - src_width, src_height, - dst_width, dst_height, - src_data, dst_data: INTEGER; + src_width, src_height, + dst_width, dst_height, + src_data, dst_data: INTEGER; BEGIN - LibImg.GetInf(src, src_width, src_height, src_data); - LibImg.GetInf(dst, dst_width, dst_height, dst_data); - ASSERT(src_width = dst_width); - ASSERT(src_height = dst_height); - SYSTEM.MOVE(src_data, dst_data, src_width*src_height*4) + LibImg.GetInf(src, src_width, src_height, src_data); + LibImg.GetInf(dst, dst_width, dst_height, dst_data); + ASSERT(src_width = dst_width); + ASSERT(src_height = dst_height); + SYSTEM.MOVE(src_data, dst_data, src_width*src_height*4) END copy; *) @@ -50,93 +50,93 @@ PROCEDURE [stdcall, "Libimg.obj", ""] img_destroy (img: INTEGER); END; PROCEDURE GetInf (img: INTEGER; VAR width, height, data: INTEGER); BEGIN - SYSTEM.GET(img + 4, width); - SYSTEM.GET(img + 8, height); - SYSTEM.GET(img + 24, data); + SYSTEM.GET(img + 4, width); + SYSTEM.GET(img + 8, height); + SYSTEM.GET(img + 24, data); END GetInf; PROCEDURE GetImg (ptr, size: INTEGER): INTEGER; VAR - image_data, dst, x, type: INTEGER; + image_data, dst, x, Type: INTEGER; BEGIN - image_data := img_decode(ptr, size, 0); - IF image_data # 0 THEN - SYSTEM.GET(image_data + 4, x); - ASSERT(x = SIZE); - SYSTEM.GET(image_data + 20, type); - IF type # 3 THEN - dst := img_convert(image_data, 0, 3, 0, 0); - img_destroy(image_data); - image_data := dst - END - END - RETURN image_data + image_data := img_decode(ptr, size, 0); + IF image_data # 0 THEN + SYSTEM.GET(image_data + 4, x); + ASSERT(x = SIZE); + SYSTEM.GET(image_data + 20, Type); + IF Type # 3 THEN + dst := img_convert(image_data, 0, 3, 0, 0); + img_destroy(image_data); + image_data := dst + END + END + RETURN image_data END GetImg; PROCEDURE load (): INTEGER; VAR - size, res, ptr: INTEGER; + size, res, ptr: INTEGER; BEGIN - res := 0; - ptr := File.Load(fileName, size); - IF ptr # 0 THEN - res := GetImg(ptr, size); - ptr := KOSAPI.free(ptr) - END - RETURN res + res := 0; + ptr := File.Load(fileName, size); + IF ptr # 0 THEN + res := GetImg(ptr, size); + ptr := KOSAPI.free(ptr) + END + RETURN res END load; PROCEDURE draw* (icons, n, x, y: INTEGER); VAR - width, height, data: INTEGER; + width, height, data: INTEGER; BEGIN - GetInf(icons, width, height, data); - KOSAPI.sysfunc7(65, data + SIZE*SIZE*4*n, SIZE*65536 + SIZE, x*65536 + y, 32, 0, 0) + GetInf(icons, width, height, data); + KOSAPI.sysfunc7(65, data + SIZE*SIZE*4*n, SIZE*65536 + SIZE, x*65536 + y, 32, 0, 0) END draw; PROCEDURE iconsBackColor (icons: INTEGER; BackColor: INTEGER); VAR - width, height, data, x, y, pix: INTEGER; - b, g, r, gr: BYTE; + width, height, data, x, y, pix: INTEGER; + b, g, r, gr: BYTE; BEGIN - GetInf(icons, width, height, data); - FOR y := 0 TO height - 1 DO - FOR x := 0 TO width - 1 DO - SYSTEM.GET32(data, pix); - Graph.getRGB(pix, r, g, b); - gr := (r + g + b) DIV 3; - IF BackColor = -1 THEN - pix := gr + 256*gr + 65536*gr - ELSIF gr = 255 THEN - pix := BackColor - END; - SYSTEM.PUT32(data, pix); - INC(data, 4) - END - END + GetInf(icons, width, height, data); + FOR y := 0 TO height - 1 DO + FOR x := 0 TO width - 1 DO + SYSTEM.GET32(data, pix); + Graph.getRGB(pix, r, g, b); + gr := (r + g + b) DIV 3; + IF BackColor = -1 THEN + pix := gr + 256*gr + 65536*gr + ELSIF gr = 255 THEN + pix := BackColor + END; + SYSTEM.PUT32(data, pix); + INC(data, 4) + END + END END iconsBackColor; PROCEDURE get* (VAR icons, grayIcons: INTEGER; BackColor: INTEGER); BEGIN - IF source = 0 THEN - source := load(); - icons := load(); - grayIcons := load(); - iconsBackColor(grayIcons, -1); - iconsBackColor(grayIcons, BackColor); - iconsBackColor(icons, BackColor) - (*ELSE - copy(source, icons); - copy(source, grayIcons)*) - END + IF source = 0 THEN + source := load(); + icons := load(); + grayIcons := load(); + iconsBackColor(grayIcons, -1); + iconsBackColor(grayIcons, BackColor); + iconsBackColor(icons, BackColor) + (*ELSE + copy(source, icons); + copy(source, grayIcons)*) + END END get; BEGIN - source := 0 + source := 0 END Icons. \ No newline at end of file diff --git a/programs/develop/oberon07/Compiler.kex b/programs/develop/oberon07/Compiler.kex index 186e32a54224b24362af22d9e733f77ad178191e..3f52139e206e39d14bd6aca810c51703c07c3121 100644 GIT binary patch literal 272493 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

auazkEkN-2*C`z7Ob7rs!U zejoDPrk+M<2g$5_jl!t}$HG~j*jX6gft}^%0#+hI3A?zvc?r}@kAG1-s&|xxOGsS1 z>dVLtC7dp9J&hZoL-(VBD$oa=)4#GXn+xVUyGC{>=LC2#h?}wyfwc4=gE*|>1CHb1 z#~936S(tkTb2l*I-N-8($5 z(qMN(wgMH?i2wx*{wA$ zwtmG!2J~N9&^rV=S)i{OXz!@gUT6r=J%h|>PN0p=K*5J&qtpW{!codHPa`vTl(KIu z>_sx8RC?d4rb&tFr>SS`2BWj-@^YrqYEZWb$UBL50}-mZzAZ5AM|?teX^!rpPO4nm ziXt7rj4aTBM2jVgbuLqOlZItMwzuH32ct!<@U{Z%;_|bAic5p_xdJqk=F3_1a9jfB z*e1=EK|eB`@nD3IKkyiwWN^I_)d%umRkmRk;x!(lYQE+>pm#RtLZZ&#l_ctKLkouU z4Vj*5Y6EwYAbS~P*F<%`(GAVvLxa;`km~Cu^WqK@@HhP=Y`2Qnxh2G7#w6~~f)8-L z1-`Yw8w|XA#jBNn%Ye?!f(~-ut^~A`K<69iI=WIe1}DOV-O)g$tkgjFETF;h2E{GX zeT_TzwSE?6u)9$(lMJSah;=+v?rfA+iO-|_a6{0Fzsx;kh#D_b1Kd$$h1S0t>F!h! z`i=Hi)x^!wZ+I{=_lnGkIb@E{k{RSS%#vvl=rDeQ$BfK?L|q!6)?&k5OG^4~@{q!sNM>lJCb)lcdBeTKPntXHl)kTJnuaF2oBhoW^H6S6 zQ|n7Ytf@`>JZx%~*@ev9rgpnoFTv+DxBvpanM`!2 zgwHEeySt-BxVs_kQZXb^uTKjZLIW8g;h$BZ2MX{DZj+&(MD-gy7}(_@t>s+E=o3D# zOzq~n^XxVi&O?TCJaM87C#>5tvb@=)wsM~a05|ayoNvGcs2bf#;=dj>-eCrAwY{}_ zSdjZ0B*C2~$H{J#CA+P=NM!#Z;9&-ws(8JUOXL{OMCpmM(q=<(?G3Y+c*U+59SyYQL}ypCQ*N^$%D+B1LM=g zGMtiGWbv39iH(A-`^*Y*lQ6b-zhkh$4a&UP2vze) zQDAYEa^@=M7DHQ!OHj#O4+o#Klqa+ImlLb^3bA%{hbcz^;KEyu>oG1T>Mz8Mg}J@k zS^2}1e=Afgo~=C33jM)1rX3cr7JuHc`W3#|+r6XufUjwgGu^OvoB3p~O`Jx%34jJp zm&yKN62Hx((YU$|jf802>S=uaPKL%<*GyV)hiKd;DIQPMUlPt>++J;{tS2f5c`CPN zsqEyQ5S7D3PdAz2zbxYISa0fANwq%zk}#Mzd{D3o*)OP zJ`!S#fNlZEjf9ySE^!vJBI)l@*F9m&8a47}ZXwlfQx9Y?sN6`4!FhC^AA&0-J5E@= z&U0{v!R?!adz~>iMW(a5LmlS(;Uj_<=WDUN+Oe`$U8$49*BIR1mNf1$4MnQUJ zo@clMp1s!G9;)14yt@QH!F5LISk}KH%bP;7RZ?!G8*7A{xTg@ry~|HomsJq9e zR3#C97twwN2y=9n!!|ZqI6{T#uENOMCC{A?xEC$9XmFIkR(v5aS1OK2i{nZd+111k zc+grMR}*LB!ZNR?Pd2wDS#JCivWu%B{yhgaE8Ls<EO5Ev!uALKcs zlg*IK%DODItGi4T7V*=btXGJi1-q53MzK8M)s!0PW`UL7z*}-BH-)z_Yb)o2#!81V z>8}^Hh09fPH%4qn>1Qi`f+ul#$5%<<>f3na#>xdI{V;%as}~~?H`j-sjFH5Y`VWyl z&`3*AA(yX@jV0aLuQ%&x@-n`Yd?)#7pL#T@Hr6j=te-DD>#btK-Ytqr$p7*mAt zkd5r*Rz`WH>p|8 zJk6WMlno9Szxl>*cOFeMMUZo^1CpKNZ3(+J7Vy4AF8~g6tr5j}`~*Ej@phxw#4v@5 z-36qxFoNoWA4nR1uX5|&vN8R4evRuj0I}D_x0F#I>k&yeofM9&&eWPjH<5l+$X6KY zn|Z{zt}{w=ZEAiU%b6;;0CaULtg!>ZR4{}U23*c1E_{P6NOb8>R7AQwo9}$1q~}O- z&+tPXr#I4y{pnWA%iW16#aFmn%47Oig+TqZvTv9@GMjz1vUgKJ)g3a~KSMmkK1kV{ zYx6n6Rc(ZsgO%B>^gC(x$&V@Wvz&yiYT77K{QwW9r@tXx)NED*;-B|$PT-dT*qT=6QxYnP+zqKS8lkJUvnOHA|g|dVMg_3eZTV^|sw#vEEiQs2wsC z=>Ia$^nW6>1b<%9!>e@^+(?{3vRR45`u)R9xwdxS^AcIa7nx`JKc0g*Mu=|=D)b;X zIeWURsL9}XOCFi1d%Zx6MiVF3^4(O}P^I=I04J#mSmiqs6!(_MZEbklS3FlNYf9e{-%r-R#4IJXGrcUBF?*O*Z$kVT??Ilt^3enO_Yhx3Kfk-fX$WDKtf zxs?B-8^U)S0%Fhk?BMH)=lKG@?16|$BA(#9?sQ6p4&6TT&mX&SkW|L_BZ-xC+c=* z29T)lC@vjbo`)%Pn@W&tJ^=71x;h_fr211H0s4q!2z7RO0yQnLc}2FF3Xs)_G{ z=#-Ov7i3R>5vG$noqV?ftYD%6omuf7w*sLE?iK*4&JJ96CSYvgnL3w)u#?=#u{&Ld^LDFmM2 zY4>)G0v;ydiv;|Jfa|`%o8_bpzgC>B$fh_)7;d3T^npF9!;3kL_d_5U`X17lqrZ>A zIQOowJ0O>=#XU=Y&>u)eN3QPbr5Y-bd^b46xIMz?FHPsW{+7-x)vZMA;8WVKg~s>~ z58d`iMx`L0$k2W7%j4F8O-)NO_cNh@=D%Lx1#fgjTfd;gNX*RTg9@OpSyApP8P0vRQc%M4^#qV7C<;8K2>hdq^C>(+-QT~CSE zk)Q;Z2=DiIz&ijai+fN}K~eMFt|FbE+Q=O*kYxhV=f!=nhU!70nQyU+0UF?T70_b> zDkjH5Q2c==%-o(OIi-e^+R2sZSt~E8QEqJJc_+7}P~Qc^hm5FR6d_-b0UGNHGtWD? z=C?t(LkQ2CiCo zt{i0BfopQdkmcs^gAY3mH3UDsDOlf#H=%b7UMC^8lk)45uy3}^XUMdjlvTltD6K)~ zq{Dl1n+bV7`8j8THdpGIq{cp5UfN0B&^m4z$#&>x9rv0&x_SglaekeqN`8Y+Jcq>S zYQ?ED74YW20_#ZsbRzX)r@!rPfi7hjy*zgwsI>(;!p;HK2zfh@xp@_bpxHxvZp_aXsn9v?yX9S#>zO2l^Gi0b)oI1iN-@qBO0oSB3p9a zL)uUrM3$VN{Fj!CIX}3go#tOzJFBSrEtaMAiLYRW!R+m>Fd)0~v)XRl%wg{A_7UkB ztJB|k@oHx@>pKxHyo3=knJhR=Q!^yTH4sY5CRgQtXEneoMwnAiFX?A@?lk3k3 z{?ZLaL=F;>XWuZ13m}qo-}7RNsJ=)C3*Z(Hu;Lj3yv7Uq!MGSLRx^#Nl*~_(DwVFx zITl=7Fo+YojXEn`lV6*;WYD)kyZ%e^Hm3J(&{3o%c~|h5UO!CVIh+2F9>dDpXD<{V z)zogh_*2-X`qL%nFRxoc#vv!u)<|Ey#olypKyLyxGr6~0-$PX`?%)MWJp8gTZO+`PQ=3L5lhd|qCsyg5AcXYulGSQuBhtWL-&&LhIlQdHqy+5C@|C1#Smp&5Ve z!!0l29!!^pYX^4ZicOXM&bHq}?KggDVZv+pl>cl-kE12AQ>c9ZsB_oceZ|d#niO2j zjwl5#?W~(1o4A`6|DSJys3EnCULihPe2As$tJclzw=!*SN)qknFgNIFZrk!f*=7z{ zH*Z1-Uwz)XicYDm)3;eCfg&(8h4So@+BT>}+N#B!sAs!~*d;Y8I7vy1ik3(ts6_V@ zyQH=YW?6D^Zu010XG<HG>F-pC6Nlgm6f<%RR`7;<%{`4UD z6M)&p?s5L$&3Lrw!CRJGq z1mg8AjK%8<$(h4TxvyF-mxCl;Q-|`5e$Nd~gNoEXn=HaVa2CLeRuLQ!=6ouWVYw@U zT_agUcWZD_Q~D&mY-Pm%EI-hb=w>mQf_05bkt;U(bGD8$FTgy4pVfwD7rAdTEV@}7 z%-~}(OuHg{D7oU&8QfOpqsHMW4&a7}dkr)XQ9Glr)Ya>yy!_xZvuPEpTd6#OV2-in zh8Z_iinGb5D0!*xHc-XX7A-sV;fLl5l2emvT}E_Z=G7~Y3s|8}GVj7LW1%vRw~S&_KoR5NFgS(zPbzHIqGD z5`3?L?(DkB(SX@=Q_}6vqgq2@p1Tp)Mq$OV1(B*BMn1}4EQ%94)%I}6$3|uLUP0zQTcN9J1-tSuU{&ro-Bo`9 z`-;KZRW^6I$ID)Ji1F{(istISp!q%~6zAWx7Fg4yR&>=`(EzpGC3S9~E&{`8EVPBK zL8nO{T@$x2PF%65YI#0DZ4{Itv~7k^x6-+?C3TcW3-`TkU9?9_6|;V;0yM9s0D{#u zw|HUmSUO!>B`SI$u>E6FYEK}TLpo9tc)$J1zpyQy_V$C_BE0xzlvt%b6RX^_|Dtj? zYfE1zG=i_`XH2dx?aTE&`K`)xyYL>0@VdqDQ1&3JsKyC{+OLeVHkKDt)IB0RDId4!sEz~3i&JRszCm$T0J+WPDqfnG&H>S{C z2jehX3(tk_CaW7*YRM_+E3#oX;}v1flYI8{Br+6=FIjpW^ECHMV>khPTZljWW)naY z&=TGv0T-^(E?&-b2R|D5iZQ<<#Wg*1%($%w5e*v%O4yUJOV2yWd&0G|n#cb8v~H!# z#pF_G<}Xb=!BA4RM{fS-%KuxG&zG*|Y|;+Ej0j--BH$}Jwh$|Yk^G|2X$+&YNG-3U z2rJAg5zYrMW-vc0?Z-7{^o@mc*J7peI!$rA<|^))hEQ>fp=AjPcN~nsK8P7QRIk_k}>>Nk0OIH;W71MmalkNf(>PjZWF$fU%;k zi)Mm{SWQu{%c^s`y>8hq##XX2_;YvGk5J_sSwYR!(u#!p=XcF5^Kp7v70OR{4mo!= ziI7_8?D!VC-MkKZ7^yZbRo60KKq^5l@$LLCAa4K?;Vdvfk^73M3BsRe_(g8TC3a*; z{e(h$yz5{2U{Qo{6wyS`Lssd+)-_UbA8xi+#%SktwGrvT1;2V-DayqE7@VX1}gZWNC-;2L`l1I1yG=fHxnJ~|)E=wca}uCaXMoZR3S3D%cIxI%Xq zk~6u9854y(O*wN~aU3L$4;d=sS&XA)Tx}Vd{xr+ca?gx$oKE-EnqwKe2Qt3U6!N0K zi6>%>!sf9Eru)8FNMhbK=!Oc4^>Do&4;$)e3EKm%HhT@HM%_xcSMs+%Q~bF_7#k-G z%E!=!nSJk|yw}OgHs#OuVBx{0W&}Q0_QPbKzgVc68+g32%D5&&6X!SG+oZzGhkvVO zl;JaMwJLX>>l^FNsNc$ReVejOT^N?d7WXE?Ah#^q0Sg8gU%wI@E6a4{bs#TWmLm`% zDvM=*xmslrYPKvhg!gYUYUf%8L9~{8!MqdKt#mIz+#?A2adX?Z?6Q850)_=rz~L;# zp_f3eO>Tu9{a9GYy+!vB=;ju3A0_L;lou$c!uD0(M&xA+d2X!2Ec?%&+7@y@;eAC$ zrjWTc;|^frN)JvWU_xB_07ARl_ovgfd7PVeh#s5WZh~SCVxeSYn<*CIS2s=q+z;Hk zkINEE%SaX_X@A!5-R9`{R~CNKe~7#Ac#j_rVX}uJcLri%jdb2cf7yA@qEGQn2B`p6 zmvI!%BwfTgiq6s7p3Au)?5C%dD)W#3Wf+;=*X>GSqKxyEv5bt`34^Q|Si%y6EM~KG z{C=!dO#y-WQ^>Gg+@X{^g=TuWT@IEen%p?D1APZjC75F+NX*lEdc@=+F*)6stbOQ6 z%&Yb&wLSb4NH;stf(8T5NqPN!h~t{%a>re>{!lQpKCVB!)4OK?$7aSE55M;}*>Ogl z3Ho9B>+>!(TK(KXp4J9#DP;}T;3=sb-K-pCW95qV@bjGV5g9%ifu@B5^^OFp6%lP8 zipY0ATCeSi_(@=UL^>IfW8KnytyIUj-9$tmxEGOqQ5LN-EBh0ui#IO&BhGc&8WV|e)r`S$`&cZcGruwRY~7P5o_KC=n@rS1qS`AJFdrT}Xpz5)|c-IMQB*lyOpLJ{ zEMZF$vhDp=diapfRpK))m?_nP4ENu?AscyJ zHYe^@`mCT1jOg?z-!wwEj0xF{B2Jr)lw1cQmn0fRXezl4QZnUH2QVm1dM=YBzmFB#tDd~@ww^_khU#iVI*t%-J?J~71YQI3yPR2$;HDBSA> zx1cYN?sI`ohzhYpx#xP|sR4n%{%asdN z@nNax%75Q7y-^lN>$coWeei%2glCA)?hLdv*dDwy( z%t}dq*-9CaK2v2AAg%n^TA+_s_`N_*7Kp5&OZhmBq9;{a!x|ZRQ$Gl3ssRl$A|7{@ zlDCPHo6`3)?g;(WvvUSfL^Wx&BOY`x@V;IYOa4>I_9>wW5HD1;bCphKQ~H zdJo!6(ml!6mV2KcMg03T&oZjLe?ZXPk3gxzytWcgOc+5eSYYj>yMXLqAbw#eO0nAlIuy?;X9$e}tIV#$CEd)J zfV+zCo18EVi}mige$coP4aW2|NnrN@7B=DW@nV0=T!#8TI$P`#fuEb98W#IG)MF<- zWHfJ>jEQ-*F&*zFw8`RPeTmhOrH#yTJ}jyb%jnY%a7P2qcHkq#?r{c`q}zKBTHTTS zDCrI~Ga>1=RN4%Fg4+;98RvzfT^ti_xG4B z33I(Lvn2Ts+~n~!Eb^~FKIwJ`QdKNRn``QT`3kS?5&D{}KozTN>5WHRdN;~&cOy%n zk5I=<;~>$mhrXFcQF%{J3Vg6Tg0JBxID*`$M3~|1NJWPV>p)?dJ~N&qPGNCuUO(>6 z&?!7j@S}l`7T_$QF9}(vu$Br$UYr_&H_?o*rCTRD>yqB$hGkw94%74k{ zuXTo-n0J26Dh%aHp=7PX(kdf1UCQ^3ifkFjwFA7j0sC2)0ZsJSYZW4QF>2lqF^P^+ zA@XyXSlV~GZzR(TX8^NRD}ToUV>r=(x&tR(Y708C)e&y^d1pzwuF{;v(YPN z>>&;z4Tc@|Y3Hvw1C`HN&%6Wc(s8_#ZhN9)r`HqU?^%9JrfM$AB62Ug?RJv*OcTu- z_4?Vg(Mp?EOwuTwzrLwm8iicDHSIQnE7S&?s9GgK_XwRo*ph}upjk+hLnP2It_yUav+^M*lG zSZ!Y7pUVrPy|l7*Q{C}iP`pLZb%Sv?-N{Izp*{5LGMfyM|5GD||K{{+?c5`_2&V#; z_AlMiS{g2P)Ry#Tcia{^BE(ySc)1}S6Cqk!wIPN+LVwrDYtp^XhI}}3NDrp{TSZ}i zgXSwO0N{h7g|dF(XxBe?w7Uw3L!ayGx2usNy@l*`FIy9tn4XD$S@C_PUsc>Ay{jf4 zqbzT)^ysRlz7?N^d3&cf;WnywA8eNuvpNWX+|ji4U3IX9=0=bOWHC+7-gqE{}(Q(j9e3wx8Ebo&J>-%Kx%` zF8%A=<|=nGtv@}~?XR;(B`aM4-RJz0l|Zo{=^>^Ap_@@t0SU&#*1pSrCf1Rtzk^O#o;BKx(Ry7fBXU)L^7q!LP*7wxg$DGx=S_iCxyou(B(x__({ zf6k6!)_2$~wToo-&Dx5rbNj(b9|IJwHCw{LmOyV*+*nNOtnE7X<-|=o50Z2b@9(>; zaF%8v8b-wMEn!0vn6}0ESaPSm8wso?j?$zs9#1$y0%hvr&OgH zz1;#d7)&$Fo{8%1d5Gbh9JiqN**o(VRAJQ<@8EmWf#h~gvjuIvwe>LLkUZ%g+b>i5 zM9rbPKYN4vExkyB+_N)P*{$?KJ#Q$X7IH(gs%hOsT_qNns4qm(YZGl;Mzqh-Zmw~k zLnF?LM)iI-D^|UV_gSjRkh^;qcup{$n-Z~sheUlP(~+DOrhYRLLT%|1{51J%pHL5& zgUw3&Vd#wUjJFG@2z>^=*mb7(QT`6`{QPuxuO)ZXENl_bSw4F>Y;67WWX*tVY|BjS zWpZmiP|f#syQ4N=D_^7B+@e=PD(ocB9r=fb`vnNL$^7cGNDqe*6f*t5m_mMJ^*Mc> z%82sw%i92790z_uz=K=UTPF_k4?yNuSHLhlT`*bF?}YTR$)a!D^JgF)d*>dU9%RT# zR`vlo_)~>%_tPl-9^;O1jd7mxI>73rZHtd`%^K~-SIi0w*uShH8W6ud^S5Q9?hYO+zfJeAY8sKKI})yyP9Yx%@1}??+!kbT zi(6z9dxzelB;Sj0OuBLV;F?$7HUz5 zI^fp!Q4jXK)0>FmnReB_d^^io} z2qa6?e~C@VAy_|AeHM8+-PJSOfzk77L9m4_rE8957h{!cfR6mP;tco-9 z%ss_U-LWEM#JYovR3}T{$>|PWx-#qzEK`@u)Eyi$oL)4~-OrRDjbY;wFVk{Xwr8mo zsp?!(=SHL~vn(Xl6H-|VtP|c0vNTGs)+lX?*1u!C)@Wv5g%iJ&|+%PO8oGEu# zL~ep+dTOYT@Lo#Zr_-?l;rI{{VI zv|*y|Q_M9{zcH^%s%L|w-lEo?n3q=`6z_J=XC)%rvi3w=Mui!%#&0dFig~baS!4HV z-Ll@IHMSV>^o?=Ko99qojqpi#Vw^G?J-$P^;w5z`H3;brW+FqMr6nErIzCHqJlz`K zVMx?%0vFZ+vA>-I&q?U&Jnc*dP>70zhYYD;M6c-h9@~Z?WDU{;<=l_ zPLI@5&)^i%IR(WDN+v|chD8p8I#W>HN-bteF}L8N+zWLrId!fp9i^t>xBNa)b-n+F zsw-MrFiGdnpDLxw$x1v??VlAiz0j2!_0&*3-)yS%lypWSm>;7=Kd=->HG`h0Ud$_k z@!=(|QVOz!t5F&>%`Q9n3lG6#IMk{`R+enC(R%zxsCo4v%!HxAOW<2?e`=T(og7x2 z&1~I&1;5Cz&POS@xAEPeNxR2d;GopzR(aN1!g_V*zNZ@45IBWWFLqBuFzG(f{39RE z_9>L_v4Qj?R@f5NU+R$$m~6xsG8k+V^}otfBNz*}*Ow>{KdnQeZdbINsMl>@Egf}B z)M;O#^5wV8|zE&i;NpujMb&jPDo+tHHv^&sQDJ*}xM-bkd5qnU5puu((>2A97^%^qR3MqQM%%Hunl zE!gd1ylr;-h>F`slkkxtb%Gr~opfCyh;0nwB|)IyW;fX0Z(*(lF>fZpbzPKN$ zLENIc9>IoZR!3`)hA+}hRROio-==_LBl%9}qExGbE&UHSXHLx4KP&eV(G7-NdfV($ zbH~h5bI(*)RuBC;b0cnay2zgS9M7N39fB{Zcs_fRs4F%%{5q^5F8Zl#8)QY_*+hSQ zibU5rhqa5|@KGDlM@sZ#kxsKOy%ov(9?|tJ3;!yRFr%+HF?XYl+Og02V!ij%v0_Pv*oZ}`Ng$Yn-d0fA>M$MYc zUV=Re*p}Ia?ot%p^0+v;JWygJX9{d51LK54ycnN-5H>yo=_RgeBM45UDjqeQ)}5$b z^X^Rgb6a_^4+dyU$P-#w;y3tO>e;HWLAu8YF;NbdC<|VRN*8Y5SYcR`%L}e1OKS{Y zZ;5w&wyQ>^>4QY8%+um3Mn+Rd2;rD^X&tGoX(6o}pjG;qYG`|ri&j65ncUjIg7a-7 zfWXMoY-gvfSSdTJgO>{Y=xjttUbRO}4nM=u1%%v*<6B2F|a~Qjd%y~DyJpxD0 z{~Yf6lN{%FyZp9Hlc=UGA>#M!nk{B|E2dw za{Cb1jt^#VuNCe=g7e#@O*m%Q`AO=*UB$#Uc78qeR@F2xQCI(~y5qUL#>(zCXFV#b z*D}h7{|^|Y;}uC{s+Y&$qrt|2_?dmmQb zy5#wV@R*nK1p89fOBqP|1uXj17~%pUen6@b?OM)B>I~6Gl=qC~`9leo@Bj&IxFjPk z22w39-Ba6HEk3b}l_I?ApW96SO=IT6c8O|T1kQ{}&#TAVcBpkLp?6#mAKC&P(yeOh zm8ko@SsJ~RdkzviYF&d_*=S#*hkIEftu0akKYm{2DTY8yYjYVTO=|}7I3VP=R|JOa zH8jBBK0y48pq5(G%wX4$7n0_ebv1O@+-$VA(hmR%Ao?;bFLH@F*%lR|X*vN^RM(y$I-#aS*M-#!;scelvWj@;SHd?|k;PzB5i zo;A>+hHD8ADS^|SO`Jy*D}6MP9pc7G6vppg2WriJ)oa@gvgl+vmPAxryb?+UovJiHe=EzeWB}u zAT*~~t?WbJKy!RaP?0hdAO)W+;;S^hhEjVu$uE)IvS1JP+TBo{87WzrVhqQQR%%A< z7i@`jOD}*MX_kGlg$meStc%z zstvGONH{`nBZwkF_z{xxPl!n(rvU7cDGpwt5${%UOQL>V)rnx3SX$+Om{OyDEos#3r^DCU~}P0;UhbQ-6)Go83CpVeCS#Q z*j?FO+X#@}kjC00b-Eb4A<$*qw$}dNr?6>;&cUGI3!j%d!OMnC`9pyUQW-P=6`mS| z&NMTHSoZZ~*UsI;Do4?Mx|JH%1xl__ADT`3o23n+`nho(Uw(UG`&f6L%A*YyBMs|!B>)9iarK+%jR75S|T|W+1@U_lnf2@9^0nnV$+%lsny+Sm@ zZ)zJy7OKkkH1v_~8dlalv53=!;&d3CGMX)83fN2x+E+GW7Jx_AOnmCnJE(m3Bq_m2 zvva#1&b5IT%_wxm#QNbnQ7e|**7nOLOM-ab>c%jyi@xZZo43sJShdKx23x^FJ zi~a)OS{6tzzVL%2=y)q(CwJQ(+JW~=#COnk(slzsRO{tJKQ)VPrTV--=!c3)UgND4 zr)@U^y@>pz7ro1)JvBvkLi1im2vsLcc ztR((n4VPjJ8zWum>**}mw9Hs3GG?USXWBT_h$u#LhXubtjdyi|+Bz2O zB#K%<3&p2S%==PQ2Fks-d^@Uzzf(uGUXXrQtv<$O4(0cU0@U~1`J~PNx3%6*$~<6q zv!sEb==BA=j!e-Q59V}p@3Co0VbVW%Uv$He>s#RC;l+Hu!{M6i55L7sDa9FCoyuZ; zJ2TUqVz}&dM(&IEXBSZr73fSa+F#5+%4~Wc+WN<;mg*tfgNyA&2~tBBn807dhn4HMOmKsUFrr_uCN(~wr^BR$D&t^R!f z@Rg{ndK@acIcRQC+ijH`-*Jy^tU{tr-m30$Ye)Wbx z#fiSE(?VBb{3y!EB{UD9w#Jeo*?$w-u}0DFxD85F>nm=l>0$Lvumtv&S7vawp{xM%zM?0Z>BgB$!0Ri!%LX~M+?X69v9)`gMujG~~A(lO&G9@m(k?i(* z`@yNsEd9sI+Ea+{JPHFAu-E)cHI?zH*Hc~tdC}=COSsz-tZOIcNd{O^$%EP$uqB*h zl-1p@>dlza)0Ot2+aJz+qLta$LLbrp(=Fi z$jK zm<0;w630R++ZOUOo==6TL9XxSsRCL>me6<+diG&8itQ}YmOGEmEj>Mh(5-YAf!qX0 zt@l5|o2K2?!^(4sX`?APEhKgyV!M$dc1CJuuJn@yx4S6Hi|raI@$O;mOTT?9HoFPE zyP^9PTTA%uAzz3)#kYaBm)bkz+A@;T$i;Y{O=r&A!^RX4H9GGGG@?7%-)ypjz@SAptIdU+si3=I#6BBb9u*CHJy9MDtotHk6GD0}jvUdr4ZCOLgQL zmm9&zws?5~x1FojbedDp$YNSvK3AYu+35$S3XOS-*5W`mKS52Ec+VSJ!%;?P~+mpp|d@1Bw92d=;no67V*Esk`-%oY2zTx+`5Il&vL4_AuJ{s@EGI$T^I5`HA5ot7Tq7 zrVgWRPNC?b)HU=d-<*bKF>x}pt9c@{H?ZM8P?1{4i6KJg@-b}?E)>FG5NfkAD=e*t zh_LCjgT@#e6E-1*F<_%qCp^slTIVG!tGi|ua3+R(9%g^3TnwhkVwJkB6SSWF+})_b zV#EKXrrB6Sc}-QH=jXr70v<7@Rr%bq*KUVfv5t{CM3vy}3k|nB17wJbD#0-C^Oze8 zbGRf}#G+cenB0#H1wR8E6(2>clRCnEO*!0rmI2a3NX6932wByao`7Fg3Q|Y9M?oOK z&Jpe@KsAf(tE+a@2&W0l#@OE>Wpp3BZ(4>|%irN;SU!I@E9+~2M_Bw*K8Rk%s6hIz zu?3HCp}^96hj8nMa8uR-*C(XkH>5u%#G4f2^=pgQI0#j%gR%>Kt)>jS&>_*?#f}NB zzJGjmXFa!Ae0A+^b&H8Y3SCP&oF98sGbSu=BFZF0MsncL;=Nr&9{ zGKfjH>HLz5>A@GttB!50z5k?Q`{KDUnaE4;?`M4q8)%}gCj_^eOH#?y8E#Q`jF2cN zMvp9t_km@d>F!ikmsGjiu!lXI<<{lF2&!QVr(DX#J4Ty(tqN?y@J2Mmpm&M2qOU(NN)_h$hR--52sn(Xftjg=B^N~wi zDW~Q^9kwm(4GI*^ zr?*y_4!;Y1taTBcL3N_X$Q_}fvP41WvM$?&(6IvM_UEO+A0{+Q-bmZJC zly`i&P9B9@*DAnXp;Jj}tX2L*VBgw;_=zC#pCgjm!ZH4X%ccFyQrX{W1VL4l$~c^3|;Oa-o*TS>!NW_iv5-8sOE9xZ$RMCS?@BZEd@i<<;^u`4%ybxmM=_#M#6bTEy*kjc+TvX=S>Gj}5UqS8!veTnFN{tszcL$te&^F*2%cOX4#*0q9p z1{iO3Ok8qLI<(N@rK$t0Ah`Vf%8!e1FB9(h;AVEUbhL&F5JFRdEw)E0E#FK^c@AJI zmdKgD4?gf36*;oCdQh}Eva|cNbL*=_18iZUDcGF0s5`CITQQoY7=CrAq1b)r3HQ)J z2e;f_V(Xmrv3m&Whd9(1?Le83KgXe5Td16adp~ZNtziEJC4cTYQGKZy4y~y$JzN9N zX*zDsRF8B2txsA1al5>$yC9X`kKVarY2{|Ap=$$PahHJ47BDvgJ2J+$Lvd4p*#5gi zHT2Wp>BGK78mZugTdfABWa@<=kG?LBxk}?KpN)bXy#CSME!@{EFh{OW*y-BL^{QLjLQSz~c11S|B$@{zsd z8jG31_i?Dt+d}1-!M7X846LBk1~xd)V{eq&QuSzBT#Obm_HePL!7xGxhFPHD9xWYU zFv#AaVoJseEc$}4r|4k*r+3H-PKQWj1?>P01PCk82QY*0ZpI4k4y)|zTTBD&ABF<> z?|1O&0NiiByMDj4%GRC<)jO)WHF*1}-Q1;K<-56RJy;b!=jpXmh3jx_E162U4;d6& zS=CRM`>bb`)g^U;8x1`q3ae1ZBC47uC8{U$plcIj5_OkRkCoqMYw{Ngm8r?VUSc)L zO@zLgYS}1tPNpW#hBGzscYnlZD+3A@ab#HN18q5DO!;PEtL5-w>sCAER#m~OK2*VG zsTpnaHz(f~jDC{-XWfMU|AYQLgR*tqdz71vjF$2RsXg7weD5?+1T3)x8oN9S`{cNYH0Cy%XyKCMND&n9@Fbu5B zutI#C&D!dB(w)f8tUNTBkW3$IYk8D9(hOHSRLX9pe^)(xbp!SAAq#wdq$=Bw4-e@Z z09FsXxML`vHi2i5$hh15XLF02riFx|24zPM^4!h_wZLsIsC@SxP(tdf*Mr>20?o|L z)>q$SVRU@)wo~z@BSqxr^^QC$ZMDjy@^GUCw@D0c{RobQIJ>ZA=N$`itw<>2o=yCO z;uKn>`ruo8dsRnH&@(zyY`ePUMIJLTZ?P(Gh+2obX!KdD?b~VD=ZxVqhZQhmTXo zb=Z*(MLImh#9mR=G$rf%94g#ua5F|K-^Y31r@2`c<)Wf`-{&QORZm_q#BQ4(H_H~YT&%w^39@no}#q~_aIemqb+ur^{AD=G^jYGA< za_x#OsogZIvMYw?w9%)$I1GXh@bN!;iM3G-z(Q<46Ng&R4%EJ?sORHQPqYKIm7ren zPz)zT6)*JugK#qxBzHZiJ64jg7OzZ*7jJc6L+i+Q83BRhLg|@e1yp~@0Ku3k@ zY0WkG;u^)g?xQjE!W(3iTf-rE5onFMPjKE|YBKK&#YSW*Mds1=$?QYuprms>Av4Fw zbmZIEJjBp15c=uuqo2cKPk7FaGmJXtmhQroyyD5q?`1#}3bke3Z+`UybWHwIM`S^c zWs3A}_BM#~$M*S?U-u0Mor}eC)z#Va$CmIm35*o;=Nq+|{*K7o(`9iB)qD%e`@jib z+jBBk=6tc4q_5|OJg$s*%omTk7!ON0CBs8>LLR5UBUNA{aGZXuRBk=`^Q61ASo^^y zo~!?-Z8ujf9;EZD>Q9#B(TC?X%+6UDpld%zl5~TyRe`MSBVK3$TFCJI5(k~UqkC=* ze8RrZ2c~kpIfUhQXri2qMl!GR!B+HS8_-3)lWrXW_RgWOs3)O{)=-hZAfDLI^XzA5 z*y~1+I+KNXyE&+Cx|ojzIXxj{zKNQMfG=tdyl6V?1=@-|$-hb}YqZ;W-h9-gbmWTTw>VD|qors}bMhG}ue5 z$6@}nPPVDbE3kUVcm+?YhI@gP>2UE1D%v*cEoqH8UV)LpE5IrL)^1Kk)6GFDOSjUK zMfi;?Fr7uVL$5x(>~J@R+?wipFyWTR^~njsD^pTe7MyG>;)qT&sM)x<}4kw;W~V(*L-dFi2SO;l`P?~HtT>Au>c5M{L^ zO8H@p^R-tC}SEE%0!L{WkUZip}vz)<5~$tqhYk*%e0Hi3L5Ao zIdEE5(5MH(tJvVD0WY;*pKXt@Q(kUO6jNKX3*52ptoabQ4{!<>}tLCbsvDwv7e-?B0o@kXaNNX%(#iOROB}E zWV44~BObfQczj?y?lYoAt}nv_JT3`&lpBxjiN_)yTZTMd_iboLiF>y3D`RZ!<(|7< z;vR0ez1$Npfz&R%YN{YfKj1m|24zXQuqEyz%uyMsd%4-3Vvf{CeruC7FC_mruZ`tD zh2#g=5=m90HhMvZ67&k#;;hH9{=vs-2N#v78y?%rCh$=0ECtE2JddWxlTI zfq7ZfPGygtUvfvdL_0|W+%Z2AnjkSz&Sd3WLXKqq=tt}M{SeFU!L1CQIR{B^GJkYQ ziQ*bze5+g+I@6kxt2o3O8~`N?V)VBJoe@6m5c#w_kV>vHLZ9|BqoHB70F9tRUxFrN zK#OtTF;V@PwG^fiambDBr4?jN2>DVRvavnL!$ZiI0P4zaYDW8bRU%Fd&A z$5P4$&M&zR&*!T7CHJ&)*7v=RE`jd?gf0z-t-Uw*U?nb1ZOK(ti-xfN@jXBzLT&UF z5jQ`czpwH+@doq&;_>`Ir}Y5CqRMrmZw`l9xjw5iGZVYm#p@fVg}(I>SZHw7C0XCv z63!$cd-3{PI;)IaAAbj@UEyTZ^E|7A#J1dXB4X8|$i3b!Vso_EY#C!?3B@^Vs^VKZh4N=Ds-BX#dQCpK$^%4KZEH?hpiQlgrE z`2bUT-?mUY3Tl8bsOF;5#R%aht2(-sKBwm~JO=|q*>^Kh%VwM0WBtp~|5N5|B(rtA z^eXlpLG!qGWw_EZw8_UZ^sVMvk08|yVHlH9>FstL88ZZ9=X>@KeC^~6h_hnKEcYGJ zqwRn(Zqj8(-LMp?VaCn2J(%+Da*J0a-FY3EHEt1dzS>zunRoO z3mfkO%X&tw;j5Jt>s3516|2zD67zIR$x3iYn4nSH>Ur(^c>AX)v~Dvo9UW=oR-H`q z!i&rs_i@Hu2Mt6waSIVJzZL5%+jruvT5~BYuwg@_*^ZN-n}mYCU`6sDzB57h3=^tN z&|B9o=6(`$858}b;TU#}q+EVsOv+vVPf|X|Dq>d3Ytl%09uBS4*;wOS*I?dF%6q~D zeNryo9VXbGS2Jv4WH2>rdwugZ3cXdLj*g3ZZN8>M7;R@3p<5N~c0qTEL!V&KbdGCP zPhy_0>Az55s@)3oYkLz$&Y!W=;@0{N49XI7y{@ZAQ<`C8AQ7CuL7NLV8@M1HS)9tY zqje%4(@g6jm2G&nJRjYx$fornO{d;|!%ecCj8Hq<8-;AGFA#xm=j9NvwD(98fkp_V zPY_G`i5}&fwU*#f5x7^tK48N_!E*qTy5Qqgt+*`|a77mQA^~THn4<#TZ13?q8Vfz& zXfu}O{)JVhHVvj#L)qn02t>WbUM+09?ZGg@6fjY(qr!@CIYLg;_q3k$`b-oP)q|Ce zGes<-`+gx($|thdSCKH|I6Z4Gt=yquq3iM_YR*93XD_WFwX|k!AP)IJdywx@(}Jw` zkiD(&`}vplT#Q8Z9bg#LAs)(Hnj!wVeV3-Z%-~0Om>gGVr7!ea@R(l|yPrKsYd7do zpWLpD^DaO}tl+Qxl{?fT_6vmR`;IGIJzG{`+1$w_{zXCGXX;~(qs2l&g z@-r4y%*XzM-@_Vs;$o|-qfGs>XJQFya48@x#?(vWjQ6XkNfLTve%kBP$t${t~HmD{IvpR1+V~r+NbxxdnG- z6%YKi(u5?C+3aQ#c_(3^*L#kWz~OV;<3S$E59ssT0V5W4drrc1WTfAVn*9O4vq2iY zOy?z-${@qSPNHr!4~hDhkjgt0lI`=kRxzIIP;?Hdtb>qrJ3}F3mxC2_eRcM- zmSKTzJwQWC$FaLEnc^$PtsV2H>d<35JHNd|A$7W2{ssA*C!qJtFXub~KKYu{l~v|m zR92VNX>KP~|LIget5b>UBX~$nlYgY*{6GnkuI4vR5_5fG872dz%&optNf*@RR?ft{ zhouT^(t9h=%Usf!A__PMauA}aY*%iR2hYx-%I!jJ=&HE>fJ#H=>}-?;?=JAm0Oz`d zyOf5Qo|pmaR@y_kr-@k3O^M}vDJx529RbY&x4Mg!_ zCFC5D^VJ{TnbTTdX6dqVuyk$bj^nE;uTc{@hqI;<#*9tb*n-5-FN&>S=olro{>@)09MeajRc;n!b zwxGfUmhn_b>)8>8fZ2fa6>?O z;!>d9P174Fh%`_@Yj5-dID&0;S9MoaS68*Quox7g;0)8jiSaYZWTF`p$4@eePGX{w zHpal1sBy(5pG@LL6!ldK6%{9#wDx?z=f3yqRng?<{PFAlRMorZo^$TG=bU@)^6tCu zk1lnuChmQ}wasxJUUGFUA|uwZXM-yJfD5^f$U9xg*s{ni0kF;gm#x^j*17{vP=+^Z zvx`BJXsWjH>M7dW*VA~5@R|j9cs4#an~VP^TmOReA0hGp98{g;T{KA}*L~l>z00ij z?q(}kr^SFv-X$*ihfm;=mTb02Z4{|RL_(8w3oAK`PA2TF z;D5HEx)?Cq-X8;@Eho=+g)4Dnhg)KgoOG6uoF6XGUIvTfcAe!y8(HAj!QbAniJBgI z3iE2&mtp=pa=`hl99r>F;OzrmPC&TlxB3Q%e$CLSRunNGe~ouhh7fT0K-JW6LAcwz z`_&1KwFHgN5}*Aa=w^Y)~f!KIcVIY}OFH1C8S@m9J^I6k-y*Zf@re)zSc)K{pV&0E=Q zHqNsqEdmPzHhj?H=RAjbE74aAx_)?K36E63$pq$M)QEe3o<+rN=C>33EEo3T;$0tn z&gM)_B{$f3Unky&Te5BU(o_Xyz2oB?S^tG-PYIeMtH2%wjHl)enN28NPDJcB&wT}f z2Seo|^Xt0GW&_x<6ObD#&Iw;)u48||EwRr*0Xve}Wb`zh9cY(`W*FlA2xo@VVfXQE=x?J?(=iM`$;EZXfqAAx;GwH39WA@Noa z+vk1>;A#M{uNrD`(OhZMJWHCDE*b%Ngr-Qg#X@=qI5*&AHwqGIM{REMebJGzAb5xfzy9e3&Sp@_F z?3X{@95(Q{)-@%t819V^K^b!{fYK+}70a+Z=utxdlhFOAp=$)#slXr}R2pHp^E%rlSG@SgJ62m@6SPX~rhnPmXhJV; z!1_!W^E8f2Uv`a3@Be__{c^MU{LQTM!SphW=*ecIuqocP2>op?t5LGl118um@)inZ z)UtMFd|F{ydh$fn6@%N2<|z+#r8^DbA#7H))OBC#Q5iZ zOOJmKa_aFo5UIzPz~Dr4Jc^YRhbfhy7q!eeHk)M@oBJ&`AvhQ3q~AdrGa*-Z(|JE) z4`wE`?7z5XCck^nE&{7O9D~d2%UiI?vf2DO@+jOZ@H7aAn`?Ji9qlY?tTfJ6T!m_6 zu$$PYoW%-6pP`@1i!{sd zJm@h`HqwY%?wW6@<#ICqCKy945@}Ae1IlvdB#q;{ERV=5hGf>vv1`~Z=59f~9z=o8p`C6~984Z>h40;G>MGo6FTuW}7$?ZU4 z_E9CuR4y_lF;3+6Qqbx^+eQK}2;fbeLn}WwsW2nI~Fu(2;B*gcyj*}Zo5t1X>|=!urnaAt+btG^f+Z`597N7c2y#ro3COr2Z>NUEL~W3 zUIJC%RHrbW8!s|1hMxKRW}3f~%nS^ULVMVMaTIY>4u8TqH@jHS=TMHT2_Hi@DK(YM z_mF8fVF4VZDwn}+Ck@n<%Xmk?g8+Z|z%q!pr@)NHdOktLi9SaNW8o)TdJPo6-A&c!)U9;J^;qQ{@Yh>YZNyKob zRb6B?U{Q7Pu2!sj+giVyR3Aoil<_XQCsBrE9zv$A3;{f*vG+C{&w8!R?jExHE)X#P zx6j*3Vi5p`c0u#sWA3ip!mhUqlgxyxFafL+UQ=Mc%ve}b%%~SZ?j^H@cJ>iD1&c); zk)r;Sxo71TRcsd}nMJOm1d!>a*eJ@hiZacA{V&?|@W2?_O!z)Xz6XG*okxaL4_##G zOEQ0qObK*{2E2#Z{jocgOK9L{B)>@t!Zf6Kmwr_Y(CoZ!oj1^+&kGd%78ZA)uzBrT z-QTRX%ahz?y1Xol^E8XAE;*3I4H(V)A(lIVe5BhFv6an6GCvL5Vy9Qa<%E!rx@!7| zN&gg3U{@(g01pyiVf>sJ-v@xb$6CBx!FGvXFyo();c9NX=UEz)%o~wudzb)x7Mmf= zg0Klt7JP^JUV`K1XP9Z)MgEeUtAUF*0P~H&IDb*Q#(rkZ$}Mu5U8H1AbQLLp_d}F? z5?a~UpU;-?Uu5(WvSetBeQ<}(&HJToV|B{>4z45;9WikiJv+Y>F^YHnLhP<3dY+8_ zQ5ZSHhMjXQB}nErWZFs)z($d%(5{of*5qWXJ&IAAW8-{WSb{2r6|2Zw`~ z>)B7Z%N!3epg3?@0L$8^o1`$m#T0-h&6Hi3~Q%)9wJfUPZwBa7h%|!ehaMZvIX!s00@$Z0Y7qv%Y%5^^9Zv% zFRY)t2zbx$FzoMemi;2A2N>Zvc&vCOVJ9T;ECLd@>x6y}&QEj#_hyjunj~Dq-e&W= zf8>}Ad7tXMGS^~vC&Xh43 zfNR<1T+1}F)U*eD%-bOZ23O{Q{2te*6W$B&<@=O%Bv?Z6U-f4X5p;on4X||pxF|_R1U11*M3`*&F6_< z%6fi^`s3ck;0n}GAC&SkjDZz=*F3Z8w{W<6U_q%r#zAXf+ib?cf~|AbA&P&mE#qny z{BD=C;*Um*h;%QGoo#snwwf~Fz1KN*b{QZz?2s;jyK{K@{^||9J2&0*5OrMmO!H2f z3~lfd{Mse7vxMCvm2mX&{1RRV#HRZ@(lvliAIB~IufQ$=jNR>XFTg1psgw)F8SZi^ z<(KfTT&2u@Su5o(t(14b1W#7IPAAuP_OZOzI$54xX{}CSZsXQ;SeWi~t<`)7Ycg8X z`i_rn-!b6JyDsK=acEnX)5D!K$bhx9Zu`uuuW`Zn34y}y7%_=@H`{nOqOm~HA0d1- zhdt(_zh-*_;Ew zFw7Z?%m`ss0=rUEo|Og!cdv1(L5+s|j{P%Q5FkrA?JhE}hC5 z@T$1fG~$etiWTA6RIq!|Sp(G*Li1EQWdkOf&V!!CyZ8(MCxBT0Do8cysi1u*M+(o} z%b24bGl2|FCvr~IevIY6+5v%h7jsgI?+Cq+_JHV<%u!e!OY37pNnuAQ{oa+y*6Tw{ zM!KtcW_Tht;bY#eZ)|=K9b|eyd|f0Qo7xa=$5c-w(R&7;rX($p#PW}3^MOCGp`u`o z@C*?aP}J!d$w)|DyQn%iQ{ss_dvDx z?jFLLz#vcQ#|q~AyWv_&!!UF!GH1Tc=6xI}1MFBOyA)Wvv}8+T`36tE*ZQ4WLv+b1{kzYiJtvw zjznpa?93$*SOhSP>L5{uj;USbV{8g`##wmJ+WGPjpKhtrhCd>^QjmtH1ZT`CM2j3U zmw%3AQE-lxNx_S(Bn|)@4o?eKSV=tVJRCkPSYsu}GI@INGAoI@*Tdmcf~&10 z2eRSG!FntCdnU&P*ILP^m@EihWhH;kWMQzwO7ii<@R*?AO5Vxj*kIU7-pb^tV8Tl7 zU{VFQTgiST2gVd)5@aW)eR&oxL#lde_ zNu0_#96mL8mzBg~^Kckz6;|>S#M$t~;Qdze9VF9#p^s>B7M(<#;$6Q*PWX)A!xrIv zNu>Nb#TS+#71SvnE``*!I>lEzA{EgozTSyz^Rotv z0C%l7{p}Z|jM;$K#tzb7u;RK~Vcjh_II9o`gN-$3Ou-m<2bQJ>c~=eVb_rhd78({x zl{vN%DX#V~h4eQLXQ#V2uYtCz$<-XdFueF@V`g9|&q%i&;cDOXPcQ-77rK+*vB&xS z$}xOfoy^KvIE`rc(4Q?);QFu6EL7pb;RgvDkQ`~zOAuny9al-jv2TkDtQD}~gYfj) z6KF0Y&Ba2q!KM+|Y@tD%Mj6fKy)R)i%0bxK27C*EzbW@5^D8(s=L^ZboHBfGLyp`6 z`xam#_tF#OUO}3K&^U4ntVd{UF^|27vEfWHVODPpkyzL?=UhMZx9d=3J~_j#gGH zLQ_S$R`uI3zO~Hu$qRhLwls*#)Rb#FZk!N&21Ydh4mgez;(dd^{}jsrXFP|V)4T)6 zLJ7%mxw#mjN4N1z6NW+C&)k9MEU-Q?9YYOW*!Z(C0NM`ki{@oi9>CLqUEIjkmY4Gt z1p7=K&QjWb?+)Rh&hsR_Ng~w)I4UfzGcep6?a(H~^V0c32nefES zlkSj&nanVpoDCmiEqDn47>gN5Y!*j4G6#Sr=@uk3gcp@im7@ti?FTK}$9CyTVnlF2;y}OV7*_Ma% z&mVax3}J&5@!@gjfx|vL&7;<~;9z<4{>dU#@38k+K50@&kCL4`%RE)rZcx((_QVTbxOG;>^+FEFVFfx6!LWUpBije4obYniph>wn()UYoSsK$2;n%#K2wFTc-QH0hY^%=@PZtr6j8@-qn~(U_YtTa zTr8;u_A>qDPpPB$xNt{$CJHZjQt!#!#YZzOP3GeH(jTKY614^pTU*F_d1IMeow+qtje3 zAF-;v>7p$97L8sgN2!g7-k1J8Mk!WRRl0F|^1SZl@#5$H5gg|m=P@oEhEt$%oBAgk zIn0VBLV3o3>j9r@Iq7n4D zdX61ubzfj^xD`|4%iP=~c<)2St@3L$H|!oo{4U5$)wmY9PuL95 zlNUqk@O*F$I-vg+Dto&5+BF=znB@e$$zlE|^C^NZH`fpp zCe~>4A%YBZ0zrKQO*1#~dIzsBG}q!<7o%N1-$`#9LwywQdIo-Lo=U=dNVwRXj%#xi z0fz_}Z;r!tW>qjPWnd0;4SJa1Uzs`uHwT-U8h^f|@OoON&SYwGc%oUw)cH(J4C90j zrsgv>4YixjRIR2PWlmtKNvB4eLvXg>CZ;B%{P&p(Gc_?h!92uNim76F_lr#J(sW}? zc2dEwF=fDSe#X>Km^wE++5A3I=Ecxi@FjvyHOp~r&LH3&0%n`D2^denmIvvGYLu3`8u z(p<8RIra{lNPCOSclX&LwZQBeEv;vQer3t*KD!xM?d2}CmoMD7p4DZct>!kaN0o5> zrPGMu_Oooz$WHvsC`+to5l75_h}hVcSoi%y9$+fQCDNCSX~PtM&+bDg3=;`VdX#wu zs0U=~&l$@!+>U!f?PPfJ9>rEu&H}8=(RjPhm_ibVxlFC zKkS9I?xVE|VHZXX9b~R91^j-(N9Dj*0KV_P!2@wQC*z`%5KIGn@9sknfisURnGGSZ z$of^>YDW~t6t1+y&L3Hew-kt0FkWD++q+jdS&?nt@L%aou7E4Kx(43_<9)|%NnIH` zk&#(v$)s^_`1VLHlBGc*+4%c|e-*=ti@2rv*5{ChPw|&d#-rL|gv`Y-LsMowjkbmp z#)9qd@AxSAQ|h(I{NXJSWHD!vB|FY!?r0p@`9t*0V)RTI3Rw|+S~FcooXc5KddDfjmo#B5ffrGVnS4Ze^!7J)jLOVl$rEug zm4%D~<2o|_5*W+Fb`R14ZPRHjTNc;0Xf|Isg0Pi73$8hNCvG^+dvee2S7B&#;3~wk z>cV@lnpA|#;A@m(y!l<+NgNQ2=CI#PL0vc}4=}qQxhW^V9r=3>Hk%(3;~jDsXI_iz z;p*l9?lS*~;P*6m6beCvX@(@|^&d0GVf=u!f9#MJ5J&9_Yp=+7(cpVCWBR4kco7$?K2Dx&nS+8eP6fL?yTN2aKMSFYecps8G}& z*lNU5Nh8*6#C_4806?34k&xe5QQPWOzIfcX%|N-Ko@ienYE?k3SksbAwEhIh@~hgs zxj2(2^u_$CNC4HJJRuT_@?uR>Yny8748&v6((;ASLfp7AhC0VXO|7cEt**XRt!S#R z_pWHGYiev&tLo~#t*Xttp>1W$I%u|~u5op%Dy>*hwXkYYWlhy0ReDK9MP=o}it@^u zMb%Xc7gjGSU!>~mTH9JxZA)F-8nA0@ZL0U;jZaW<>HqOhd0SeVT3VH11Vd29Ty?3M zXQ<7-c*xfo35fZkfz5%qkxB&oz}n)AM?=vbAof#-xbhi^WSkdJaw-7L0@5AY8t@yU zY88n3BY{N1Sk=@5_lWhYkRNIfb%($-8H)iH?Ez!)BLjTr;nNq=ygh3?1{CPo;Bi0+ zm_49U(XL1g5?N)dP$UxQ@kNZTpfB$0N(SP}63Qtdn(Bj5vL(9HzBs%j9ss?DCJZ`o zBGpe1N3}f-O)J~$y&fa5wLbvves>)lnDzxD>gx*_{#ZaW>GLJKg3t$a$qeOLJTjL& z0v9jkDRYr{yp1c}$r4YAL7vporI)#KYz}ryRDG#PGSna0hSt>$SM?iNJD~1esdyr^ zIbi5ktvqg4o_Q|5iEYuOZ>wc4v}{yA4)dZ3E6)usyil|&*4OV#hUiAI{s5XH)HVVz zp*$_#w)U3B9O7i42iA(g^SUFkEec;?1t;r|(M=sV?G%W{Qa#XdE=oMm6H34l5{r!l zDisNJZ*$A)4iH9pSy@GOwaQk-2x;s2q6l6hipnQwsNK-&ZBr7O7{5BV8P}uHtGac$ zF~ZZdN?WJIRX;?=Kv%>U&$WWYGRK{=HW9d3EyPgiIJ<6e2yy0CME9r3{b`p z4@ssxm%56L22fx!W*OONy{fg%+n_|HY#I!uRH)@3%G1{5B2EUO6qkw+@QK`sCT}=F z+1)VmT-w3W4Z&)$@W(!1yf;@7u2K@gSSsRYDLIw2Y~E7apgeP3LVDa<&hfT>1ctr< zBZFAPrRD@0hORtRnU&IZ0i)BG2z6;~T76z#blBt)z$LoHV0jaQb8TaeZ4kfgR%jUu z;V|OYI8iHbvJ|M64iBltI=Z8ij0l*03*?NE$&O zT73i|K4O$x+#HPD_UfwIT-{>l!9~`1-3`~X((N*y_C|DgF74!4B-;lor$p)0*>j^0 zL5vr7*Y&cyB*tmK5sSic9FX0?i;h6-mXw`7NZjA`IC?l|t^%#QU$At-~-VaQIy)poPg`LV91y1KHOodmBK(HDr8psbRRQyEul~|Cmz}p{>80~F z-JqulsuP2VsOsE?*-av##F5zJD}PJ{B7op4)XfpD>h>`WZ7Tq*K@>yS{Hu$1HL4FlBsx9C4&Kc#Z)q$3P=wCyC=Z}ic(vG7*wkDm;!iP zFnwunyi!jJFgaW8#pIwb(O*?rt{PgK`BN4QY*kxA(aH+cLaoOvDYhk{$^u&h8rqWz z=?gz5Rb~9@#rPVz*~tq4k{Rm^6Sby_oaDkHuBl=^=0T~gl@+9|=cNru#8eqRl3i29 zZ0i!hM6wTp^;Kd5)KFQmqM=g7HvDcNb;e?mfDfE7*jHNwtf!y~12PrZ+7)4> z=O?0~fh{n3|2F08OkkoK2bZ{tz#x$X%;@*SjtDa_W@jjw08lb}l0i&WqN>lg6*Hu+ zUKp&um%~@!bw`pcGY%I@^h3Mqd`o1XAJUfu2BtYkcFn3$tSUtf*~SiJ#?ljjF}FTCMSJP;G148luz@Ge-jytdq1UcS7l{E`(bD;6wYRKB2U z1+S{BY8KU8vaqtEd|~;*ikek53-P_6W@SZrO(lN4_+O+S2WfYL>63Km2$L>A1o>Gr$5w%>qH=-N-+)e3~Bc&I0cMVl_P6U|GsxwxrL8NxSZkmO8zradoVp{WL}*P&hmE#3rSCRO2$cx2UNCn`i<7)CF1H zUgt`!tgqKWAGqGFFm64203=$QY^=(Pd@g{vxFF?l!F84k65!%=M>;2)B#{nOTfelR zq~eCHTaCU@7ZwX+uzd_J5Krjd1;t}gXKQIg<%tL9H|pz_x74BcSkc_x!N6|)BDjMM zCPXC|79;{){E<20CfW;8q_GL=wJmwTtE@8J!ILD2PNNBk(GWO2 zy-YBrf+@|%q-T~3vP_U=f}Ewrfe+YpqT=;8*H?F> z@&D=3^vu$N_0uM`)s;?{96ecAx4~c`&A$xDIfA=HV zqw|BJnkOPkJF z*2S`kc6B%k3q-GI+TIY5RE5X`WtgH9n}|nHG;S@;vZtC8F7};K=INr9uwUe<#2wEB zPDBFPb>v8qqlen#zi{kFj@^YLs3{ap6xoX(s!jmHRA0Qe`UrC3CF(u=ocf{^dQeI* zsM7Sz=%jUvj?y_!&+L#aA4B6$@*ReEhM*|H0y8Y7vBIt2_Khg8FdN%!Q-U zK!CS7QW%MJs)>lYzo*nhANLLt_g1HY*dOWsmT#phMxlvPm#k9g?vq3ms{;iQ)rhfp zai1lkQ06rg9c|2l)L(N^H@K3> z#~t$;QxW9VeIBXAP?UdwyU`%YR&0jaB^rs;r#c{vsWxW#Kx;_xDb?aE8-T=sO12a> zHntnA77@!nO}^~Y1gpdFWZ?0g(4wvdus*ew9P$?m4sdDEhDhCrCg-639$SZVNRJGMzdH>F9*iKOsC>9Yy;J6_57;xZp_w6P^b&k{yOt&~!IyDc1B7 z(uy@bAb)4^ulgigq%)99cc{L^&x3<27+W)o$wZX&t?@i#$;-5F?iK<^i*cy;wV z6sB9Y2XljBN~0*A0Yn?s>Imz^2(}+HVILeO}w55ALhsQ~6wP#9?c19+ftz`3E zyptP2uO}Va0s!l)+u40-c5&f*3IW~qp-2&~x|u?eR}o%B?qR>JCtWX8rrpDAP;mQOphqZMdjH zt;BsC8hhWMX-d^uTQIejF|}6Wt|ZxOBrClUptXe5a8?zypje@Kucnvq z5K~n;gUL)mqBl%i-Hmr}`8z?^WTsmJF-WPJgz^WlEB9W)E%Asn1D0ihx)J0-GeQGW zOLBmCR*i;Y2938tp*I>abVGM$I|m(E)Rgcyrk;W^neGCv_T3<3=)%CZv-&;p(03(% z;s>b|Ue&Dvi>kW-({x2@DPYEPG_gEhVe=_Xsu9hviP6P-!5(h@Hk&ntbQVe%SyOw! zyBR)4SmF;(ebGymz@fe7z@c?lzks*jSu<=vf!+l)0Jt}mUi z0X11s*KON|`WHd5ZF_1%P0tChrruxFeQLp4(FIWwE4h)jhkzUovMf!LMmeCNmZf_N zC>bd<1xGOPH0g8%(O^uSA-r&|fzxGwGPP>S#7Ir|k26(!R+riwOO!fwYE{+3B#?z4 ze^*89ddU$qnRU|7(}^hiqf^T!teLPuvYvW>@xbf)TsQE@qmG%hzNSZg+n9BJkJOsP z=M!4yo_-qD3e4v}@$a%Q-DhEX;E_ij)k(%DU1iwrz*q-r7m+X=QiYm}+C{^KkEvvp zB&G)@0Ar|tF%`6#pdRLuVY`P{)nXRGx0R)*m*-Jz+ejKa6hV3VvlvR;3*kruj}rDH zV#njH1>Q}7!?V=BU)NuwZ{?`KqW#P0V9wTU$$I#=i#c7nZnu$7I#k` zZbULulrU-iIuBFg9*0iSyAmxKS#1wm#(yrm)6p}9%MR9Q3V0V?c8!HoQFsf}k%jdI z&NI6B_OV2ZhUnt!O!WV930}w&JP_(}$0P~$F=UIo%l>Ir<7RnPFBEom|?hL*p}(-OW4E(4>BKMM^~ zgmskR{ZXqYhBO%jNoEjNTjKtKNq>l-QPY|M>?4G30<>VArVUC=FfS6*iZYlHQ-2j+ zri+Y&EK~4;3(FDxFcWbl7`=S~ zM{}%wudc$NKNfVEI+^HlL3ejj1v&n&g#gh33BHl0URe95y2}jzkAmJw4I=t2K^Hlx zRy-JjzGY0muiB2@*n3h4dW6#7UC=wJ_lUkl(8W$_X^ww?A?U4|K|o&;t$n_3oRNK) z;0CH+6L)el(=&05!OStKB81HP@FgX+AJz3YxVYf@sk4cLFX@%Am|BCGPE3ir3Z>xf zjc50IAmY6=e@qY6-bd#G0I(Xs&gw1roiHqq;SXSNZ>ON1dGMRM2r5?_|C^xsV94&j zZd`5v`XQpLctqXESkPJptXVvNy7yb4q<=@ZsK*(b(IHAZgmt6G9DyI1Jt+-F1n4nx zdOer6SuPxm@D~lg#O;H2$-)7vMt)$|j;wG|P4RGwJDD zC$;ImlN~2JE)3u>ndm&eHa#;_us+>is!FCpGXBkQir$r|YSd&iYr9@%+R7td4@|GR z_tTOJ73VE}VkC+Hf1_l%2IJvue-{HuMCez15tLw#pijJ@5k5BC|2z=+ec;H=^wy<0 z>gMIBFHX^{PJIf?#IO!cU*Sm)W-&<-dfpm5!#iRc2Cwx6jj0TNo1-Xxlmm7LW^G{6O$BXELTU8J)uZU-50j3K;m+d=qy7&6hR~&bF1is3)GQfYK)PV{T?WZ zdSF@0@a)Y&sG-Zmf>Q(^25>O+x0qiLGg>gwe4cBG=_8oZd<^TsV~HkP%JMPw#Jne% z@~*}F!Z+}Cxo9sp&NI^w%*=g|fZ~v5ayz9pK$=Yi0b~?$Z;5*cF_$o%)>66}7QZ0w zBw~&r5Xv{AtGB}LBIZzFShtrc6O18TSUk>>+)a|fAW2shn$A{B6-0NDTBzp`Wc<%I z8ICkWPJR|1qsTRIva2KA@hHtz%aq~xdmk`T35rz<$r0 z1Cq{J5JZ(o{cl+ao7g8`(Ny6e(!nu%)-VCjoOIhL3EzNkVn~3>Oa*U6P_lyrx z?|f={z-Gp4bir}>OZEsctahvemSR%Q}n`F!29iceSnQR%h0~8t) zpj;qAXOLT>!b^EFGpw#3AK+F?K$o6gfmXSXM(v&e2pJ@37fqDtg%Q^3NDmackKh|# z1V}SW(adgyIg%9!WJ8?^m2}lMe;}P9C+;}Ajns;=)fxX^sOPE8n+0d4Ay-##m0+Ui zgX0S$GHK~FZUjW;7JE3$Uc)o%d3T6uoW6z2U+rEIfN*)KU*os2x;+MEw{T6T5D`{C z5DIfaVt3fGXp)|}HCWGxgU92%Q)B7+`T}nOUO6&eSvM~%sXHXK!B`-vc?$B0g1dzM zP*3N9)}Uh=1Nl?CBycVh7^V|Qw!&p(tG9YThzx}7U*I8^PCGZRpo>h!BmSBml{N9(T>aEe9F91%S45rjsbgZtnR3=m;#7- z5$)^0>UII;Ovu;G@0-l@NOVJdeh#q%fn}sLP*mF5%&L}1Nn1HvR(Pix~)4m3HW9xY?aTS&G}$X63b}UZV_!z%3%)pS}QhthHZ%$+B(sa++ zoV93Q>irRkwr=lM&~{GCk{JbP1L~YLWqptc(4U^WW-@=NvhFv~7t?yt#2RTV<+`5( zz)VKy_Qu|>J;oj%^qV5dEzwPbN2ouerAjqJ$Ds(nrPlCVJ~9g(v;kBuK|of=e2l~l zRHSutcQm@z?L(3u6&JLjQ&^&#V*7fGyV_;isH1WzSQ0)4ZRDjt*<9SZd5Cltklr1H z{yZ2%WgS+nYIoxk(_1tU90UcOg+!13{+1xIry;P)FwPSDV4u@R*rMPTHf#Y|!uYOw zYwPBr7}m9ZG*Fi>mj0axeMl}FY`rEZ(8c9OB3tX?5qIIj9}mT!g$r{7P)tuaD>%cN z8-XS>yVhMT{cA^ZJFVjfT1PJgPUox<>tI@#bhntV7kDJlkM|=?I1T^rhOSmQw8K;WP>mQlM~11P%_t57IwGCVIX6&5C)$l;Cw|!BBBgt zKg=-XZqY*M)Og~VY|cf&xRRMNSsO?E$|*0rSJjlbjj(mEPNK1BQVrX-vH1p6J15%s zi{---cLhmK(Im~cX>4_LYV(8k5q((m??PNRHi2Wwo0;Z&^MEk2IsoqyAWDSujAczt zc-<6fTFIXZe^>oboq^R66tBxOxxg1oV<~O@sQa6lky)f>R}$`{t{V}k2IYg(=g?1Jm+R123oww7IV4Axr$U^)Sq5)zPV3)HU?kY%kcYv-qZt?m z&Lt`nRtfBNi?Z{>?z|4)lTt6J;p`2Y9J(&uFpPy@;(Jk#CDqaKej)xINTZ=(^(?$+ za|=|dFVJl>($pr!rJHC(mtlp+@wNLh+f)yA6J|DkVw-|?a3_WF!T#Db+$u^;Uj7`K z8!C(s@gL=|PYg}Ay9moD|5uE<855#XhsjT(I6hi>APVDj4d2g4wka={aRwh9vG_3f zfoIVBTGstNZtSwXAjx0!X7@t=)-!*_>IqCk{N(%%!$j3Y8#Y%Uq%Mq?`LD~4JqAZJ z%Mj!b#=;oEt4w%bk*yw_oj%NOJ@tjbxgD6M)y;&)l5MljR4wlemeHv*qR^WKYm4K< zyyIBqi3~=tEH^D6SfDx;IICE06{$Er+}jhFPD@A(Lr__I`S?&h@_6=LluN9s6eggj zWAFG7^Mpfutc%iBJ^K$q_Ycrl1MNMJ*PO+ov2&LPS3{$KqF+QRWR}rGaeSh851ar; zG<$;#0UK-@T_)G`-h{MZCI>+{x%9xKI6lR54O?gt@P0Cc7Xgdo)!wo6G2y`$fqRmf ztCL8RNx6~~W*}&+kFoujMM_(yszoTEnruOE8aU4>F9;Pll)Mh_Xj>JqRII&&NZ^ac z+VU?;_k(E^$7gzv!&8WLU{h^5Rtkzio{gY+1Y8MBJ7aDwi+}#U0#3Emc9C?7ch-(1 zMg7femLx>l3i=ZF8i@3cq*~lKt68RRB}==E{kF(LOx+aAwMDqDC0Ci{ z3K}o7S>g)v8%(U(oMx-H_)qJ$hNT-3kfwmYlE#kEr6A~YlbQLoJ@vy?i*qXuFt^bf zI>n+-&PN-j(-XzAMB!uSjp-OP-+0S6Da7|bQy}4?of1AWBmic-!}Q?mj6%ag)FwGJ zA1UqmG*x06|>C|@rRofgFouAJ{x!&gp2u<_aCvmKdH84s+<6U%Mz}G3U zkI479<-;0mI5EEmCJQjJWq);UIgPBvhSupYxh@3~Ce1SetuErRU%}C1vf36OAC|o> zr6NOiG+!GH=@ZMi7d7de-@*lt-Taemz zIMM7e$~N*x1@bYg(p7#Bl3!@abMnhM)`NU&T-yC|R-H3%I>~zOm0?7Ina*IkL&mPQ zfYFITz6|^@$LTcI%9}QIZ7e%8{eQ^}Bw7Z`a&{M*L8N)r(#VuL)Y{??0eOQ5m6Dk{ zXT@eb5RBP1kM&X6ia)gn6xl?R%$<2or zK;km6R(^y(wO3dE3qN%=B5^YwTQ`^HNgUlp;#f*72}y(!5QBG{kyNdq3VN2U(z6KscEB4;r_9C{GtTETy0JB}2riTrhq*v$vXd$2 z9MTuY7Sen{7<9UNHp#?afd>rxD>+m$)+!5YhCl0Q-CWqotsTo$x?3{Xnix>WNTjz_ z&&z_Ly;W7rnb3-dZR>U;1XI8%JZcip8ARzk8kM5t`Vp2{}8->#QJ?0+W zi3Igj`@i>-%O_pU!N=h?+htN9!-By_1&+C)lJwwXm<&F2A6yt8=0C@+d4scvJuwbh z6^uiWTa@I9@`J(EJ~FtQDFD+A|ALotTVUUhd=eKVn4j#q@~!}=hOCV6Taj@17|7RGrl&Fir7|i`@`KGpZM~ebL7f;Ys zWCRKGIodj`(n;$UcdK8gH;ls+IfUa1h2BLXb3nb329vMdlB@s!Xf(kBe#kRGma~jK zlNEa(RbPdk)Rv9Y@I62l{Q%Lw3ebDghB-Wi1!39Rx&95IMQDh@8I;FDO*@wHEVl%& z+{O`Z6D6*I4+A)87Cc*M@~dVrwd(dUOap(*@wb4(Tm&|H%L&(7z3!k|+REzW1|KGM+fPW1qcyqS#^>)Ov^BHcZNo~uM%{kQ)Qo{Op% z#t-z@I;)n9z=A7^KGgdB{?gMPxK##{n5{aVZX|*ECoPaNBcLkKoh;i$SI3Y zCK`>an&i2F78L?$<2}g9zAvu6~YL@LMMA{(9q-+YevQK zL%iOAIjguKNl!!_;{6+iwzPE*Fz1bHwCJgF&Mv)#%2<}Eo@@fBryAH~$aQ5+Jk5I? zvPAK$DUIUz(cT@bm6jmIqrG|n()ARHRcrjkc>HK@8Gr?Ch|p{@M|<-DvYPog@Dx>- zlhdSjyf+1Jp^7*NZq_1ai01;5`GVo-Z6C=@@5Jerg-6X#K~SQ#pWw9 z*E@U1N}S>y7gE9>V5OYq9gu?uWiZbhMyOUUB4LeIuBVf_F{IoXUWQG52{Vn|vuG-u zuhZsnhW7z+^@8h9TxvsIar_L~gch4|g8Jk&c))dY#vq*1Sv^C}_DTuXo4Kjt_?h0V z5MxR&P;h})N2pQIUt~or^v(txrBx=SRWqDww`O`^Ik=|3C2~D_E=dOyQ33c|Z_gaq z(w^@PAW&Ccko*N6Pv+X>gZ{uWUEzHM2cu1&?fm9YkzFAh&~!`WVUVjV)0N_t*uW%) zPt3Q7t2}O;0-~t$PY{%tY7tj^S7}6#%D)g{whtD^YrXkE7&m}5qCoFO-c%x3IDsja zxJyCdjRPX^569{x%*0YTP+@0K;wH)Q1Evh%fobkAUXzB|`1uiW+N%VJYsu6`1Z_5- zX*qF^5U1NuSRkhwy&HfFJVA*ouv)k@LIt{kA6iR{YCV~I=a z_J&jN68c$8{TmAg0O{fu zH!L&J5<_glt%kFJ-Puf+Wg)4UrK7D3p@{{K4^knS@}+~1SpB2d^m zVpobo83fM(IIla{KUITHD5Vsp~+Drn(qeMiBFwM>?AX`iSg=vnwiq$E} z=F&Hb3sNs zQFLNKVWc?{MfryJc~4nQL(#O&q+Ll_4(K-nu)1taLVAKzcGuM zaGZ+~UU40=4wG-uX8Ku7#FeZr;uD5j*rkHT7QCr9{(+!|#)_ckOUziiM>44Cr5=Je z{)xj?qz6kYjPL5dg7Jqu4)y0O0<>s5KaF`%)yQQm19hp<`(Go!re0GPoH>qnq_NKk_fthg8Ff-u=KD-7y+16X;ACjwM^AayVKN=q&Ftp|w?}X;1RzSqVN)Z{r+jRFRI& zAy~fBN-yvx0D;s+v9rA4@}|{X==Bf1xn3{6<*Km;Cmo@PR{C5|ZjjLG1xlaiy@TFg zvf?9>)`?u;y+EKfXc40A;6m?rz_7}K3|=fjP0nt01}~AIMhYX8Co{-I0blLSg&50t2A!z{Gf`mr@h{o+)872? z)?NLA?&@tF5?DiqH0IT;8Z`q64wKma+6qftSuOgtFy`#jGV(Nww~jV6&ZKhR8D38#qO?uq$MDl6w@n^&LZ2svM)}2e_R|L7`x72xhBY@_pp{no$6) zIm5F|GNjCF8zrvvh^t9P_lI2`(i5%{fYwvGxZe|yTiNGYAKdm}TQ0g&vx#+NreyMu$m7nbL z#Te5#7sU<9$MB~hafDyY&Cb2+d}yUD(BF@t?Z#((BFgbSIXFm+y7!?o{|;Fk?kIC5i9UmTz2P1I<3?oHC$1rw5bS8{L4 z;;0;&BMG~%;{6Up%<=1WgI(^M zksFuPFTx}#A?cC065W?2;Ke6ahJQAcPt4UDbt3O>hKi#8d)}QNZoZq*L*%ON&dn{b zOHO+T&JcGcN#xd71Np`AIo?EgcaDG9G;)@Uyh8he+QaKAbitq=%;|Rc1}wYzUrQNwbtzfoNRNJ zt=2MkkDUY1lcNo9J~(XJV?;{1anM*ZBL%jbsaKH{bjz`^Y=aF4I^)#W?iHutN8wye z9uN4)MD=oPOz)oUQclnV{z`UR+RW?aDDg_CTWQJ6RA*TU6x#vOK{=w?&a!_%iyaX4 z&k?!KvX&ha@xCTeKAE|~Sw??q%E(F4HRsonR#PS%n=GH5cN6ISfZCec3TKP6%G}+x z6=vQ8vwXUr;vG0cWwJ0crmadg#W9Fl+)L^TgQJMw7xjZB9PDb~#&XnTySE<3&Vwz# zcvoCaetupMQHm0l*1U1y4GOY1ap{B3!Z7QHUd4o7L#>S z_d>Zm)6ur8(~vm-UN~h_o?Vm>g1Q{R6$$j6Fg`@-VtmIzKNugB0kDSwPSU`fGQP%J zi`_YlXW<1Fi&k4sSFmU8I5rJ9Pwa2s6#08ApDX+mlbOA1tLw0&9bi0-IVhPKn+U_# zX!!0p43P*++OFXx?i)zg`#pw^W~ZV!yiJjO$0FWtm?US&y5d8w&hEM?fov}OV$yU( z6?T;G=tnFEbjV@m-7hy)G*)lbKk8k@w@=~sS66Q)#p>!0_!C(9gYu&5@dH_p`~nbf zBZh{iQP1Bbj%#sz?565H?#r%N8_%)L6x98=Nv#elBdk@;}Pz4voV zYpX$^m4I3&yD^PpH`6!fb%*CZ1HA4IH%oW8QBLRNDue#UI}w$ET44JycE$O{%?Mma z(_orx)u@LOJ6js0p`7566yrcN9X_E2HkrRwpR^zpgNA+%%diZX#OvOfj_@PosU zh)^+NwPlMfB<9W@6GlxG3XBUh$D$Ai^jWg)U2vHFPKEjN#J2|1uk?7Hl-XoHjle=L{Hue~bxHJ+Z)`L3V#bNp!ZM=$7%9jyIQJ zJ&<`8jS=lG#(F|2e(Q3fGV(FR76A67B15%dWQ{Hz*@sgz8F>AK`vs*87Iou>_zWiX zQXBC69@aKW+y*NA1QzzWyixd+G_%FIeTDXZD3ANe0?l@iHcy!9RCc7cv+Op@uXQT1 z+J%A^n-(kucUJK-szB|S`X#y%2G*!UWCPp0@QxiX$?d~x4+#-=$=^-P-v(@?XZ}V! zDfzQTk5o8zfC;y26K1kJA|Z_gw~*|h^2rlgaD@%CreFFi0`cjkZ{nzcjDHDRYhds; zzrkZ}{*#28W9o(+kmPsb6&tXT`g(16d9|s!UfNfACkx~Vr{R}S$XPK( z_)GP8Tc%*qEunM~KkB zAelLV3&9~gFZr;7{Ns|D^K0L)!{kn`4D`N=fMib$r4pS87Rk+pI&(PY{SkA1CAJ?x zj2?Vyk6(j}TT9iEC=ys=&Rfw1%5DeRCe{zlR)=kraxkUn^8gcCWdEIjD*!ep0yr!A zEJz~~-Db%2J@&@Po^I1I(&F?`;b6`hAZuVMOHV8737-zFx%c-hju&RtVXtToy>0z& zIf5fNY`};nhYlh4;MgHg^n@H|i7TfwUD>gN0^yh|$T8m8=~G4cG~Dip;fjthkQClx zstjES!Vf9C668Ct>~eB2F@k2?BT=pAvkL3J_MviN?JjluLQ;6fDyT|arPZC+@|ALu ztMt{79hA6otnq2=@&Q`cVc@m!ZX?*LLY#3DdFA3j!!&wmsqIJ?a=s&gJ>#}1)=RhA z!F5ydCYgWtBlCoT4flon6VdVUCIm{7{+dVF_@e#4&5fZhamS%Ny?^_;$s@B6f}z#s zR*bN+*$=1Sxh0n~oAjpY_VAdk3|Biix4abDJlSllK`ji;(QXOT>e;T4QCpv5ET3Jl zt=l`_tsPOwKRp&MT`;0B`_00o$Bw{i*SqJ9D15hr$13sEE%_2A2y~O83^o!opK44- z7eWkUtl36*g&}F~35(*OQkMzFglr#;)tl`!Yf$c!>IPcHIH(mBE97Qun1<89Enju# zNkV1YwEIF^@vZ@wm2zo(Z#3w}>JOSZipApM0F3@^#sP-@>9YF1ytZ^kVLBGApAk*R zO6zBorekIGGs@Dj^70U$j1?O@)t9LMti{_OI zUg!vtt=bNuvNqCA9$-}M>2-Snsm0e|PNqyhhH5S(#y>cjsZHb6%R1hq|UUHW%|7IqEiTudq29>Zmffw)3c{YU92{2>V0&xu)&Y5Z+|$w zNjbewVQo|0btozAH&ACumWhk)1Lmv~&Cyn$na2LVUN#>iO(|^uQYjmRc@cjA%EoD6 zFI)G8-xKBIq__yusf_aGm%U$sfW@@F?#%yIOx+P124%C5g|fEpMljIcQ2NfQX)x6q zeUn*gO-)g=^kL?@xqxwR7AmI1&@s}!(PyE~^7KLR-pS(aiOn1Txp*<=)Q#VkbGd&p zYB2QzQq{K=vunNtk+e7Ux zGliym?W1+a=cIiW3eJL2aSqK;2)!MOOxFFvLlHez^LmTaqS`Ue3NFFrSQ{X@vxRye zO3f8Isn_yo=lyprPW_*>(CX!v2`|3v!Ep;(FPq&7Xbybpo|xLiL(|#uTy`l{j=oB3 zGzm@gScVw8)9pgG6wUkusykvHk^cxR;3--_G4@8-Qmmj-Fqke5F@GY#^wGinbKyQl zaySe4_Zxp>Vg&R8Ci38Tr3MM3o=V(ys^Q`qE8T#C)h_LtW!>Kd6U=)h*g|XH zoQOgiMGr9zIf;v5+BT$!u^o#CpWIlV@2-qpAcEn6i_rCfvtP<}561TfOQ^U@1Z7q? zTBfBi0>w^D6e70P4n&5%zu-i8a0LYqA-n;`@nFDE9rx8{Cb9eAlN#U51sOGy|0q2xa#%+CvWUsRJ3)O(xDu=05VS3YsG zD%SIU@@AI`)X*Gv4kh$d$GriWi86IBe%&(&>!uD8Sh;E-Yyn~2)hIrn&F5Zf5T02N zQcJywxP*w_>RCLSWhA$bpi=ea>y#f=RU|X=-xFA=+KVtF{}sT{GW>o}?f^GU=Fut+ z0)HG`k5|{neUiYwY9@h$xU|>DeTkrQbr?a#@twUW5;KO>T#n*q=%aRGG8;+ROPwxB zSExVY*ZqXBLUoM5%G9q3Gb$b^uyR#Tm{D;!p3$njX~p6Wom6pe#!@TY&mkuk-$|{% z57o21RCfxSaA_@Y-wUpfdYZURg2QcJuj7H(Xg_k6sb3NM7r_?Rw$|-ST!rBJsjG>5 zKybL8_h!R6)^MImY)Y`jwI=Ljz9G|Z8QQfEcXh&Wov`l>-BJ4~>>orbGW zgmvdrfw_X;MSXuS@Vg7Xzmw``xGxiIKlK5zg@PSm6<98~a@9hd>cs*X=%hB{fpYH> z>_~M#v1Nr2B{L#{7h(uIH}!@gt3C{tG3(&Y`I`}wP_zL zxWQ^2aT$cb$;?nErSL$xCmGHsh<#76!)$(C!SzDViyW_MD4Y@UjHDt{%UvPjuzZVCv}kF{EJ`*s6t}* z66`3O=HCR@PpP|sD-+xvPAXzJKNoCYwU*egG4e=eM%#R51XrORBkpa%jd4=1;6X~h zoV7Da-9T)UV8_}trwOiH)ev`=;P!M<4Tken!46Tgh+Qn$y_|-jKeArez!_8eRYEgR z{fsmx3k@ccjy4i*6l`BrPV8jC?qk!wUvOnA^K0OS32vN|Dl?o<2)4g^kJxU49dGly zT5to@^Td4?Wm!ycQg7pd8f_A6A9XLWZG!!oP16_LAhnFRM+CR8le)`r7WHRI4N?n< zy#fzOzcB~o$NF?*>HQkPiV%dlSy-p&{R69ON@lIf*q_T6T3jLhuE|~6Wp$97;#et zcc_z^XgCW8XkXEd*s+4GviaRfaJ|)McLLW(aF~<(v4_s@FoSI)b}N9%%waaoy#+T= zJwn`Df;-$vy<|9#5NscHJ+Z3gA|CN?VAqivdP zf*Yt_B5n(o;F6hRoYV(+phbLWI3FVR4Z&ja^QaEi>wSoNNMqadHKh52&|qfu4kKZU zNa&*$5ZfTw<80dBo3y7Acah+ZcT)2VXWxOW*IsHYu_p*NX7g*Uu@7+v2yTXx8f7>K z3+GO1>+Qf+2=;`|X}(2V2d2Z4nV&nUEqGvF>>c^5i2b`@Pqg(qPNbHrJBY)^CUDMl zQcoDp!v#B7)e`%lU}xDhPZwO7nn&Dn!JXu!t}vVz3U)Vj7_o7|&bIly!ElZu?l{5C zaZ-mE&U*#hM@5MpFW8f9nvV$%{oifC!AC*cxlXFkaQ;QG73vLQze7bPGpBTJukQ%W z5cLPrY!I4LG43?A-Y!^2H4yuhU{AAYcdua0?W8Uu?l!@l?xdC*&H;kmU7bMeRf3&o z^E**+ebfQOohG>XPU<+rd8A>ynlJ&5J?0Le^^t=Fl78>GIt6}WzaOE{@+hVu-;mZ{f> zSaF^>-lT7n2!S1DQBKBFqUV(g`NnD%Yc2SoR$KAfk%$0h_ z8nK@Uc4sx4*d>C!3TfgL_Da`&{9`h3+@*PSVlKfQ!qQufBshji&DvKrea~H(^WLhI zhy#yA8j%h17f96k=sbntrpeJm?Ij$NFU+a< zCseLMeItOtU-w3m?4)?~)cZ34m22?_hS1l2keL4JR$?9?=2iUB2IMvqH$+`Y+_l8L zMy?m@hP!VQGgR)M_Ajb@9pJ?2?zaREP)CE@pIgbDaJ8ReRNiYazysC31RqiPSAzG& ze&S;Y?&enWr-!>ce}=1lNHnx^9R>Dr8E0Wgw*3bHOWgGUdQ-6?$hji#o?Vcw>E!C8 z-hy}j$&(z><_}Kiq)ch@``vKc#QFaEb2khwz%AJ&xrK;@SczE3r3joi%A>x(e?X|a zk~Rq)X4AIsh9kQddRL%U&RsLOppCbY{c{yI2Idi5BwM}%g7W8ZW+{|Xar`3h07}rR z;X0Un_KUp=D<9KDOk%^II!n0NYe%UX333a&S>=)~BydjHNs_@|%v)jW=Wb482cAtb zxN4T!SmgbYBAAUdr=+9ldQN2FywCof33`iuId2tw~}o=So}% zdc~P?0C9f4u*KfNR#>{KBAn{P&V>CeAt%c)+C;tPC44)!CLpccLNeyl%b4GmeX-RB z`QHsZxZ=diKoBP0=zGjYa&EQ3{FKYJS5@;YcR1kN!nL9?<}q&oqnCt*;tq=j#5!sd zj1fs0Oad5vo-x?yjDr`>GVUQj`a;M7G79BFt&IoFb8 z>UhyHHXBzfjoN=93i)Zs7kY@8dKZQ@u8SZ&Z;yyKVYg(MN86Z$|Y`6uI%I@x@7i1 za+vGq_tw+>g8Xi#`qkg-{DL}*-4DXqTn&uA^Ga9C=cMcf%C6P&tk$W-Riyc3dr&R8 z+p%C*uBLvviN6B(QHUi>@;ZZ()M z*Y@FIVdw}BY8X?tsQbskCIYx|8lO*+L_Wq}CNkD0BB~Ymw`z$~Yj(?}!b|!f+znlt z2H|76$h_XjJmJsG{#Fb?@QFH9yk^Ia{4OG|_@6}58&l2fb0QMXF5+Dmh}_3X@rw?S zzXb}FB25;ZHybcA9ft-j1*jF+r)HPJMs=544otXXgsinY!l?C>%5_v;D~Zv z(-L?CZ1|8|tF@0wd*as@@+*(mh%oI9F!503B{S7EBfDh(ti0^&1@bNuCmM-7zZc5Q zo;9Xg_D<~Hg{RQ)92@3|sdBCLemW05{!<=aLAfyxeJr>C25%GE%DV6!FtfA?z&jjt zMp{<_cLw38NiE?p|ExB&u%F;?#{1wqG&Joe@coKziBWX;XyQc`z?zL3#zwUZDaOVh z{|v~+>SPU^0e%brXRbDKVJ!^QMTrsrQyTsL%6zo@Bj8q!^Jj5w=i9oT$O!5`>mNxy z55(IxzG1&lcSNzoA}d*cG}q2|miKS@UcnTJZRcBwdn9xH1yE2%d>(re?O(2ez0tq0 ztoc=Nsok(U2dmS#3{J0vjq+7BU7?zXi{@T0^5_bMApnw?8Pax| z(RPZ}=q&QAM%m=F9hrxFSmTVg*p-ca8n8q0V7dqrhq1u^$zGJvV}b0GG2i`xEYQ6%Am9yF%~Ob9l;bU`?>TI zB7|bRP_Syvf^KfNG(%lr1J6>A7w={4nhSc7cHEwZ9PNS}p}6pw^0C}J4Ub!pfKOv+ zEZ2QW0G>yoON-{hc*(G;Oeh>4xq~LwLrkuXS&BH}$C0dg#)| z4U8yNqP4}KkkTa_zG{%is$hc zr~yP>E2yzfLlqvJ6&K(yPy>lNPf+7(A9Gerf;fOH$d07BZ}BL+v%pzInN_SOt^c2? z|03)M&sh@oeTH!JHBRTPrp4peA}~|nq`uaP?98;c;yIZa%6Az{Yel#bUIoN3!g$HK^$E@HRLev$4 zs&!Iq5CHB;8(m3hYQqDpmbr3P2d|NL1Fk$g9?ShPv?1~Mc&+6+*ARQ zVU*TiKv&oHb5<}a0eClpf5e|;<}{~)ahtQ^9~!kgQJ)B^5_8{>Tz4Eeh7-&ocrt^9 zJf5Kga0G$R2yn8KdQbyL;zw&)DW$U~-l<(RwDhhM;zJTwgL_mb!o3XPU=aEXl9_`N zGeNaSC#t;-)pt*U>X2k+Oky0UMgz(dwWlU_!`m3X;hfwer{O*nowI_UH3WPt;U(@P zC=YKQIxV;j8o3Nfp)ySd=aA8ua^WW8KtM}e&MtZt;E}6F5Y=L(N$tCt69T58r;C=^ zaoK1R`&9Zgo)5v00Mgf&1I2CS(KC|Uu}rV2MP zTgmUKxd49-V8MDx)JQxuF~??^H$!^6F-_iTW3M4AagQRrC*fO}h$%aPe)CV}ljOR1 z1o$O@(m6IQ*U_WwZ^Oi!F4mNnI}ty}tMpYIM#G^x&oOm4dvA_q z4DE%a9gs(BHU-DjKuwz)lvM)&^E2n6!eT~4j7e(Ogubf7B+%!-B*5Dd{lW3w@{%8I zRlN;ZBXhKqx)hGZlm)#-V18$?BvxWS_tIA06=bVVz_)Xocc}UVcng50`sigwbt;h4 zATJ2C;+I*~bg{>o*x{7Aghl}ykh5hmwFQBO(G`x3#};f&v5WG`z)~dEWh!2v-}_*a zMx!fUfZqaW+J$`5L@fDy3V9V6ZOKvpJ}dr0V*Z%JSolSR-%hyLVbnX0-a$8jgK7|Q zo2HOD0PxP)yoAiBkU4Cu0zDGYu(1ko3V=puTY2weuxoXZox{B;PHM;$fk3xmY#uHG z0e%f&o;cfF1p5-O`E@PeM=2>(*8=<5r22<+uCxXFzQe1%=rK}=_EHpKY|Y-B=fllh51 zqp9mb;U~6Kmy`1u?#Euji`x)PntKtnsn!#Ho1o>YKcaEWk4-10zPv|7V}oH%;U|zp zFzAk{-S6#6vKxH1$1^FE!fyzgf#e>EK_WLSZYJVG?|RTS)x&}DtZ8u9=Z#dYH&nw0 zNM}_~Y!V(Q>@3jdF({D1j(0+k&Il*A)9yZ{%0QUr}u*9%>Gw@1AZ!)TZkYuKR z-DGWrAd)C#Ao_ByV0+h!4BSy_4`&JVVnAV=uN25;*XMAy<{U^?mjE0ua4+QZLOyqM z6MR0I&)wZC_aO5(KR)+#Z{>3j zK9{(+^Z9%1Cyw`W@8R>8d@gk#;Pc0P?(IIr=ePOX$9C{a-GU)_F5&Y~x0ugA zev0Q|ZZAH6jpxu9lT(!LFqkVg!OXsbrmchGVniI?-JsoJP<-0uXa$Lm?EVbC)$1@y z9nqsT?}6c1Gr{!*c-xt8oXE$)Af91x`$7jS@RcuuMg{)XcsGAbyt}XBh5o1UB7bwd zhyOvm*xwkB`ftU1`s?B){%i4Gew!Sh#bF|xcsuGA`cz!a*Wdp$+<0gpftxBD7C@hm z9ulwHv*`xBq1~6bTo+Yu;}V`=jR)SxwlTwX!EcZYghY&raE=0>J`=8c!39_|Wfe$( zY}O0HZKJpj(Vt8tExnn(^;{GW8`Q_4k`B{%59ntI{lPn+XLH|IutR{=H#rZN_uhC9 zWh9#2pUSC?7;fRaV|X0Hi({lF7nh_X~ooV7+!?e4m2%<>4x~StyPl<#n*MWgt-;pXz-n zZ$U<$zt~TZDSlv$cMgtQXGK2aQ zFG^lq=2-x5k3Wh1vb{h<+VWH526vt2VHvNDOnv}XLG%e&F^r@%}D6H=xJi~h$ zbW#}|7&P)0Wq!COeG@r@+Bw6!2f$qIoZ&rycYgFsr*@`yA>Ji5J6$j$1>Qlx>suW$QK8!dBO(3GnBw@w-WU*sZi69+Yc^u851}Y9J&O)sv+x_t#qmqM zZxJI156aQytPHJeDze77KBhcs@lp z9La&5a4~~txlH)qh~=!^yn}cF88+7p{}Y&y>C~L3E2_kmrSBJk<;Cy(5QXk<1k9`J z^*|XIb)pOlG@64!uTjvPbrFZK&?YFz+8{x{G4ONrI#T4kU9g|J{9+`Fd$f{|vw5Q8 zwD9{We7qK}O;s<0LkZaQVPKLKa%Al{r0fC8JhR3(1v0Ab_iW)AD7OKdU)37)rBWKd zBg==#3QHsJqZSAtOI*1iab;+nC%1LoBLKLQK4NHRJ{EE(C9d4x%L}5lNBNfCagI%o z6NBD`COzg6KJrjRrf6_%b98_uE@u+GLzswllLj_Q5;l&q#O2O2kLPv+Us)x~6$0-A zxEyB6vu~s#8GD(m?_ii1*WaxIa+1Ty3; zyJU=WrQTUgB$qLPO_zlA1_@3CdsP4gZnH{qCGd%Wl8)my z67XGylITCBCjNSvQCN`w05a4LQ1i8x>R5l3pv+uCSw42Uf1AOUlD9mJ~>G!EfGmaCm@mYneS3ipGy|F+vYM zEL(+vgur8ELI~RcZ59EiA9xT>0vS zA&EA(?||eS?+1hfLD6PF^3&=tU#YnFSWevd=8E(F|A{--gL&yCncLMV$C-fY~B$WDCBs3^PJA)JCqubpWKOjG?r_3pv2r98O^3O)4ll= zfZ!#H_}e^BUTDFA6Q=JG1EgD`^HoqSaD8}Ri00=$lHc~ z-B6&HLzCfRTO3~$LJSp=uWrdp6*fU%4d;QEZt*f45vKo_mti;?JYT;Qf~QcOs9&P- zDtyG5i<|Bw_+j^F{Ie%LGXK{N!f!#+?(qa4#XpA-R}hZ^TcEDU$DNqNbyKGhw=m#4 zHHYi2s))PVfw)UZa4vC0BC}A9ATCL;;A(TYA{EU~Z#i+@z*m5c*IN(+g!H^Ihbva= zh|B46M-CTNPZ1}&JO;4)0CC+#m!9f2;+`j1a8KoMC8{=`?*-xtMVDS`UOwOJIb5ka zf;cJb%@q6&apdfdP5q;Z+fMLS{_!lX5ZkLu16 zVz%Qa&gDpj=jI;9Ewo|aRDDe@wzYx;H!5bZfdml_kN!{m1(Jzy3mJDT8Q^dL^^5*K zUYY*3^)(A5Kq!unkWWeJ{qq?493~^Qk#Zlh+yRBygLmIz*18?BF}~V_t9tPz;&vI< z5i|z7xG`ytIC`)gDF{-2Eyzr%FTsR@`Y%qKs_d)Si0D=m|~KY8+w^|<@b zq=|haD;XPD3a!?$@(HONNn@BK`9e3z+OghYIXUAJdgQwJte}+iF#lL@aG2`IWOc`n z5=eJ0_2ay6&~e$KFr_Y(i=tA%1%5Fq0VUMkpA_gTn#}f^ENgoD;PlK2)Ov?}sC%|| zH!=L|Ie2+T^oyttU3fJ+TUF)KFl{A|z#;nqLfgZ9j~~AazHcq(NOa2#f-o~r5tsm* zU2bw@kkzhn`c^8Efdbg_H;#J|+PU$GXP!_8Xk!I+yAdf9CH&sF&c>DAJLryVHb{V> z-tA_lG;fZ?PFu({3HN48frit~6K&=Z3^qqpq-N8A|2lEY%_eo^`koh~}+3N>vW zOvZe-siG%_UEiKyImKd!;*3Z1w^F0c3-S~x;;Z0LUO1q!1h3ig>Rc>j2UFOz zIg2<5yT;(Z^6DObtv7UmTZWs3Lxr23m|uz9YvrxA4#`f73A7E+m_luEs?L8NLB>UR zgaHP1hQyCJA7wQ?8tkbbL3vk!Q)U8qDeH+=!P~zwg%!2QaCez}lrN_GLo`z8qf=-W zu`{E=UU%*i^M+F_?||`l?~?9V5_GfaYCldrLkCl=9(}DI9k^r+u)pP>$yl$%W^bdJ2F2$@ys6 z2h5N1#ni2uH&65ea=#$x%Ya5EFVsJ-5O*{m!3>I(>I}xoum}u+m3ArtUX<#cLIRm5 zlV~HbQs^erbqNyf0ivRN9c()=mMF82Jd*2`0%i9Z3EhP60WBS+v5Q%<0;Ru$+F|W3 zO&VueVom31NEspG-jF;eazHLQmmS7?LnvmvFexam^Vu_u>lEZ*AmKXEW91gxOgg(z zD&^T^N(7K2#N2;Vt=3>(&WY-FE~R@P^Yj=3c+3NeTB6kbgmQ?XPxA?-z?KOm4g<+D zhTe_%0Ey2P1kN9Z7BA98Q_*3_&V#PQS4L%zVO7yq&mSmdq$G*&v?I#I#4zS0A11hu z)%1E*Eq#DDkhGj#uHCKfRZI5->0C=kzv}%9B*{!=?MP<@ zkIGrfCrNpTr9{56-pfLXy94=AMP~(bW2v7awVq3buHed=D+5n+QVcXK-P5E~n7+gu z_38+Iv;HNOTr5c7Fow?dDw4cxNkEbHkFVr%L+u~y-m*l`kmz1Zgf^G;$MOirU`xEMF1UQFm_I1LCLvb;!Im)c9DTwy7{Bqcj=Tz%{`@YIpBf`=6?^~h1l z3wJpIUActi(ST{_kmOfLyT7H~LRv08R4yfLstJFs)YYWyWhv2$k$+My$Di6-eOsZW zZ6oc6*w7`0fGtm1|4Qt!PMphf{)XlJ18S8w6dzxEQXTfWW#V5G`Z=M;Co?gAc{&sS zim*2cJGk;1D%3EM$~O@A1#!<1H?)$w!4e|HBlJE(L-xQG8rzUJP_t@i1`9y_CvfpD zrdzuw_=Uyz(+}2RyXMsoZGaM7ZF0%KloR!Zz5v7+{8?~>+D&0B!sma%W|9KelBn+Pp;?9wVp zWYqhJf=@ie|| za{LmFmhc$~H-2NXxkwkXRR51~IeCSwNcyNH-9aIHBxn$VPK7L(OMvNA$X}4-WGiyV zh3u2&0L>dJrUb2Z@_4;+wMY<0=?|NhjbC`P6;NvFIQZp(^%et!_PlTd%bqErX z(#P3k?ja~~yTdVg&tm9c`aHdMR!HcBgtlOBAO9gG%fjO*-nGI4d*a@N{i%cMhvEz; zwq6fNP+^wSA?Ng5Vu47WZT9vPgzZnYdU9R%E?v`l2>zdG$>snw7)+H8f(e*-9{^b% zRy}es?3`n7qP{_oB%`XPUXMzkrLD^`s7t(>`g`@lfQAD+6rioM zQtYle0_Gr1;{+y^g=g2FBSb}5aql%!9O^{|skIP?CM_~Bs|Fc~=R(Af<`Ewc;!q_b zbqUlovm|>KlU**!!g&p`yC1@9L^Y$Kb24)%k8(v1L8<$=4jX_&1c0UI2)_uy88R_x z*_F|TJ`V$3h^fH_(hl`L3Mx<}*s<9~nXiGBF(^+ww zeU2tDo26C%HHGse3$8(~uU7uvnwXQ4n&2K1+$jX8>_cp2e=4gRmgqhbT?V31v39pA z3i2!#SaFh{0MExA%eEFOs zUJq4Ah;$U{Tr{YJQX>(O1?WT6NT7|wN+Cs>n9LEdHR_g(>qyv=TbQer2wbEkW4?)B z3=O7$%wD43Ana3*1A+2JCXoEg3;+}5*d?hRV&$_+h(|iI4~V|$AykEmgEg17`!Hd% z@?c2AT}CiJfgYsXr3rjaMYkbp(oG<7n5`E@#NUAk)yugvjp+#Tbs$kMrVpX63!p15 zAR3~M)=JCVl(+zC{9jXK+NO1K%_yx+4tJr&&BZp*+o^m31R3Y5o(DGMN`9oYO2DKK z=UF>es_B`sL=Gd8ACd_5KM`)QEfxfBXo1qEI&VTZVG0L@9Xcdevlnaz!9We-D^`qb z15ziUyYkBngnP17br_N+WM4qE$XxBIw?aTYy>yl0xYQ7u**twK^+0qx+=!z1^)_Tq zcc%VOF~Y_>J-4e03=(= z=hR~-i1f9h(jcSKRJ6_1i%5sti(~E&B}lQv3Y`(1#yov>%E!S z4SeOWI@d(mG{cp*I%cwRB@-PJN>l))Ceb%3X%+<^9MbqY%X~GNx8S6REe8So6#$mQ zTV&ojr$%0&6ZJUel-ZL{;DxL|T~3MDLjWAD9;Tq9(*0yTQI`TGo@@%Z{Yx$GI^s?; zY@B7_6oO_;6E)egaq@#xlp5DS+%V0?!C}DENJOz^LJ);WBYujy9fL#f5U7i`;4~bH zY&t6*2hz&BnQZGm+mZIS5cM=rqCI_7PWxMlyWOzmYyV547F)KqJner)+!>lJPy5@5 zm}Z$cDu(u_s`n8oc}ozlz$rQn=QBXc)BbL<@q|j(vcHF@ZT~RZ7v*VxFLCb!N49+J zc|oezV%a9=X@5U)4{EkN?H?c_ZJDr-o7$hIhEV$#@RrO(om9Bge@}*!jRKqt%GKi^ zh&t5D;^5W4%vRRJ#0@uW`FcM>RMfI@p2R=YvOP-N7MwjncJuUpjEFaZkQ#oSOeHR7 z?$j9=65{z6BzOe`K|q8qN`J|_GQP8#Oe&mS?^gTIx>DJRti}+;56jdJuIm}EQakf~ z7Zd=Z7T#y4qFQnjC7%b$Io}XPgYOxiranWDjq*D}ZNh^=!$&ag`6DGfg>h8QO^~b9 zLeL4A^GO`;-bDa! zTkxk~7OVCh&~SgRI*uTG`uqIap#VKc(7^;DcUM5S=Lr}~K#9AFxx4<8Kz&gG1vMpc zC9}b+z0?v6mi!uO@j0iNO65{76({sGDsntw_mFZHVMkM!^_ucoLaPYfkLrxn&_9a; zgrd8@g57N9f-O%_((1VXcIPmHHE* z4-?u&sapx{q|{QvO5AN!YC%pZb_Q%IYCiC$^0CBnCn!Q8VjoP4d;AEv817-9hp*?? zJ++g><|KTS>La3uZK{xocs+4YM#RTN=;#sCHD*SEh&6)9o4q&@y-E* zWD5#fmyU`Uw1r5%_dQj0Z+F1?|M{M8#wVOUTb-&pwVhh7DX4)|{Z*|g$Bprp4kGbQ z5^L~Ir+zD9QXUhrbL&B{!0Q?G(Pe%24NvAvD&DkxICWhrx?~f@i}9R7LO=-krigwc z>1Pg8h+7oskkl z9*f;8kjd0HmHPbG|Mr|L+ld3`g3~y~6tW!)HoQ3pJ+iQo>?4Zw%=LanP9tA)@Zk_V z_++XsxIJ5>Xk-#zHrf=8P<{eM?8R9u##c}@_y@tiv#IMnP%(WqMU#mqD4|v#eW^lD zbkS)3bI89y_`P{&C!3TIi@c;*G?3EItng%nejKrj>Nkv;fm`Sc6*H*wMCz=`wvQuz zlZ#dLG_3F}(*qoJGf2 z2Qn_wfUZVghvtROLkrI$b%_<`_N#wpl%DV9JZF?CDsWiI6N=;; zp=&5KAx20L{ejRgTe9dl-H(xd#mW{?wsnlGAnG?kmT?^3aj~CT3~Z zlJ-8Od{+|O^Tg4$FtRjQCoD6K(>qb2?mq{SQHB_0v$UEUoY;Nkc5EQH+(BFDq=x0< zoB=VW5%YOX*ktCiU`0HV5?PvrzcVz6rPYC=^B$ zD)Ho}$H?DJ`78cG{`&%H@&)MKCFHCl0p4jH{T3ZQpQI1e_>WXRK&5@56k#Y`UObJ1 z&nHD;ADt8BCEs0=!wB-ar9O=C2nBb2*HlpV;%@R_9Hcsg2dT1E4VwA?c#w*5>BfQM zQRC{gX)!}09eL^YmsUj*3i$Qgo|Am)k27gq{bqk2{e#X#9eIPxbxzbJ#Li=alEHY>~ucdMeq6fgNUH*jIbtN%kr-)}p9Or*ytda=@bx4cWQV z=@jK%4LvbU!B2JW09KrLivRlNOHkq`gq_KG* zK4pcbkZ>;vZ0_+wXOeakX?X|G&LZu6(sB-Vb zqKk!CozR`0)bv}FtSH_<<|PfxOuDNSsS16;a|TtM2Njs8+j7&C3rHCu6wF!pKeRjP zfG#AZuTZk25;XcEqT2|%HPC2IuUv&}n)k$Kl3I_jXi1H%K99r03;yjCxxT zv&gp^eDiBq-CV6;daa9{XG7ejpqZ|LZ+dVq)J|CF$=;=Y-;-~k*bNY~wZ%voLc?f= zHemyo@ zwI9qQ?|nkThJG}%L=%pc8qW#!P;HKb7*|I6ZTB+r2f;5#Gx)GOMwtggXvTh5U`uEr zc?VOssRX{@=^jahKZ*$M5Gs^A*D@rXbE3(K5SxJ*(*ruC+-tHu(;}+efGD$mKDH#9 zRyaG3_O8&_eo+)tBqutqv6zyNfI7d1RGAb>Y28CY83-{JeLC1!B*X#`wMFiw@Tj<~ zYX^9YI)+Qq-gqgvqvG{mW%UZNv!_?G;FKmo4LVG0*Eps3#pL>Fs{g*;&vpC|Amoog zmLcFc^d`udHv~LG;irY_4FT>6CVxU)1Y*-6Urz7%(5m3v9)i)6VM*lJgqy)o3)z|&`o7?@-Mi5z_eEYuN!U5onekV za%WhEp!HIsaBY38Ob#6`fEZrVW2-gq-U<3zYP(BXEpCfv1O<5&kaF54c75^v(FhY< z35so_Xt^tC(DA^bKIFb&0LOW5!Ia&$!cWQ21`Mg0fNYnkTPTlQx_=gi3l+#CJ~+SEtL5i(RROSUuFwTXxoIwu?+`U3MVp~ zT5>BTKLXWGtz*zH3R+LCW6+C%W^2(?>$h)%tUq|jIl*g0Q0A2mTYX{F%qw3#75gmw z0)TD>V{OUopcT20vi2v&O;&#-xvQ^qS&&NYWc6GqwSF$g_39D&)qbAN#$W;-mgRRU z`y4E`@2w}|T_Cuy3$lX?<)~5pguzDlqU3o9Jm#347YqK2gc2bzDk_t(Z;zm?7qQ+; z7C!$wzlQUsn49Hhs=kj5!@%HAxbz&pfrP_I$N_}WK4t>HpR^3n8kc6H393_O>fY7F zk-6S8eU8m|2Bwkj1_bL7pn`;S;DTELoc8D(4vy)^8;=$up9dC?*2Ab%%9GC4dl-I` zCxN|1hEvAbp46*T#yJ+h_N1MsC7Gv6TKdteJ?L%aY7=HQPAQwRo%_gn!lT4gwq))p zmfg~n&L@B?=CQscDJ29}%5QnY+$l1DQ^8PBEgD~>gV zFT_D0>cV&D>Q)ou&}K=mPXxAr^Kxo+1foV#;RR{hzcm5jMoT~^dlVC1^Rp?c45w@) z_I7M@5aO#b#KVQCyU=4Oxk!k8q|^mbLWG`a=?Pzdvi&QDO%UfAHmp&#w&Tb)O4tS? z8&V5`JC3-qgE9NUcp1anN%LZpFY};N@WNwkE<{a)A?Uop|Hxht_gNYoGeo`UC#z)+ z=Pa%%*~S}YsbM%7B0L4D)dcWJl`KS10R9@b>7wlkaB796_X;RZUI|doLuWCd_V6*L zwg<8##=u_lc~=UC4Z91l_fr*1}|<)ArnmrDPnoi&$g z{sj@~ixBJLPJm5AhyjmSSYQ+4;Scu&A#^|*7#($M5_~rg?-?ujG~i>572NMQbwp#= zBOr26V|jcR-Gw|edypylcpCCDl;}l}v`fJ~K-^evrJ|wftP1{S&0Ec*eFs|_|6@BT z7;W{O#xzgTdT`#AuYl_WCX&!y2sz~lGnqmO5S?MsnWiFhgvkGE$N-uar>F9&eP4FDP8bEQ0VAi*1Ht8Yefd~VoJWE`S(3(EKq zW;Kc`0nz@O@4_BTipI&yb?lbQ%k(GqvMLr3kal#tJ60Uu1)<^hJWi$0iP)lBvH|7w^#p`8_D7%Njx`H;8?hKY*io zaDhSW)CfGeX%PR>h>pR<2EqF%5a|$nz#!h%h|a-B41#y)!Ori$8PcWXZH6bXUo(iQS~w;6wn2>6h}7VF1~EvqS!ZvJqz?<$7+NRL(7ou# zwF+88^C7{H4UKo`y;ZENQRiX#h7ZU-(FNxD2UUKd>qN0XjT0#7e(h>>Y-e)m1?8_~ zSq~Pofy40e>~lajhgf!z{-&tl>Roo@12Od9NM9^;E+I*0P_qitav4N^C;ckWiG2jK z5B_@*3qtrVv3ybTjRl`IY%dW*iSWang6jiZOtj_lUM3|W9s(i;C2PIl{;XvI@M@4g zg2N$>@$V^qV*8oc7vPg1fej()5|UdBuam~WRy-|{C*bZStruvRK3VINNtjCl3tqOo zmhl_NfiMtOIpD3kHPk1FAiG z9BA|g@{XjI3zY-8=>8lV^^&R(ulICE7?=cs*T{t4g~H=Om)Tgldw8R%o&r7)AuK(} z(pOme>37L_!PO_V0?7+IcmY2CZ>+FLm-Hy`pJS0(t^Gnw;x5Gaovs zu|%vS!nlec-Uh-}=l&d1okDpIlvr26^i)^JI4UX@MM%m&i8r43OMutUL5PREU{wn7 zOiyLx1r)db$|V=!r8gm?qTeZ5@D*Yq4UVOnOJ$4Lu#UXH&eMnTn(bGTsgnOr07Lv$J$zdDfKJ{Yeilk zX^Da;1p+Q3v58e(jaH#t>uD8B;Ve(1#rY- z(knnWTMf`A+fTO5&LjOY&|_MEOql#;lE;JGIJ=L!^|S+;t?BDIBfko9Z`8Wypm$QV zHAHpSiPv=^8&JB;zr6^l7)pl>wl1}+-cOm$|FJTWjUaeaikLvLcUj!qrPlJ#QvP9) z?<3h4L?sZmZocj;^_LM8%3M&yn{3ed3lxtnx+PQ=pt5-q56Ac8YmyLCt9m|$={YhT z2`0ab$Bv{fd!ad^fDtJ%NO1c$Fo#&BH!H*qX3Z?OG`=T6QY%qOSZZ98;=I6jS+eDL zs3?%D7t6q>n}|5v{zFZsg!mkYI#cdps5o1;OKItRNf{yk?26`nS7NyGhWD6wJO_E* z7r#fDv6M-@59e<2+^MWNbz#?#*k2Ut!WKj~B6N(Eoq*ZR7BkPXW`0D;Brw8E$&?^= ze9O%1lJa-6SCIEJlJa79vz=0|=VKz2`#PB-_=Nn=fZysCM0t#Er;I_%7}*c3>`Kap zw5$aDF_7v#@=r+_35tI}rCu!mjD#aW@ao?w<^3vKf~!bx!PHsb>AbYf$!kKSJKDa= zMcf>P)Qa$n4ULU?<@vjKgkcxl1uAqoe?=85zo7~~7pQASkgp4pdTpRr$BFP!pVO(5 zj|T#V+uA^-h!sIhj>eQDO0~=Gm43}+E&vG!q!SZe9*wk#ttV-ePON$!Y&%%&te_{8 zyiBIfI!E8_Ym%eLM5}QVHP)|Zo^X(ux3w4K?+U1vHd4Ep^tGhZK#W;9w77-16~G~k z(YrO4r68FiswL@ZQJ0OVMy5I+Nyq10SZ)T(fjQqs=}SP8oZAMuo!HYwCmqk_A}glz z<^m@)Bh*W+$fA|rG5p^s)=8Ab-%Hp{LZT4j-=6rL1htOI<1CCF3hRmeirD3y?bJ&T zl6y!A3nfQWusWKAzS*uX{vgA>qOg}NjRwXL<$BDGLhQrTyzRdzr7jRcKi`bMh#e=1 z4KQY;a%mXpjy?Fo8P?hcvh@EsL}P-0I5n@2Tx4 zL+#hhF?3*uk9WuR5xEset0s}hjh6}6(3qu7646fzIyVNLOmwB7{h{KYUD$i`q8a5T zi(G$EhgT)i3wwqGT%{#cr1D=|+|9|`hrBfd@a_%P4m!h`#AjI@yg(kFsuy`DkCyz< zn@qP02jYdY#KP+(&?WavBG>XB94?eeG)ki`;%&Rh6425J+%QYQg|aRZ&(f%2{J?g9 z3500`ZkRO_Jq%lE6mFQM6=sHC^bi?AtON0x?5{k_WRN~EoaK~qMuIlBATF+W#9RzD zg;^RYfyHWcdNy*D9TTrQiRt|HCA-pp3TX`?%QwPeLRu1_ln!?&Y0E&f`<&=f;^UGD zhz%}?jZ3yT){rN$WTRekjclqQ3=!8Hh@ z#GCg`5$$I5HlUuxNMTCTFN<+h`|?`0n9QJroI`0Uu?4~yZ4qGmhH;rU85C8=;ZGx7EjG5SIhob|1$J=Am|o&qaJ3pM(tc1MXKJw}!a(z}5S>WyJLaF6!eX zoYe`qzkS?Y%;n3T{*PBjDdO@tUkE_Qp8tMbwAwI5_xTApU;^S5mcQkN4eOwqgKOR3j z*cYVuTHbXdq`Zi{HgpcU$?~##)JFIXX`&Si_(KBocD-+p+M;3h~owZdH`?0CxP%iwa8q{yAM2 z$3wlf>H?xS0gZE#(%c2HiU`apF%w4DS}>hsuQ?%^+}h0hswnv~811}I5DP_>o-zqy z9uWF;r|3eN-ATbqg^%waMIL0^^e!Li{YN>SYUZkPQRYPO!-V-fhcXWn0I^jlM}h(q z>`}3TYwdjEVWyJ^DpvQ1m=zozM^LMU&>D&`8;q(iP~DO?iU#v&*!ei+Yrv)_{*rX6 zOy$1>fO75HFE^tB|to%uaA$6SvlC zT}rkvP%#D3(8}aOh|hwk3&I@;Nv}fX5{sV2h&v(?WTjoT-jdVDvWW<&lPl3{cJGaS zGu|`6bV#;_yoolxW5`}aor5?clvEe6k!F>*t_Y-*pPusn@tqg>%0(m_qkYji#RJ2$ zA^S>! zLarF$%;T^1z~AZN`FRO>WTARdEG}7nLOyQJ#mT3rSBU2ZoyJ2xRq-LfYHrZ6;CX3D z5~#o@bkPnrF&EXJqWWt(V?T_^n3lPjlt)S7l$lE?GYOLRvxU_8u~eg*i5uNp$#b5k znYC*%%8PZ>M`gHfoR zs!qp<_rHBwl(x%?D=&1Env~2|$4PcdXndsFi%qNMi$RbrqLk2Sk;mjq(Efb@EOf`7 zxU#ql!y6P%3kBR8*a&9hZOyy!FV4zuz)~u0xYd#tIzt{&FR9V%sGkw2)B4jwljUQS zB{f(?LFVfi$`ltn7btS9qEx4azQkE>3&E!VpA>_i>hi5XAb-BoXP)M60aEHst&hQ< z?S3ry99g1yJsT#$dL1txXA}-ueIho`cxzhdBKHo#V(IC;%|)L^&(t5MtjV4w_zo6- zv3tI-w+H^b53}{>Eu;c+LPw}C6JaP*WH31`bfwGrWlShLEi~Kh1{C(QG8g%In(cCa zDL1IG7}7mFKi61~ITyDD4nIlv)%Hm(`Gkg4)OGG!;Ym^J&@p@AUN0huO6Dw3MhJf0 zp`oUhpD=)h(ZrRq8rf1I0fF)f4UH3`k#8csgo&4!Ub?y$II05w9)b0f71cS;5X>-5exHO!D2|s=MykB86sD+JUSl-k#9Q*-M%d^ zSl$(s@;#N+4TGQdGL0FCt-y@nhg6YC!}_b%uqLhz0})TMbNnQJM@S8qCb&i zv*FlQE>l6?);dz1xqmb_#Q-(f;#n_LL@fMD9D7wf5`#2g`@L+~17 zM(}46W{Rpl>fS-RJ$j*GxVel@axGduPMN3Q4aa;IBePtAJ{-b`bz=T2b(yYa-o~j} z!SOs@k8Oe}`e!dg9fhB8AR(Ouc-o0Ic$f!I3-D7AhNnjiPkYUyzZmEFnm0V;g!-xD z|AsFXdNau8m}(OsQL|75R!j)PMNGO_UD>?k z;T{QWMP5HC3_)}P0u${Q5fD?;Qp^-pDExj?>@s1RItxD--j_#(iP&%AexoHVMEOAGL$hgWLn_><=9Nv>ZoRj}K2g4hfM z3U3?>ud~gbP`&^~vgdz=MAn7kpG9Zs;XNaGIMv=OYPsNQ4m{lw9iNHN9Z803!JrFL zQhF`P6r>O@_EL&G2<^C(g6AfWrq~ebjoExe7h}t80O{R8XTNc)-@Ewj`y_Jw{fFil zBK@Ja;-oKo!-Xy%UK@4SfZdjlAl?JQmQMplWT}3kyaGy$b2+7@Xx6rtPo=W?qKu`2 zcIi35IFe?8)HplKW=3$61edP1q4lA0T2-f!e-LOf<#)BUM2NjX)RwqcLDVXhE5U#7 zVTO8%*@CD80vXzg7dzCER*g`$fFf$@Wh28W)%$dM3x<2^?ov^fS-l)NJ?QSlC3Xu$ zZU@f?drT$;_b=l5t0z!#*ji{T#DD3k2ihJ+BAt?49v&4hD!Ajc=z8%9%{z@&bpl?O zjb!S~1XD{wY!0H%l7Gc!(rp%d}u;d5FM2uv+e{TY~W?62V^%QN)EB}RtMh3OmK zwox}D=BMd;V95v;(wK6rs^Ixw@@hxythfQQVyEg(aS>|3XO+JEUM2=NP;3^&WZ(~| z^HD%GwJ9hMkB?vN$_NT$uFp6KjM#qRv}j8D>6nE?du#?7fccp*bUa0c0;NG~8uyiSZO9G?F{ZVwK!MGxHm?(~7*2 z+NiSSMfl!Uy5!q@;&p<%7#gfeIK3_(s{5M#>%phXS#vlk$Ks-*`N0||zed&&Sq~O& zD)9~~?4z%G{%x`*)%7|;V%Bnw*;4YE6_ZBlQn}2HVy$4lM`QBC`QIf_X^XiL#Zc(J z3qC2AktI>5C@plY%eO-WGp1~Laa!m)_kJLxgXHoGO=}GD9iL6A&Wuydb1x`8`Nnn` zT9vCmS>!pMQ59;Uy1k!e@BIZmA5}r53e)vlZ0c zLdC#&;1vd*pQ;kRO!X<4bj*}vY;QS&VhW1i{FND^7%K^FMnVyc^M<1vjYd7l7OmW) zhZ0Ok`M9I|4QJrI_-UA5hB^#j`lw#pCW=d;7~O3A**pn7NRS!@k&Vu>lvl=0?ilo! z$u3@e&Q$NqFN{+7CQf6)r5HH)?*%b+C0#^Da1~9P2-BL@RXx2}KbhkmW9gC>X0-4j zU00t|obQM&~!GdPaAD=}q{HN$j@hTF8c7!xLoyYPiyw~R}L zweBr|OFC0Sx!;WP1* zC{!jr13xcf+>u}DGUsqW!!ZIfB06Enxk3ic!yIV^OcS*_ix5X|YJ|KJzi?*sH=uCzm(aBH)J*!4hNUICm6q0YzR=;_@}#Jwj-G@K@cAKi*WC>M)Y2 z63L3ZU4h)Q*j7lckZ0@!z=&z?2h#CtL}8mo9IAudxH!4kGL9;SKv~8OakgCGJ_1E7 z&KTn_aLY9^YRmWn_c~(KOZbcLbLcXz$J7yJj1{t+`y31J3&?jR8uK$H=usc}4mHs? zKTACYIrrGuf>nG94f`W3zyvh~KU6XPocEFY_gQErBiKwjsB`hT#Q(9Gn9zDosK5F% z!tjzg%#;?Khcb-3X(P6c16RV&)jZs7@Fr%S?6K;dSlNtV1!P?~wioa<;=>Ojo);RR zibNc~r%x#Jqf~st#71Yl16KEv&{YW7)Ic@JXvC*f+;n1>=X^|e*690*<_9E8mUs9h zfiYr6FLXY_J#{|JY|Csf3{=1GG$A%^$Wv7DGF9lOKRrX9CV>-SiPB56(Gt&)P$UHG z8(34GC3cpW5^LcSq9+O(7N+2rZ()05p_#=R3y)W)i-n#cuTur@A{h&H*54qOhd1I& zzbPdR~W-sPq=6NYw<^S%kGbjbxIB+%H`J!LY zkS5<_dSf_07Cfz`4P-83tNr@>6W12`hupoPE_2Mnu+VGyMkDU<7Gq>Zon(&vuVU%{ z_-#f^SS9XzGVBheayEH6{8_wPF{6hOpNtuhnr!hd@vRI#TMf1Noy7mai2}OV+7>XX zW?Qqwl^E=6wk7l5Z0uF2LzUbvqBT4T!%D)A9rkAaFiBj;piRXPO;yb9-7SGpV z+*^R>$cfH(@p42SYHBl56FT667Y9)v*<1nxSv9rI7$C^5sZHj;9dKk-&4vcM+myuU z%VjnJnaK1u31=!UG{hjj(B-xy9ShLiGJd>Cdbrut25Z>+{ zNX`~oVTlIwlPbEXZ?JfY03UDg9n=LDFY(<&ZDQ%E2_p|E;WU)+=_qs#gQg~$NukFT zcCwhHxAvs=d4EsxBO%=|rmotgA1%JUss5KUUh~yvm_}Xugnh-d^wv2zS{i~tD z*1j0@FPlJDCcp>wv_VrWz8mq5XHc%i=Mc{?l^$Twr2oaBZO~v1LVL_oo8U51LK0cN z2V`x~3XAWjDO zk0t)+KdqsMTKsXuGhBH<3C%OUdti6*71(3Ci%j)7JV;VGk=kx$D$)wyw0H?~UwN=p z5N&MI91BFdZjRFIuC!W)Q+r=e`&kx$3h}KErv0%4w6~AZ&iRwr+0tqnPfefvA*JE< zRG4M^F+d!bEykjZQGfy--*?ZJTVO(v%m6XfW4dX2*1sJEqR6c##ZvYuoos9K;) zHmf~p^iU}OWnwaUp)@_22>IwlHSS>OBsHK38gtn!nUlUQ1Unp&=L%xJKS9rPXqp1smG#wDn0dU9& zO7ZRE5-J^RrP9C164=WwXBWl*R9%hgApVAePgh@|;MtPWWsxIPy&M&4mPf6^*d7H0^y|y5iBB2+0u`rNW#ZhzhFO{u7;vTNc(7kd96IK7s{fC^s;z) z2W$(DF7ZeJ4mMf5Jo)u8@CWm+IVb_+UwPtRm_(&<8qq+7)>uVBsVz%LKsBkf!< zK~TsSkjxM9G|u)8O9+l1;^EPh(^=Z;G#2$^kmGHXWyNC{5zz`Rq=H3;`4D05Dt`~v z=1D3Sk?BgEioCBCP+Vq2PUlUQQ~2thRwl0xjW)_YLz4?AK7JlhYovSEO!B}`52Nfe zs>ujSE{U_Hh;Ftbm5~ZbU)~G)6>B{I067*~vuV|Th?QG~V#Hire%5Cs9WOQp|(Y}kf3C3w?!@HBnzQ1i$eM8|^%4xET|G3cYKl>!q| z2as@HJIAhbWab=0kJhn3Gt1N6M`6T4Ivl+`x@>uJiAv)tUSIaCplRN*$kOkqkxwxtp9PS|kDk^Cwh)g3(HtDOh>gRq(1nyu0@(^~-)aPfQXjE`l9*Gp)+R^=3!AAUqY-0o9(s(73Q1BJT|-Luhg1t%{g7x zovYB!*R+yt-4>+8Q}TtC=B-{q-$;1OdEQE0TULrn$)ToYAvbFD4v%c89_&? zga=9MEc&hZNULNU*|y?cyT;ia%(!#%20e0P-B_Mq8@Z4j$Qcw&F8Z(-pD5S$@I3{e zfgoxSYi!Lsh<9xdCvQqoPVsKb%dfe*H(FlI2&gwBC?;M}#y3>(yn~UF=i|e+tL3!QZnc$Z0 zPl&TXG~FLV=iampwH;9X@kk-QL4&x!Sd0t)#2)Wk8A_r$CXRy3X>-tN@HL1zt+~Fy zho32b3z|d(SMnGQ!t^QA{)0y&9_F$OI9_fyKM;|biq6yzIj9ga#aS+vCcGrWsp(bt z$8dyqJ)WLWeKe{Dr=!ZZ0MC1#aoF{k)(KX+?-=%BTd5`{+z=;rEtToJ7jgJAAO(}F z2S1UX(AQg1!*$d7LC`)$dBs_g)RJhA!Xlg_%Y@L9)% z$gGm+Vfej@+&P7(0o{V=i6zm)3-id`9n`mg=F^#x!6ngN_$|7-7UlpAtUQCzyRZ$p zyA}N?+#I*i)(4|sb}PQ8t^P5#P(oZ*9z@BAKa3{xC@@Pop^~r%)d~OPa;aaOWs3ho z)VEBhNx}Kp#-bj=I_FUQ^XCRx7@rItR@HR!vc<5zdSPo78oMy+k**FEmQ2+OSdsY^ zQ>e%dR0{rih3z$4J*JVNZWQ=}^l1m_7Ya_4Cydl2%#cJ=2!NQx{eM^w^XImuI{nm% z@Qeaa1QRRqsAph{4P>ASnQy$GVDfE(glaA8cGBD}Km}%}N5BaFB|Y5{g|(m&X9{sE#`5F$~>hIbte$A&z$AXE)IcPYi$@ z&cCK6e890TeK-~e7{74DD4_UNQ=L)nLFr;S7EolgTKEI3z>$q|`PW{HXrzGDPKH<= zRUJ_O%*8XFs$H-jOD44l7%v|Tr=kafM&y(Hp9xokszE2BE+q+BHu;bubxMCg#j;q% zX^!;@m}fn3#>tlRbWS&00cU*aQv7zgKkb)=AF4rFKp&zLMLh4A+laMhagONIcQe@4 z;0R=r(KVR5&sVkV=;Y3otwVXTXxvugH*;~GP^xkd@}aAewRso1q)2CI6m1Ra+c@e1 zP-XAXD%;s~ zPPS?avJm<*P30_n* z3DgWTMirrt(WmfVmU>Ye7-^CFAnLzpO!1IN^V~-W{!-jQv}PecHSpNTWx2cwR(LiT z_)+Vkw=8Cm zoDq~ab%t$bt{c>?_?H!}_eD6uRbaxen}f=x`%9!icb!nh28Y--zp~CrHTDUT&<{1J zyZ0jhaQz0g3Ju6>GvPaN-x$tW@>h3EZCYX-;MQ!iQyY2^j8iToY!MF}kAX<70tF?) zYl_l`2d~D{jOtNH>Yo?#=biSayvEGPjC}Re#DI=rTKQnX;+^k;s>3nT%kUtS6F`ya zf{sTyrA}WqY8{$7p0drsA@3<6QlilVh~B-CXe^xTEm}U(yiw4&sI?30Y4;3FS2$S+(Iz(lJ9C=Z-7#PSh` zUlVyPCR#mN<1k)Dt7Qc@rGEZivx3W~k>|l0i6^^_heI)^?nM_Bqk5uhHcfGfy@SbB zK7_Jysvc|4AVpn3J&AP+d)_+r2&$M}Y8~c1iJ@dw1(#M+K@JZ<@)gJmZ|?+{+;?@5|t&9j#!ZXhxh2T{*HRu?WQr`lDp3m4^ix7XR>rL4eeK zFuXi}JJ+ONK?gjwD;6y0<;g3j>?Kemt#cO&{pBvC2M~)wWeY<= zHz~b~VG-8(2vuZA!Kqh}km?C+TtUd^eV_ghcvCrq$}u*SrMwMt2hc2^b$d+bK3Y`r9AUj>hI zs!oPvOlc<;b`aB_XOW=VKgHreU4E zqP!9y>b$dFOt**iZV6B&(F>fi*#II=Npyx&$=AW0s?XpFaU~+phTIL+vb*Gt70C;W zYLHRX0vFKSt#^+Vd|RjTGc+)#>ZMe)>&^RUP(AYN&>wK)961QHT)Fa&DhIycMtjke ze>r7405lGq3J+GZNZ2ZbSx#j!OmeCc4}qnfN}}gDW$%DOqtA9Kw;&y-stsuFE5PQy zCON(d_3u>8#88ca5i3fpvN@zJPYS5fFad{EnZR60Ala#m9!mCB2ra={VZ=nIt1$9O zNOuY~KP8&^B(+n;V_wYpMSDR#LDb|rm4ELi?P8GBHtcO6uIH;`{Utyb{w1jBH~V`+ z?Wdxa3uaVN4;0!n2NV6bxSoh^r07Q!{g|R`t;GROgD*TH=wb+kFZ`5A|Ynhp3C|Cc%{+(Kf zKkng@%db*f&)Uy6wDTrFa?N{LJ@ z#-(4xRZtbRstQQe92_bIf84V~&&BvC697rHBWe4w6NhLQ`fE%lS7cN_?y4X^x zRl}&S8tm!~{BhGnUk9hMz8kZ2OQO;G5jmD^+O6z8F_To(nuR>Jg+a7FGDl=2O|>WaNILTL@(((N0CvovI4Bk*FC+YA3A* zd900VoFs& zcyc$1oRsHW%JrgLH_BZtDRp$p&X46E=kwo4{(3I9f5jj76sEI)>69I1BvcZ${RAr9 z0u_jXM9RJSIxl8+4&ftQ`HlJ z9!z#>1ogd45Lby~n{N4jDxbhV$w*dD%22jy1>9Rt9!n)p+f|=0!L$X5Sf*O_s9~yA z=NqPEFquB~IZnDUr()7vws35qQ%7Vzm8f2#CmjhROQM~f%HD8Cr|J$=ws_M|h-|30 z@W*W~921<%f#_w6I|}tv5YWxj&i*jL-GQk}N%S?;7m@vLyvDZa)H&QPXWvKEZ* z3gfV%UQSiX-=;?>@|Cg2Re4PHZecvxDVt|CPVw26kgX%xE*G|ooU&<_?P#E-iSt3* zT4Wu8b^z#%Ftxz0Q7!h5#-oJd!d)+ZV!~aw!)e{KzOZE&$8_6D!&E`0k}Pf7F)r}943e{oNBzqTG#@B-=@juUF3?xBiFlzv*cCp(pQ z0RZ=99`_u>ovDK4?nUnFgnNopHWPpv=JB2mUS!=KHGiCDR;>Y!n`ZQYdUTuJp+;s0 zFrXb^yYhOP+!ufwyAP?(g`4xT8~9D?neTY7VD+ zZAzkDoyr$bwFqfCRTp6EUWU!CyaR^evuANPZ$k2@1Pi23*pG>i8iU`FZ1En(caRkQ zi{7D*lHa@3i}<%Zf0MPjnl``mxs7DY(zLS1EKP;@5Qwrg-B6LgK~}8qQ04}p<=Nw5 zg*ZE@3Gb3H0|aiE6>d^d^5pZRWCSN4HP8Fx8ES=3E<}Jy6FwlJr!V{@W{wEG`6^ne zV#I>by=+ngkt6qYG^Ud19H;VebgWL*1NbR9zmgH7$@n8(l5~9k!c<-gqgH(=buHLo zz^ZoS&cYw}BGDIc$^rn`b5C?CM`3t(su=&5vJVvE1W`TDe%4D;DHP_;qo34tKdH0) zr1+AydY++}r}4*);^aK8BRQ2BsNLfBqALsnYis_uVE9%TT0501060~ZGG3bQj%sZ6 z)w0ljSru1(pMPMgPl%gAMD)Iz806`yy18M9(dHws?`RktY^s#c2GI8vDg-Y+*GD z@la1=k7-cS%ZT&2+INpEX6o(MkfT#m45x6K@4*pZldbFDa)f`bX z_gpl>l4!f4$;G3kUUGmm4e1uN9e1eE+c;%?0eCI3op4!w8!!&3cd-6$r)-yvZv2~Dee@?db)D)1?c!zG4E@%r>tU3;2E6zZ9oBy$WL)4`2`xywp9L-z zU{X&CYr0cehdm9aDi>1$$-wzKmGb;`75VEBv|&hio%$IEJTa5!cS3<|WZZKd3{mS1 z9z8xC5*AUWFe!pZX2@8`p-*i>1|!pefnOnlK@`g=GRg!wgfd66@v2M(WR-9cM&3wI z6-InS8q7M*_mrQP2Uu*Spt|3-!&tD0zFFA=Q+u>-tZpSY3qfXbJ(%ydtEq`W7+ku% z{ZmcJlLWV`A^7dy0YxRzE>77^07OB+DA*=!9MOMbwO`B>?`Mi-0n6Iku)bwj6V_4SAd~!Jk3?Z-jpj4rn-4kE3G{TUPk| z^MrpK`M(2`gj=1;qkqNnB7h+3gJRiRphP-LAhoE@sd|<_TT0l~sT_vf7jO3*vJ|SV zgYUv6FO=31K)G|Me3@tqQv4{1{5oal@JEgWYpHrXf3}w3u2cDOGOfNBLL9vQLVPTs zjz!rp53;m4BrdT6Bvz4MTg|w+y@D;_6+V(tS6vVEG6~wX(bwU}HbbjD@e}CFT!_fm zM#Lm?-;v__LwfdwXw@i!$HnN^K}8WffgiN<)je>jmbs4!`^i!SXi+7#-SjFI%ahV_ z(4@4_l)&Du$Y^0N44Jj-KFq2jmuQV=7U!vsvXz6z1)r@|W4){eAA%xvFIt7F#p*pW zKrAYHt$2k|R7yo%#q>hEFus+zj38eCbh1Q?^q)+BE2Ipin;FM%U&i z;W*(-R&P^c6&Q2bmpWx{i3}W#dyl45dc@-{C-=kTep$G0i%p>b5-b^nN!uY2W^EOE zPMyv~NU~}UT4S{b*4U-Y&aMBpHP)ADzJfH1%ABf!h>#&6l)n`EHpU>9;!nJOUjJwK zv#t2gyJV`sA4WlcjOXM7E_HFU$l>pqS>*LJqizLq{Vc}O+>a#JcL5AytFu@IpfI3r zL&n`(Nq<)8R|6EwMl(GW_be>dRV(~(IoHBr51dj0KvyR=ptyJI=2OF+qM<)P_*@l# zRQAM=;vZ3rT>7ZZ&=pWE=*u=}v=1oV5Y^dm2K5wvqnj6TyQa7pE@#&i(*V2QW+Aob zBmo?#M&r8zaXqnmA+5a@fBY%Of3{+sgJb8lY7r-&9Mx*ojhL9acT&w=V)RV_(V*`W zosT0F=2U%zMHDR|L!sjtd@7Vj@G8tMVJ_?}HPng8HXeK@yW(1#LRd@Ud zd3qNmfsHz+>^T6Orp-kl2)%$)#ji`VjKttl8g?4~l;^LNB-g4-ph^bVx!iX{DS@z7 zwZ#lGf@hiS@6Mcp(#Ex_D+E;i7X0~@e|F-Jn=8pra>|Zi@-0fDr=x#F^2Iy7q?a=NjJg@bpul^;GZj*^oJPHbKjQ=d|Fq!hc1y+*oR^C?ufoiO{9%a2y@V>?2bO#sd^ZbW;Wunpam4eKc0e1Vijya zKc-qy!3Cn=Qndfr)K2o56V(f3-i8&qJ3yF2MQe)j%wE0v0l0uVG&YsQSi!3)xP*fH zu$(Q4Ugnf30G>(fK$5zz#nLgK%r}vFjWAzcw7B?ukCjmg!`e!9B5Q!GPYUamPT8FR zXcDpL|6qkDdWA2VskWkWR6B|WMf3`%@)FE%ikDHitq6~c6+Tvk(N5|@t<)0`ZrV|M zgZx2;j1~xsxRXDCEi%aefr(Q|bhcC34S8{@p285%R3F|*lh-35&*XQ2@^agcCSM4Q z`=%(k$|-vSfcV~Zmaz_xH7A47T?kU{Jn_@d_A!}jfq?7I7u1J>N*8g{bS6TD>WDvR zxr`jGRj0y~P!7^pgHROe2{@&ha3-ma$c=O&b=d8@3w@Jmb&Z&Kvb8Z~?su~q3k>jbF0d@`-s((OTK#|l?mU6T6i_O^!9+HJKTv04 z-FRBJhTLH(y=s7%6MhOlq4y*GWgzhd7^m_<08Z5>Xk{?rX`}0T>Pm(0B{2D^On#0C zBspavs!LHf8rEXXnx@vH3v?Onvo7F{xi98EXewB#2W-g>BLI`OCaT%U}yW`wmi;N75_08%V;@ z2vwqT%tHTM={jQ&7XlH%H%Bocp3@6i`4Lvpga}Gm6{6n}TX%ECy9g#kFlk0H-wH0h z^nMyh_bJSfN}?^DvV{PIVHOzT>Y?3RTJPP^%O-L;HD-fLW!Xd)5OoaoO%{Duqk-?G z3vhDH=}tk>PN(V!)RD}j3JTjQ7a}qlML$!kIzm?6^saQ1>KgfXwbz&bO6}FczgG9E zwP5G+Jz1@)w%Pdx7Bv>GR@+f@>=v&kMSA0Rg~ARr$OW;=5QoBuv=$SAtoJ2XD8Kfo zP%1bPf@*-|2!Gt0(NmQ~uW`z*1Ry0elC-{JPc0^}_RSB3V`^2vro~Cd8}C`&%b34f z1O(jUMO~p&nFFABG<@r5XhQFoq87p~DHpeuFkM&ljZ?J-f3PuX^OftU< zth)^p*pleAh=1E1sV9+8Toq1wLrbrfa;sC%A*7;C2bZYg(50@Ts(VD$^-fs{0Hk_1 zS@`*dKfVLYX=J%ZSWa=uW&p4Oz6iYEWqZY~kIe}sb?KWs_fqMI$Kgd0s0gSNDLPn0 z^Km(f+LP2kZ9scI3G|Ke@ zSMELRp(}5}Ut~8?^``p7P#1L@+4$KrHxlfDk9{@^D8D>UH+bKbbI<*#SWj2$aP{weG zY?Vvt#k7o1@Z>%N>7sX>s>61PS+9#&z2c|yz}`lhmzqWP3bMbz#44Wyvs3j7270*3 zJR?FMf_?4OMmFu^DKeEJ&x?H{03zFG80M*3e>?RunVXUMNHTvR%zQ*eG82LI$V?YV zab;eo_Ug`wVC@IYS)KYtR>1Wt)v7#)Dwz>?1GM2)3a9Mf0AT7zV8uW08i}u2cS*3g zFC>6}U+_^RxPz_p0SM(T6@$tspP&}goR;8xSu486D7sxMYN=}B*O7~J>A+6q1ADLt zXanx)6iW(qQ#B-y%DoljqJiS!BS2#HjL{mpDUPI(p1HSyrI4~cv}}$lBOxPr0{R1Y z>g#kKeSGmc`pWS@=sOg$^VH^96RQ_u4-j>%-sOlG=A{7cWZ-PtjTGMf8j!K4|8637 z6R_S{VIH>Q|CReDK525U98^@B3D3~*mxO0(_}_$i77L&2s3tsK;EGi8np2MEhdu_0 z7mnn>BQBn&Qg?Mdj(L?Q;`#s@47*gk+`+qTM^vOT33E8I!8;szC+*FHy|O0aGr6nG z)dOF4nz^$97G(TO0a_M!&!8SG%x zt5Ko`zhFUB{lFe_t3+y|>InR+zLFoAYA9Vk8P0as*V+Zmr&Y8I2KWDjUNp26=?gjSK#N-PBxqqX(R1;wvb_>;L z`8TSD$-njL1o?Lt^R339u2G6fYM2HR)N8D_6!ko|^YECvnn?Xg;QSM{0~f;1{7o8_ ztZpSMXJxN~8R}Bh#xR-cRY$U za};8(nY#@2Fi}actkdv9*MAt!%TBsRXUy8a=^f8kY zh+-x`5NRlW3jpP(Bm2x`-AkhOd!5A;^^#?Lih$1RCj@m~*NgZr)lI}3)JqgkQEg$R z_JA2cpr7WAGK9{n*Gboj1%34f17%h75fS-%eRg#nK%O;A4D-tHCw%uaA-r9K=##>= z8brTqULdJPyc=cyJr2}o;~fY@m*=F0F$N{%%A297SW_n^;8`IQy>Q?zNftOLbpQuq z`*<0uB`$L(gq$Eaa`-1*4M)k?{x9K33>ZPQJHA4ayR%}HYL@xb6IaejDqo5BJ_e!0v{ZTiYEB)V{;IW+l zROBy5I0rL^{N>C|jNG-9OV)B5;T?(jD;o2cN7hv2uRvTO)H#Orda`bKPBPLJNl2KC zFWk@T2AnQ|+uxGGbtT_Z@k(G01s~OdH^QIPg@DzSkW#nf{#|e^pP_B8Uc`E^v2dl@ zkAH)ch)Y%X2`;L35_cAHDXJ7OO7ODfGf{~0neP%Na0-;dn3M6mDqg!G|2gDORxOc+ z`jd$1I-wDOd01gFaVDW-1lOSE6K4`S6fmkq62c>)_?~zf6Z#LbfP~gBVnU~r-z4-D zV9pWEGx%oWl*1FZ^r0;fy-LfA)&{kD4tHsphsuvj{(Dfj=+&j4d8Q;~W(+6X*7 zB{V6rx^b;{J2zczL<+q6gn5g1^$9og5S9`&8Vml-QkVnU3u)m}=n_9Km>r(Sme{`{ zHRnmupB4(bmr`VHC@I)(I9djL5S@Q8n{YW{Cpd5y;5mSU$-MwgBa|{3&_qJ*N&w{( z`nxBfA%yx<`dC2W%9yloYnt|T@*=jMc1K9qv|AE3X``{4wDE2Q(#Afn`kIiW{V5?y z8?Iu~eiKl5kxknv<#H%|XMFk@L9U_P5LkT^_#U=3;da8t1b+J|n9A()vk$>$BLM{j z!Z4)xVs#_cb+%VF#BlulXh=L&%!+Cn(mW z2;g7}P5OjTn~wm!Cpa4NIw3LSIYMH{qlBbxcuyp}&KlyBa$y`^+tiq6Y0Rl$6=TFD zc)kwCh^vICE(PHWHHuJ&!GMO6o)sK;Ctykj+YJD8m~h?=s57Cqfs(bX#KH7GkA) zT1H6BTS`dGdxnq{+Cv`hE5z~t%GPca)_z>{(@O6nwYh`saa`gukKQ?`etpyuNbpF=T9-~ zIYMIAqlA33p65?7>lQ%PtVM)j)(V()8#%Dx@BcsJ*E?C#uAuJD2*j>DxvnT1Ii;L zT_nH77fj)B!)uF{c}KW$ zZLm8l=Oe(u0d&@CLIVkr9vnpIX+kFudXUh&jTnVmpMsyy@MjvE-_3-Y5xSmGDxoU~ zr4X7)NW`)!b|rqoeHM{)5lOpXW$?H>{G5!R;m(*|nx)kq+TQ`cW2T)MK^~KL`OR|J zpF}Om)RM&J^cS$fWJ06|Q)u-LK%qXt0rLR=PHgH#Kwl8sEZFXJz?+4alaXp-)AbCN zUpo(GvY|amELJ+fN2%{);*VjuRR}&w6#bA(EL*APmg zzDo&-`=3upoOB8y8Dz(KxZ!}p4Zh=YZzCLS>bM^<&wuQeJexT{4+z4Uq}{crx|F+- z>~8RA0~Dap{$Tbh1&~-EFpr`Oo*3q*+M2k^l=J^_4iUB#jl;0 zX=y^!+WDFa#)|@5BiB=fWP36pDZEn&$t*RGP;(a9AV9FV9Se6PVa!s710F2AboXpR z(y}rD9ccY#CjP~5zV*B;rmg=EpzvzHoKaW_;gwCxc?T8TAqs3izYM>SlS639%Y@N% z2tNT>_iA$mVsj}VBqLd5g{P=Oc6l&92-F5H&aAveL5k@;bcP6C{Fcod4R&%zFUrukpY3`8xm&Q6WDzPD1*jPz$!fzd!nu&1l|gJOJEI?g)qTMx zLbB@nicl)M;FW@-?)M4(PG5Y3kaW<`6H1uJWmg^uZ}O*%mnY^S2)5^76d-mcbJmYg8m;U>db8jmr1uv(%Py19 zfFA%Q5t0gx{tPIQGQSWKFWU|X?Kq3ly9LYqt|26zxq^_)J(dY|1gJ|1i4*X7FFm9_ zBvi`YMMz|CBb3OT^SNN1UI8JI4H1&zc!p3ZdnO@~9Zx7x@-I}TJD8Bj9!*GOdkK}Y zod}6+79m;nHzOq0H`D==9PcJ1T9n`@yTzlfBP6n)5fa(ughVs1@@m-^3CVc!gh#!P zkofQ&LZ!{6ge0{a0omu@s%4@$CB0;CdptrU?<|i1c|qov2>%O>4-}Ec;~Vbbq{%~M zA9Hg)9wE{V3`hbr)I>%t6~HQ@QyNC&~REXNY`SU(JHdLKb9P@dqlu&WxVfio>cEK74_JcKQ&D%Pb>phB=j#G5qp*%NX zUSlJk2fICi-4J>q;Cl1bx^lcGm`w(G!Y(7YfDFUHAm8B12@O%7BQggDdkq*Z8J{Zz zLzAS>h)-I?^Fq1mj(Bk%Rdatpz|DM83$L^2FIhcA!e>H|=jHXmh=+-NgV^OAQ00D3 zx4)%xYF_#>)}E}o#V5Cf@&z_IU;Jq!E(I0tkFvw(fm8W!Mau#BtM_QC3E~Tl+?PWX z8-;0~fo&G^@Ep*E{pcb%1do#{Ial)=TFsp&YwY7@g?wrbuhHTd8Fttr?NOT5gGIB& zXUWc+M9J+Fe$_)QN9sK2HO>H0t;qLL`Q1O(o`{3j1p~$B^FTo|PAXoGt0+Zv#hvgw zi@(q1yRXBs$AH}>Zns9p@m1HI#hIZbb)P}u70C3$EY*z2tP$$^miLDka91l;> z%4_oh33FDYvg~AE61TSo@`q}LK;|cc=T2srMOR^14v}Bj#p1K60{Pk3?sKc2j?DM<`~LHy>po|@=bpQ7=gvWRh1FWW-I|Qx8Hmbm z=Df8tO{sbsux(K;xI$w;Aa{d~#Hv*(u8q0(X&uSrr*~6Iz4SCli=$=rk6UZAwEYsyl+-bAS1c$E3_=&YBKj;YD7!4VwnK@+>FXpV)ZV!nUeF$RqSG>N89 zk64!3_Al{mCcce&@EK@O%vaNv>Q!pYx_7C+tzXLRunPNVbGD3o0v#^#@csIilGfRW zj4FHeCw{%?-j%OXQ)e>}okxpwBsY_3`e7|~UlZcpQ^V+`GCMPcD-JnnnW)F3aLg85 z3^!PMA?o4Q{~$rNpy<6|7cXPO-}rHLc(8DrgEKGKmXJrP*^s&!O>zAn$PN+N&#bE9 zvwr}ZZk)g!CftYMa9}qq#TZ0SDs>f4YHR4~RUED0(M_hpE70JQcY}3E*N5ZH_iyu! z0A{WYV7>>Wb0?t-z~cp+8B;w9V4T?g5d&^3-W^msO3|N&Xn)eotTr7ov!@}C1nI37 zJwwBpF!!&-tJlebxz7)bhS9QQ4|A(L5pTw);S)M9Wx{LN$~)b+q-_&q=$v7sWk+O~ zHU{Vb;H{X>X}+7_{L%!HE2G7EV}jEFdYw%Ev;RtE2{~?vGeDS&{^8ywpm*LmOkH{F zo(cJX2=b4Y{Jj$L4X_~q>y=h;2Y-^ND-0=r$Y$Y#f+#~SWic+cFc-{A?%>ywq77Yo zTBBw{q&oTCTjkyM+jtd&DxixV*rW(Mx4LawJb0LrFMWyrZFr zy}ip1eY9hO;5-4e)EMmlG4>DK=L@+$NQ!ZBr(vl<9CbW@PJ>G^?v5meN?H0Ekrk@}KRB=74F1j}7RBt#( zX-eG1!d||?`MOlA6Q_KctG9QlsQPXiQcq=gIsOVM7^f7BhFOK=cQjS=xju9kM8!)3 z$pn#TsZk`yKoZK4AvRFNdg>uAN5fKNrW)O)!@6PQn8X$0|B7`tuN7?&rL|4K4*+60 z9wgwEBl=_<)Vb}6+n)L{ooA>c(esB%-rtK?OO3QY?rD(H`CIB;@vw!9tsIbxZ6|To0;-cIA=))U#EgT{+zYn{Nv3%29#pNHo#Q3O;4Fa9yk`9M!(dJDD2fPQt`-M+bs)Tm2|;aesUhK|gZi zEpr>kiG&3#cp%Y?^AbpU;NJE)6^CECsJxWxgBJ?COu$k6k8dRzo z%xWwwkG(b?g|A~cQ3wC$=UtI7tW4Acd;5fvA+wb|FxQTYZ>xVO-4>vUjjemoY$tB> zt)7hWlFL^H9fBS-ik;V>TiLyEl5cxyDrq|Lx-!SrSYu%Re*OVGWu1v>N(PP9y51P~YeZ$bmx~qk`4G7~( zuDb>l4W_$Ds7Z$E-EvRs5aZEG!f_yq7wVGvX(iY}z)C{*5CIQYRkgg`x~)5qBEd9) z0@$Q>-K`%;70GJ$vD_U=Lgbgek8V+-HEp{4O0fP-Ybl|<2`B2g`+_28LTjkj`%_Be zYW)mB6?ICgUUNs5({rbQ+!st55+dv%A}(HJ7Uk{mVYd=W=WgMz8j_l(@wF(i4&^@n zT%FHqKBFrk@lGz9TMtOk7Kyxg&al6MZn?kp-2`U7sa4a&lsVzji^>Qtz7izu5mHzX^!v%Gj zfx-ew`szE-Ly2yP6Ro9CA5BWB)QW#`oKNDpt@{c?=E)q@U}8djevf*^V|9X&X1Mm@orI`+H?bRyLSCVp!u%cW0`5%-W+tXZDJ8r{s z*zInLO)NvVhN|6t2HvL(?&KD~%`}o;s@s%~Jy16rf>luI`OwJY|HI{}?fcA|VmlvhL9@-i;1MWyxNm`cM1w+SN%m4ziu z<2Bm&42!sPfpxUgo(4D4x&bM7;^IeuXMywopGI;ZvUS;arI?- zNBOID{TR+f-)$~UPEEI;T`lBSG~(hv1!2)UhQkr@1{@?|?A}KSZqsKg&Gn66a_Gb^0^nW47TDc%17rug z)d^4wuYqwY!Nion-i^7U*khD2=fb$;8u9{=R&p2VvS}};vnf3+Gz$W6p@#|S`dT#w zCzNgZcaAm|V$1+vE?2P>FLp-&B$=!njT@n>F3X&jwo$WQg^Qs30Xg1ffZGIOR+IYD zx7dmNeLd-TNS`Dq)hb+(l2F`$0YBA&%HpRHRAURh&m(9de?s>_M6D&ceGYxH_TUQIZ@NQMfP4?B!UGHFubc^ zB-TaKKR`n=rhpl@14fM-;Rgs(2)|R$_0uLQ`6uHti9ioE?5Uj`;@m`R8odTS_W!Nt z(b7}iT0bP&#(m2a$@64F97&@uuJO1py3XRMOt&B3OU$hU%Z=NQK%zm?+aCO}w(*QH zaS1bI8l;u5h53esHu~4O?`Vm`M)frqG@a{1j*Yp>gB@zUS-~_yNF) z*uFbIj?IvN1KBe+t$Ie|LTu}d9U6og;tY>4FR^2JD8a{Ls6zwKy3L2`&D7W2`Q$5i zp%yr~m!#kE#1)EQgA%bn5{<78(p{CRm$S2gu{~2Mw=PAC8j{UmxBj7|pa| z?Pd0n%;)eqVkSx`ZHO5jv4YZux-Rgn+x#mlxOQR!?U%XxQ3$1%s6!9BS1X=VN<2aL zb<4W%k817=N*gRb0q5~y3HY-F`UDJA0?r#mDSN;wmd@m-rwq}cVqcL{VvjFVe@;*u zoleA5>_-_ZL_5OF+hghW-whD!06tx1%&PJgNA%B_bt|#rJwmMCZbZD(EZ(_&#Qa;t zyE%+)%qP<__irjMmvYs&v5-RZSukVGp&W#j=`Zq7TW@)lQs5g?dHV*b zqmXUB)h+S=LT09^UXt__EV3Oo^MnO?;@jYh|e7+$ZZ)1m;<09j*D6aGz$BAP; zWcZxqF196RKN?djAKSob>F3IPIj#{>?q*}b+jpLT5&w*&n7E}J%|;@=0GeUXSV}gu zl>7>S+aKwc2^e^p`#o(@oR3A=V@W%eqkWxVw524e8^j5xwa>>fRB&BHU6wSgEa`7$ zN%EK&%g;;FyNoE+R+C+?dRV?|{d5VwxRtRXRbo0#>| z?OPEb^HI<2{HKzL#qiMFg?=8pB+h)wVEMcWz&E=1QQP>SU?&rphGJmmj? z+`R-M>Y^)a>%x)f#{^#C}C}2rIhN#C_Yc zWqOLv)@cB(BVLvV(><@s!!}a)a-&^_qg^ttbvujk9Y$cvuZd!cTU&4MF1X$LQn|tS zzDehHBA|NSA(T>FFsqGGq~Ti`0g)7HVIJdEH{3PE5oF;c!qC zOHs`im3*t~f~SslOm27~3^#9-st+vc+5i70?*9$>H;_I1|G$c79N@B3X5Yu&EW{Zg z%qjB=E>B!>CwD~XA8!@Set~(P=D`8+Hz5XlX70=J%zefkS{AUH8%_$y&=<^YesmN~ zVp|u_mt11gp7+%b`R7Y^0HY>}=S%t{Gd<;4O`$e5`pa-5XS1tDD~Ze8&O{jXH5_i$ zy`L_%xmNN{Q5OG;Khei@p>17_xJ)NtI9?yIV(=0DG{sHxD)ftH8sXtBui!E@kggY# zcEqGr?n06N!ASQ_=f(xXFE#9^XiX`})T51V4{30kQSXy(e~6Z`b&lyUJElJ=rpH5_ z==+I&XQRg(?Vuq2+L(GrqgHD=UuyIR@4eBsYr>kI@@EWc;!lkkQZYk?yHyNtQBz`1 zk53aU70|;WcY43sO)|!L#4rW(l4ncYEeiO06oy3d+7}P!FZ_!f0!xm>1M_lFI(gr^!YyZW9Ugb>((~%FaIS zCE|-dW8=>|L~Y-Ovedf08RihrtmfiBQoysy#h7Q6rK1PLs*{=NcD;?kRJk@`tc?+2 z=I9=~A=gDq&6?`##w9_AA_!EcmRw8jZPnPwz3sft5riJKwkLLP`9+&}`coAHwHu_UxSo|I-QIhJEBx`<-2w8PJxGJq*XWT@v?hcL5 z=Cfwd)|E-;9w%VJb}R|IJ_wtmKvVsAl69y!&lTtO#)&h{le(qMI6n3A<;a#9t)oiC z2_K-CQ-$bI$tVr8X&y%gy`Flvq}LLNoMuL@zoHmwQM9()ke zxfDT!m>v-v86r5*0{AFX|u zG3R*EDE(ECDgTeLF?T~|G}$D5na=6WSTWxin6DDEH{PnEJjp1Rwj9y=vSR!^-F~Tt z7fa0e589}0nftZ4lh*n?M0_0uBaZlSB)bnZqFcpeev!^~#b){}o%@WS$viohsTQS& z%+G?%{Y<7AC@Yx-$$SL7yPsi%YD&g)ui;*0 z(BRGy_e^oWjArTfd(jIIKy)-Fqt45?K|i%f@%wNKFob*aZD2pUJKpkQzXwJN*0iyR zTT5ckK&&|@JjTMw^R!+Ss{u=kWWw)dIvFj3DUN%Y|EVVluqL!ifzkLJWslaLOhL% z;ua%6JKcT;dc(rHa4DkN6(X7k(*Q-Zmm)gDIM2alo<$SVZ~0J8|15YG6Q}Ddo*j+n zd}b81qUkBuk|}0`yyub)w(<%puDc0FKi4Wf=cRK+0!DnICuS}ECvqoF%y?+AyCld< zWo*T)B+N7kV{jQ9Bn&J^_oye9n!`jq#fUFxc_}?*FBTy!!p|72A)5%>%Msd3Zl@SE zZZPj+=!m04dJt;KaKuws>f8|;^`P%Vb`dk;`PW=U+dxj+SLI#LlaX#m-~$%21pA@p=A*nRz`nNe?|G-bnoe4AGR= z6~jDor3cX#r^ZBo6j2r;H-*UDRs4w_q-^^aX4*eviJVatfJn}h?VXwQ_f*Nvyu+et z*pnh8b8Km8S;hivMn*l~$a!ey1OkD)xlG<=Ik60v2pfyM-pF}rW;+62_V6wp z2)p06N$JklfF<9Xc?;eBdo#V=i-f~8;SN#fq1JmdRqg>LaX!V+9stY#Okxg|wNInm*wlL{YPn-!aYt$p*kVF?4eTremVpaxG^7#A z{$f@Ex=;bXQuGZ$H$a^G8z;_Hcd!7?Rkt9Jt#n&})o{iQIeS)3#@$GSI4VuM4H4`f z;ZM{TLUSsg&V5xAN2_U!dxAeb$6sk!DUzD~@ zMeS;=V=3Anxg>^kXktBw+=w27Rd1-YYXvVoxd%#}sYY0x&P^a- z(w2cE8t(~)Q+bMI|=DoZYCntJ4<mU5-} zP!*2H&apImE!Q{Wyos<_zgwl>aX~+MTo=zX)Fz8|xS}<$={s7q_zXV#XXVAgG(sjT zFA9x1#aDn&hIvmt**q{Nq_;?J;!m`M#=ETxpT2JqAS?C6oRKV|)5=!$=n(3TkL&jk zrE2ucu-{|sxcdDIfsklR3jwxCi#$7tO@=FRHF-xX&*&yzsbK!+NRk$V+IrifM>1->xtvJR3gq$u4Q< zB28L7u8vycL=*iHIDu2o`FO=HuF~krOmY7Y~CF%n%$x4I9ik0A?_r^ zcW63G_$Y-(S-2y^PabDWIxwLQvJa{C*L5xxcY+GW{{b0;+-lM{rIh@LuHF^xm(sd- zb``f7foKhs^3JhyKT-S1+n)d{&6gm@=$0cS`V?gB7W;M4^>(iZISYk<9-!P}=N=KZ z(mfJO*;!Jmrq5ouGX1S0 zIYXTHi!+xYXeHt)$vs=_L$d6^Fno7c!Q>`m86{)Xi=Zmpy(VypTdt1wb9gkx{F9{1 z6zfWQUqs3WX!}sGJnZ`;$SS7+13ypmBXOsBh1PVRAQ1Q*p)1`-hPL%DB~kCP`3H+~ zcMvp1*Rx2M__I3?qg`Bd_fQSd^L+mKrQF4VA&OQ0J+j^A*s>QuYSv@aKbk!k zyO;m1xaYYqHRPC*WV_ASaD?v`U~^I@w&P>A8;q?yNl`K07n}y!(lb2Fav(`7s*y&_ z?lR>CbYSrtm?sc4Q@)JK3`nZR!ls zb9#;5eGgC~)+&pb9*fw}ix`WDsK`h>evIY~g7k}1B%}Q~K3YF9rS?RU^yVrj*%8;& z6HHc@d*yl4W3Y@i210vuPRFcCz9fa@H(*0um0D_%S#O0Qb^sbR5mj5)kLlbo1l)cI zDQ{a{NfnO`@F|h2Y^SwrtjV3eo-*kaB2U2@~N>BHTrUx|(P1xGyANMwNSASBN?O6DMtVdSSOUKx6;4 zNWSGybda(CE}h$%05R<>k_z5N*i$60ieytT{&9!)E@j{p-4e5yE(7he?*sCR(fP8B z`~G10G3!q`z_|0UdO_uAh6KHhCGBAdTm};~5xbW}+*}gzu!)$XZ-18WP>DEKBCdz8 zt?NS0{}8}(69JN(iEP(o-%&y4vuui1)d582-C5 z?gTGdx%EE5;?TCPsF|0=yWF8A%8iY3Cr>#G%7;XWI}1uj^u)8$WVxLv*_ zxsdl8<0@iEJppF>Ld&Dk$nVf0;n-#JU@?ydU+VO`>GZb}^Z=kbq!?eJ?8sg%ca!4_ z`g^ecx(}X7y8q>Q#MU+4##oe@-*UG(NO`OK*sTVrbI`PYTp;Yw5B>l4$fndYQJiZ= zt|xu369h6ss5F5s%cw^^YDb}ZHK}m8MRUYB{y2iGl?neKLdl(N=tsLje__FtqPWnb zd%3@t(eujaqd=2le@L23Y?La_+1=*}lvz7L;P$03a2RAxgDNK@#V$4hTTgd`0e4Q5 zWsm7<`(Y5b$VSMDt78UR;_onAV^`bv!Zix_&C}q_UGs)A7TJF%5qODXnNx63b#G#Q z$Sm1aoGP;}gJ({|GDV%#Al^?- zXP};?4mdvIcT!fSYR)m=Gx17Aid);yzAzFqVEIL)^PCs6&} zzxCyEkf+lYQIgN*T3F|{oR`DrE0;C&rMnN4E6fp2$G>h+eZ15D9&Uekw!g`v|3@E* zv38?Fwd4;-Kf0)ozmc19)wG1J<|pcZ?6LcBbezA4`(VLs>o5R?#wC-v+_fZJuuQmu z-StJ#?68uQrBxS`CTQhaR^yfZ$fQE!VqF&RfdeLz?d)b3&*m=TT}XU^malqoKU>YV z>$qDNN_z0pw(vSAWg!;4C>BQRUEn#h5WPKSjL?PnruB|!3&$*xW7hmJOD8-jJ@=T8 z^V#_obB9Tb;K}u1MQHcg$wTiSH}+<0KmFQ1sHm7*Xnal9crBmWN{9AHz`VAG14-e*_TRSl0@cEj8U##;8LarmmU*XkB6$o;CB;+>$F>p3YO0AmcmWfxn%fCou<*oA=F|T6o=DKg6aeE5ezsX|w;0YPVtM-(loC(19Zf1iD#w(_`A^!o= z+aUUmYC|7R%Hk%H`eo%&PUH`wqYs7pNj!PR7kKBEZtp&)s7^sz`PQ$2P6afnqPt

9-SQhHfRWGT7Kj*1#TWEZztVdf{x^)Ae@MUdoeNQPF+|771x(eBT07Q?(eOiL^sWkLDInQc*8HzM_DyoyqXTmGaH-l0tGkgNsW z4Ks@m3+p{iEClaq7dXA>r7**vX9$)Bw{>mQx|1+*SGCM{RUgVMhdvIIbydfru5x-Z zyo&1CP(eA(+x9`aVs1slLMlgFiq;;V268aG(H!!nd7;&E(QHK&x^zuvL)~+!BWQzG z8_A#bA#}So;gUD@DLm>o#_8_jH@Nye&|plA1&dw%4k66xl!Q;=&!zRG$EY|X-KTpi zPtFv5?CQ6Zu)9rw*r)IpXQ~-{jiJfDg2rBj-vX*mcN@XtsGjkZ`BcKM@KQy#zK`s3 zi|l)-LS!T0)sSG*iEpb?%SKnUNwp7&16?IoVx7PE(lRM-wvx?zzVmuFAeti8_ac{37_9gkM zrDs>FJ>EQs`MpRFFj7Ur{V?rWEoXBgRXj9bbra-z^lRThKUwr^Cg>}hH|>Fwx83~s zK}4&IW4hwRVlzzv@!LpH_kox!NJ5+vZ9hb_j7=&~)9ft0f#rvH!tCKnM1?FAE`^#a zWA06HuUh7;c3lwu!hnC5x?=6)h>B1~_` zo2PuW4h6iiz#|R3emb`g0e~E+OGUV-hqj_+*Ve^=IPH>(wldIG>D=0$?qC7y47hd6 zHLW{Cx2ZrCfOHq=3qF8tBG_mA;kZ}J>8-m08YR%%2HLx2wboAnadt2jsnoZ1?a^|0 zdddR?0go1VhJi=6G;pZUgPBjHqCXpW%XIEa58OpSm7KP&gIa#mdMxY*@Kqe!*0o*p z8GN0ruQS`a4sRB24}FcIHEr3b^+P6XT=6ns%*A{JE zBbwLYYYTl1XzM!A$`t2dbi;cZKaqU%(jNK3Ag{#A+;A_|eG7m(qI}(!SYk})A=Q3l z%r#xI$6x$nu2L#UZ%XoSkz7?rIVu#o;LVI|s>Imtj$LUMb4!4f>R`3g3>0RgK{+ z$>fY76w8H@ww3gpF@nP5Zm&SgoI^r(LoX?lw@)(iIyv{rxGyYK)oxcCq569Ip~QUn z14>n*exV@8oG4|D$Qq`UZgw?Ymab%Rt-^KhB0Y5kx~XBHKz-a24|)&P#Z|b@)a;nd0SLAR$6!BwuLiOPYNBzQkNTM{g}|i39m(5n(5AAvKHxqVZWg#IwHk~Q zaPAYFm6UK84oxOi6mk*2q_bF)CD)=$c8BZ^NoC#6$I>V5kUgOXa6^DS0B12h z0f4oA8VO^?Qdn7KIn{&dFE1NY3CR;|8pWk2PA4HrO2Q?gkXTK%qgT7);^3vb%jTKH zWYi_IyS_*NLdP=l)1!WYOiC$5pH$1e#mG)|Yl`wCZiH2u%ppd|pn+ot^}ua}&H={> z&tqA!^!3n-wxao{mEsOWS;=IXf}%^i-wF+Cd76P6Qmi}rmS_$)n&!RJ4_D2yrz*y7 zmL%VF1@etNxg0W8Sxm_9Yk^{~9cS^eM#l+yx*|0>w}?2SHPPn3t61S)9%?GC<7qPP z;96C4V_o3$6C?W47pm>?xT*IluB3E~I+F2{s&2MVEYjEYdf*|BkJ2HIyv0NvIzJeD zRb|8j#938Yi{@7BL&P8M_`gK_{>YU_JO_A)IQxr;$L^5bsMMM%)mER?eMQ@$MEc?J z1N*5`>V`y=Vr@InpDPP1?~xn!$E8Y3ijf zg2d}!B{+Xfb?y~LU<1Wj4b_Avl~oyANAWH4rIZl02-`rCe%M-E2@*%aqR!aWzmOtb z4UQgPwxTT!e20OPwlwfH22R@2z?T>}Y0C{I`&7W*mLW<5>sHxHz(WBiY-^;0B{;Ti zc7wRY{68Cckd%1$Yl$rx*g2MgZ_o&kNnV8#A9a@4@P3Ot)(rLVW=ZLjL1LX&X^NTSu)PHSUW z>uTOESX9HvNO$k^;}xeBE`xmxtZK7{iZ4?P5m@9FO8oyEeVkvD5e7v zOckt}8*poYWjga;B`*;+wkp*{16Kl$2T51{q&fa_232??X)%vAKM1PVu#E_8=Br6J%o1$L#B3S}$4JXhzvz*ex@Zlcx`LEj2Lt8J7*=Vt4HwOTn!#kJ zjF-Pox?7uTxT(TDSwn*hQVnj(_1g~H7M6)juc$>Yne5G4ZfQL#A-P$Sf3-V>Y@2> zC0*WjS0deT<5!ek>Au;fr{<4RYTLTDNw?oYpq0ssGTJQuJ4xSX<Eokmo!L~+kXY2{hQSHMvp*AH>&KV<%!qguD~yvs-!(~ zrIX-RC6kLR)$T(WLrZ6lwnhV}%FsO178e?3c53!(3kZQ~lH%K0Y~$6rnt2SiB{2G! zxUDsJTs383sq8*l$*~pBif~V15%@yG)2c?blUL7YDkqPu%x9`6kF3sTY9^1Y$!BUO zkF3pS>L!n@%V!2m9yuVN88~_5K&8r-f;t=GRE22&B<-$a>o+vIgFSArLH%U(V8ITeP~0E$%d8s<$6_;uoav}`_2O04 zH(w-eV)gD+9Os!lKldGon^T+c-be*6_Rnr9p>`8(F8Y=mb|Q}(cCYMH60~_jP<%-z zJeB4b55}_J$7_kw(IWYs<$G6RGH!mmbh7UR*M&1nuuaxbK0w8mqGQYbReB4(jyY2ED&7-Od>Bs zB)edVMUtB#lz%?{1p%)~z-kErJ2!8S=Z@^rNXX-@-Z>hOVvfXe1oTYPgGYJRXst! z2WOjRj&qEM1eMJ@nVc8+feJ&Q?rdN8d7Yy5>-h_9Job^q?F?Pp>_J)~UWmZ%Mpv9c zyJK4YM+9pqzWUueQ>h{7^-K4_W4FqV!;0kOLSu4bde?~wUm1PEVCV_y)4WiHc(2vH zd42>`XrSy=gkrii28;AES*e(ohdJL$ZccLJMV^h)x$l6<&~g+JQvZYKex0B@QiC5~ z$_%$(0$0(zcf9x(CDyT)OT>B!vJINoQZ$EJ8f>lZQOJugX9o*BmMqfmHVG}NDCNwG~AJPX}y8QN|QgalKFyR}34A!1>rikm&%h|%obg--#52R*oYRe%ttlmmuBp>aeq}YQ8>-6N$8GoM= z|M)ULoGCjc7Wg+({BM5TBmVpf{Pksi78_DgpG5p>C8O(m^8aB4{#2Qt@pLMBRtAmJ zuj6QuoE0R}fBlN--=vg&R=7xif`4=IuhWzNmKFHNm-%IsNE4(G|CZu^b8(OO?^r?q z`ZB+k$f7<8{;e$iJ^6pKB;|~@vGnT@sIcX+CvhsSZaWG5cAs~^+^0~nC7-n>>1wAAkysR zzK(Z}(efU5YgcS`*~x{>Pd&$OnZ?PonuJdIVqF>W2@n@IFOj7vE-NG31v11$c@(1h zwok__=_%T3;6#uWv0H&KVdb0vwWiB*okL}SdZ%-j63ACAV;8M+Ygm360SlJcs!MrQ z+`?1pV1Zy}f;9rHQhRA#T(aWaf=RDzxvF*Jm@LwySlw=}AAvyE*MPWFR3@5oI$IPi z<&WJL(M^%`l;`*h2Ul|O)oiGWbnZz4|1Wxzsj1@Nm{KBEnnG#LO`=rsck2AwkD_a6 zjhS>8L5Y1W&vc#GJ8kki#?;5Po+lb9tCE~JWwAa+%D6|{LUehoYx=Xlc!ojFg z}`=Bgs}NiCATCTz@q%Ybhe zsYPazVoOMnxNQcq6*AZ)RW+|k-)c(&#Kq36I!gTJ@9I`y9DSpYq_-?dwC$gR^)HJUsifx^C=?l2RWm8 z&F%DgJOlFh({Cj8t7j)i%Uy2JhhDQci4zj`u8dj54UG3s(+SfjOPQy~xZp{Jgpq9^C2j;78@H^xb%B5&*7eaL^0{7KzUG>cy zc!IdtF11ok@%9w`n{G9mD3MH4DHOalevqHGRE^?vT*kd%xTVTuKgBx{(LR%XCOt0+ z54?TP_1e2C zZuLVlZUIuIXBDi`2x?v^EboZ!ZsPFDof5t$(gOFp zl6+)>d*|jgdQN!m0a<8Rl$ZidLcK!6tVGi=nR#S(8>krK&!RAdq2p)pX15d^`iy&n zO;A!P;LauB{uinJ@UBiXPObyk2{-b=U@|r_Ii{MVs{jYJKb6`yE-V{lVDqNg-f=0z zutni71J7X4YQ?QTQPz(N>`R0`A;Er7^ENVkyHx8{7W292h9<;}mYACC4iM8m4Tii- z{I!VtN@)EcD^CXa_8kERqJ6%fjbja}t7~nu2P#2UXi)hZvClQ?0h1eMmJ#0yai1Z) zTm#%}0NibMWSi6)b6SiQoQ&K1G}(A8Y6SSqLc~V5qNr!J2gpPAxP7F5sX(qR8M`H97+?!8gAr5nS!LRFM7v6Y)&M_nDFFq_1~uqn zplw=C$nMrt=>Zb*tml!r{p!Y@NX?GvNx8l#Zwi!D9s}e7(2yqVdaihF0{%5gQ#rg# zI+l_+NOF!&$T7eH2GC)uxXK!IJD{Z}o#@Mmbz`xwm0&kOr2!H(-k_iB!qXuGIXS*> zIsQ!~;5A|5Cc^+v86Y9Rp!Wc^CZo7fM~7|cmlfPxa@vi+mT7$7Iatt(B`jVJp<`6X zX7O9AsMWMkg5_K(lCy$9y(NpO2HXLlYLCwv#tUM|`= z;Twbn&$}oFtR%6bQ|%U!oQR_)iSn?w7!Q;%mQrC;rDV3c-BHK2KTdLvWKN4-{9gE_ja-+ zthoP}X2i=8)Lx!3FCy>qttShHjZS8 z_Y&$|BEqX642f8$`M`Li1?jZamx|yl2p9|uM^wgTjoo7}6ZSB$RdwJP>PY@LPawnj zU9|>{I=G7zFRBdmM5Z2}r%JuM=cC>rpoxKZtzV9@6w13$^m~XnZw!^@WZN*G)Svm1Hg5yj zbTu+ezt5mWdEMZEIM;gSNM8|tzT9#o6w~`9yaC~%5S2E{E+k`$&4KQpqT3)rw`KDY z64yw)s;kRFUELbhx*yVKV0~DuAHH0w31=}i_sWkX4p`ivyH9*4T0^S0X*f*W#F(;3!-t1vm(P=EE! zOFGZ7Wl~e%8*!Z|uGy6tUVNIsvW3g75iesIb_Ce4jAeiwd?ceMSF36#Q)#=Mw=)JO zmD#cCFL0e|>G?tNeEXvE`e^jgedGmXH}hbG@m1WOD9l6)fL#6co19{Vb~SP{l){rTH>Wi@(w7hNHLWen?Epq=&5;@g=1{o*8DZ+W99<355|F>OuKe)( z>94Bk=455IfB2@>tt+`1h*_njIl!^}d>zKpkSA|{P2_r_+Cs6%lHgolu(buV9qD{Q zJXQt`v;6r)5iWCa7C03x0+%1J>Yv~;%(KRo0Yk%3=Gs79cY!ONNgKOSLOr&9aE=B# z?rXH!lHeXB^f{pYWka*pRK_iqG(#Q_vSh93MJ3*vwVdwVxYUC(iH2Z#|2J;RHkaHw zSo4!r!!7LwODV3|ELhQ-^BSjb__h%BC(reuHrOk`m|9xd5d)=!Go`8z88`1h3TF31 zin~eMEbf&De#Qv7xUfw;nRq?gP3e@D6QL~RG}fRK2+jWviu!CtU78W45h5xT3Z3x% zMXh`g@TKSV=s5(K@gH;_1$INz5&Q~c^)Oe)jkk*Z}TdVY& zBN}y;5|DA%Dv|C9xQj!y-?MS{JWs_H(lXV#M)hY=^=}%g6x}m7sF-m-oQRCBEaaElVrMS`@*Qd)K3iZhjXa29P`eiHV$g3+} z$I*)T%V$bDE?@Frbv#a_&qA8e(O?eBg&>U!~#l8wjqDxTvzsQ+>f zXRn~uiHhoYiM64GwSxxJ-F4mqjbpi_91E@iV&Lf|VBQ*=VB%9Hv#+UNY77nb_0wwJ zSQ{uQ+I)DZHK&W|6$nBN9onqD6xU0+s+Ch;krWR4nk5xQ_$zU&tgG&H2keo=^i4@yJ!Y-8X zKa0J-F0&$hg28w1+qWbEIaiydowp6^%~cH+N)56XWUbAqg?^l@(Q+ z7%V+@yA@HNaj!fqxfrePuK(glP%APd>%pVw|3Z;7im9R~_rC@k56sq>O;65l z7gSZO)?Xw&Pd0oVYtXh>_By66?%+;Kh`v~4d-N1-u+4+$Fy!S?%Gnf`L{{l4YIa}k zXm_;4X0qsQ9YS(Hm~HtMl5weEFA7#}oD9|}m@0n8b&gXg;Rk3M=Ih#cLHCu=c&xB@I`*}bh^*@TPs z-xyr?Ga4=Y0l~gwR_;l;mw?#8ln~!lim#dY^5w&|20KMM)NpR1B=aB0q|~nG?@_eH z5?hd1(DmAi;;w$yS7Nx-Gt_w%j*J-&gQ2*J*V;WwEam$v*GU=oMA@tx$irH-8z7ec zep20tc{K$8hyf@A!R6(-eU*w7OHUzb<~#T=32D1E50SLzmDgFM;QtA$kDeX>*>eJD!(njBLc(@AsAg5 z>=s~l8q~c*+3_W3KB1u1`(hjiQE4RF+?ZVleFDKE5&Rm0^2xt&i_cK|gW?w7AnHfy z7GKIe_`^?ByP-;LY_N|cXRRP7<6e9x&TL<<77P9DOpRD8!{VO7J`}8cr))j$vyivJ z)4|7LdjgUPvu&xW!dI~`D2=kIBfg-(ry`vSX=tkIeU7~gZO34|V|1sQUS!ORm(5Q& z3D~qi;a=`-!ri+F@3!KAWYg)Z1Mcmf0vyWNSCYIZl6^DbA1V2Jg5YZrtP24~)=41> zVNKK9lHcE53Z2^k$sJeG{HGrVnV#r(-h2uEUd#*sCB18nm#j6|TwqM+=V&_rb@xv+ zNdfaH7)?;+;))4kdZJeQEC|JqlGpC#Q6V&iI}y99@w;4>f&XTbB2L> zxg_mhqPF-AwmmSd5cq3=H^AcdGIO8|8vHE2{zg+B60lQ9fFZwsG$bI}lbm!vDONjP z)X56XN=N@=Io#`uk{+vz{(%I!9B~Z{%-uQDRM>F+%sQI8;`VaZ^%rd`w8^YXT`%gT zZdc=4A}5vm5|r2IpKn9js`{`Zkv-M*0+Kz~T?(xHGAAyGTQ`>f!1avJLHG9GB|%;{ zdlA1L>wHrsbi@y;^^2|6t2KWEanyYQax5N|W{ew2(KkBFr8ge?_Q8ya+PbmG?lZE| z*wI49FwSa+eqRDrjb0$bZ$#cs$k1xx$8X>GlvD~ka;_a{L>CqTkoMHAchL@I*76( znZb3+$N{#$6v%cF*}Xl;DvYeBv|UB^d&sIP)pGfQx?oMo^Mz=45uDjW&d-;CjyV|a+0I%wAdBT#jGKR&Q8aux^QI3&^~*h%W_$( zh!^SQ)QzXtrE;&$aK|c+Jm*I5J`(B%^$`1cPlfJg^4H{5hvxHFqP`7kbky)AzLmS+ zE482;vh+JB@<)QHWcG z&?*a^azLCc#P5aBrRq7Ujkrh|aHj}&ws5*CJtwvI8p2V2yunTtdIabRvsJ~E^>qPv zns7r5rrSYnR?2Mmm~Gv^IKW`U%sgbxdJGDy%`;%-j2Fd0 z!tG#49kU$VkQvFKn1ORcN$_St&e^m2x6K+H@5!q6#g{WeHP^+?sEhX4FZLcr4RCib z#IWjS$p3&$^rd6*BISEA^{LTgV9m4M*gf!b8c>f3rS?7{b!3og$Ul^%7N?WfrDm{` z{I-$aoT>vuCi?3nL1V4^MF+u7>tO13k&~vbVRkPGHf6>h7j&90K9;e)y3PGMB)>aV z?48hCZvsT0{?tS7KL_!Kd<&$vM)8)C(>R}_?}+&x@IkSY0;geaDRG)c>52Y&hPS1T z(?=IT;k^`c@R?oxE}MdD*)#eTD4UmpU|pokQDD03M_0@ase4~kLqs)ez+}d*UhE=4 z*E6v^qRhO(gFg_sw}Cl5N&nvE-s7u&{-O$e+3n7%ScrVFDBoIMiky8(uhqvw%rXR} zlq1{Sa*^%DN5V}L&R&GJOgf4l(lW`A*Mjs`jJ{BgSYFqkJxlFKel2B8#r*jnz9gs5&O`Vc&$D}KQsEu z*AKvDu336E_V=9qn@pvzz}ss^R!Bahp$!_#H%{~fXrIYuzVqm~O|~KL1?kNfv5{Lo zQj>n9p*rIpXqFSa*sZdiud%GfQQ^Oq{G^VYiyat|Mz0H{>`S5U&B&jHQ2pE#8L-<5b@SSdlg-D9fV`6y+<8q?2$wQh8P*15w&aDY1? z1P8j^eK7q<{UFx75D6n6oA7#?|L7jGnOhU0Qd*6GLp|r0hE4D#Q{%=4`dW8Z z2-dk1LvVmQDg+0*;UPH44GY1|+)e~b<;kKzjjQA69WV=lB*aaOW-#+~LraM$R% zLa^F>7J@bI!w{@>Z-!uPA$YXAmSB+3`z2sqDQ1accuYZNZUc!NuHUP|ZcYLHJSuT6N2Apm^V}J`SE+NmjUl-L`UCy+p<%Fw z^Abj1z9Aw!C=Bh|W^ED&8Q;RlfGeKjbgmC|eDH0crnTxc>Sr(N)u}dC<1*hHy&=uV zaT=3^y~oVTItGt=Q>fE~B1KPvV_B@sxIowju=Ib0#-+AxK7azrts`~UwR-%HKz*uX z1Q9;VvQ(q}Hgp_rzp0KR{4aTqf@5nshVV^lPQS9)KZHkUGajj4eWsklbo~l(K2oZiQ;w=?n#z)w3 zB)=?LcN}HEd&GspxlPU^T}J~XU8DGk({(~Qc(M;NX6`t>XOK3qDFs|hAa9@hb2sXC zG(n=F+2YP~6sqVLQ|1}#gWQ4W_#HtqqaxLDsSg2bDTT(BLgRg?GSzWK2{w^XtmY&i zly2=l$f8rnH6;RUR9DX4UctV0$0ESBc~!EqU4#GpE37;fA!kmm?)Z~_=cu6F5R0u% zb=(vO(f`&mbXplYJr1JH-4;YeW+f^Vbij+$3=Hp>0YD(KINPI+;9Z`kYB$$B^6mr8MV zn(C=OEMj*LX<8=6Q3=MoV6?0?Zdi5)X};dwmuFL8PB#f15(Kh7Ms}WK;HL4Z)GU_U z5&VM$j|Unw8d(x75%8WI^Jd%)65MVQIwS~WQ;h7K>cQ9W;}ag*m(66A4Rxk+%wYF- zSx4IganhDiKm*|xBK&5l2nV{O8J1C4M>cg!zv)N~`rXg4$|qc!pu!~mF#gQAt}OaJ z$R~wb`hb)^LUzvdV3`{5Im%bSoP_L%lNmr9o`gM?T?Q@yDA5V#LgPYf^af`1PLdW8 zKl<8wFtt|`=aRvNhUuM$SVqUOgk`Ipl-7Qvl~*Knb^+c^`NAhl$u!ForWq>ox4)2S z2Dv>LLYZm$a0sen9y$fn{E5MyH%+YR3@L1;dG{<#vye}cAybfyju_dw*n@=ytRfB3 z0{``(|BB^x_%9Qi>YQm`R2iBwRhdkOn&R{$so|sdnBBUKmGe^NsaF!VBnf9fH<m$G;9sT?95L+#XCKGC!6-B<(~$3{&E zQv2g$>73IrP12fH#ctXC3JudT9W(CeM+-R~sN2=Csc`s8QR@peWu>T;Q1e!b`j{1q zuz2e3BvBSmGRmnan60$#F~e&eIXW~A1xs4k%|i(a%^i>S7@y2CMwW^9YXCiVB(i9{ggpm^U-KIqQaeHL`wjjJ z3%5Dm`?#UI`G!Dzg@`8_F+*`mp{4qAI=KWXBD$~)^effVs-!RRulbBxnGYqt9vZEhXj^%8g zaouiQSHV?WJqG>JKzGD~9t&A8RhnKKsWuOE8MR0$Anpz5kZHY^TyS;xo}ke9bVWre zJU0=3p@M4&(=%?WIAumu3J_ilzZZo!AKO$;*tjM+rjcp3eV zwjT=Y-z4aBXIb01w_14Xz}`Mh7Kaj&zl-GGka&xm^h<+uLp}=9OE2CUG`wA0*O_3i zp#dfW2paAhWEke+k_@lm$szhXBxr;QqL3}OYHTJmMR!anI$e~TK$%c<{s*xc47qwK zlH#As<)Y9yGv7}oVbiZ@BGW{^7SeW~aGl^ZK)CofA!nDfnBtB? zAHaow|D^5xKW;quwW-paRLyc_cJtz6zCl*-fl!x=i!7Cb-DMfU zn*4IIIliw{nccE@rC(#Fr5d0Ii@@^6#n#a|BqC9h{_X_{b0QcotN4KSb5is5h7TJK zVNTjNyM44BL>g%>U5oOB(DvXJDi_btf+KL|LH>h#2)tnKni+#{L{+9&=@#aL$} zJ&QL*)&Y<`v}=>^r>=%|@mQ@7^aP65551&)qJ2#gq$EOJQ;juZf&2kaUOXZ&>=$o5 z^knFv!8mvfU`ErfSl{ga(VHw_#j6sgoR9yY=n28gtLxuTrp!(UMfZd8Ca`Ut71B9? zSk&7GO{?vjHP(9iL9@iSXOt}AO+O+!5|L`Tb|-U4afQ96VY_dg8(?3pb(EHIJkNR2 zhA~eiJht-c5$8u$hNyH!hBBN;@D-_Vc1*N{RVcOTM4Pn=hJFnCc|QfTZ@vGyD+L~X@OS2H>KSc}65ZTabek-ph+(J-x`9a5{z51_3L zL{X?p4Puh%KKQj(Ze~f`a(-1(w$o&j23}WxpVm8Fa}}DKPgU9T42>^@D%HQK4bw(% zYD<7~EYm`RGf~jlg2sCo2ABbW>R^lT(ZaZ$GtA$?SaG;D-*Br2W7BLfMv(UW_YyYN zgt1F;Q+G4}O>=){G(v|>HyiJB*j5GIg=dm8t7u6J6Kc1v8p&^FC0ij@{W&B#+Jicxh8mnox~J)wt;)G_rabZU|!4;_%6Vx-hKnW zty{;@OduL|Q9Q*YW9-c%H8ER7!_?x%+AsM{Onzh_7v==r7-$SJ3vwtMB`tfka>~up zaP)!|({MX6M29d1wls)k9j-s?l-Oc@^lvh=>H5RmofJ9`W}B?Q5;& z)V}Y;Ic3N$CXqg;qLFG{;^QCgKPPCFv>kpLr*`yg-Iem2Z)|V-z8~vx|CC_8fYDgW`iqz0ve3DX5{pydn0`FrDaVZPUB=jvLIFTW=#6nLK`p`mJbzNYg7YMyX zNF}7eMU-rFpmimTIRe zv)dK#@D)tKn?lvPn%&w=HbeKTf%Q;+a>n8wv3An3(>!QPIKsZFy=Av8T@yv^wFPkpu}AbKn7D)32bR*NP-hHuXj?88LCfqBMf(VtAmE&!N&T>3{A?c6wUp z4s57HrinjnR@kt!rGL}&7|YGvQ;DfH7?u4hVA0k}lJ*=1vHBidfi=XL$2qDdyST(- z%3r*wuB|Ig;MP6}S7y@hysah*tSfKS|;PxmP37<@?YV=A=|?SqB8A-&gpZ2jQ5K(kfEOzZjnmcnKFPw_*|P?7jk?fyw*ZU<^iP)f7)>zD4Pl}0ILcn-62+JM9iTYMTuUj8Pv1i0ctvuzI{)b!5)>LI3NR@s*d7Ac z#L@gQ{++6&_ROq8Zn&b;B4h?P#QiP0OeqTPeU-v=PMqn`Fq|Xdk5-c?E&d!&v0xo@ zKb#6y%r4|cK|YzsAtp+r@upGX1i>l_xzm%Pkd*O}2Xh=oNi5{D5P21InnMIFwRK~w z$kOukf6FL?OX3Q-ZA)P)a-pF4xnfkzC{mDCUYDUUW^aB&&QOt;xx#W~PEPRzh2%xJ zklPeN$8!eNcJa_xbq1C*<-&#=9&N` z@Vm!&{TjZ$2fkshww(OgPj}PN*3YwG|Gvuc4H?&40V}_FB6?3@6|RgcT3DuKP1M4& zUdFvjIGCp>^IYBq%@B9lsPa%?iQs1l&QRdg1i~KV8UZ3KRTy9|0CXO zQay2B33o3z-{_k@f1MxeW5~aPEa?-St(Zy`EaUD!5(_ogxjXsggvsCe(V%tC&7xNz4VE{+YyiRX|C|@6)G+@9Q%Y&D-`FO`9KE|A zT0%_j9w^!@o=O{uc}~I?-zuPX3f=Y|*bB`fe>VF=uh34w+Pyq$Xa0EWOjYY4oNJBz0O|2PEpXRmfeXwUOH%Z{-6 zs~Q`HAU=aau*SU_g0*gL2-dmBLU4e4AOr`xI|%j^e_cQha94$3r8^=7xdRk}HExd( ztaaOmV4d4E1P8hS1WPAHVm$KXd9V48yoaFS+&EjC=Q)9&)c0dwwNyrwValkZVn@kI+U?RAPUA zQ`_!Al|P9^D@mO6on+@N0>(yGn;T|bFprcEO53<<6~nB@@Xz!gD*Zp?XqEK0br}sq z6GwfyEmTW=Nl($pOJls{dN!bj-oW^G7yp}lL6&=ty&{|J-bLrmM)^OVM(#Z3GV$p3 zKIo`4du!Bc7fK}RFCNGcoGT_ZF3%^(;s-I$WqdQpHr$_Rbxi>q3s2G)9rE>#rLtCmobO+pgRX+AyT~?sjfG7J-*@YQdUi6bU|OYBTcOh zKSM)or%it=B-Lk4!?LUsuy&MmG*~;X!vasCffr(13k`*5Qw@cNtDjAcC^SrYHg!;( z3befD*;KD$ANz&+4;)S@H2l&2Ui)mS_nd}F8p`DxCh4riMu^KdPVy%u`dOFoqZR`= z>)+ilsrXi$#{Pwdn;4PwP8E@_P%q5Hpcn=McZV_Oj1ZXVhc69}$G;u?_R*ETfn+|; zYj5UzA2_FLxF-=00+8t+=682~HAt>c6}R%Fy*=sB66w&GbWlt>nBNB()-d{c*#Bq{ zqys3Uw8S%OPHqzAQFotknp-He^WoRkEa*py*BG#n)33%>Q)8leg~AQx;7u`=oZQYy zRZ64WGz*(8a?>qL2?VZaBuVT(j=KrP5i96{GYnYB=~v_r+PAxq!riIL#n}SAZpm}2 zvp8JNThvzL_M!m$imJacMfWZ$((bcH_4*f*lTBx;vG41yOmJ2NP8QDL^b|4YKaF#D zah@yAK5j&UQx7^?oSxHD#GIEHr%nX>GLxP-4vU0hyq}8JA8jz~cX13bK>$W*6P0rN zs}Y(`KNoU(Qqf;5A`CtZHHOcPhZ+Y++z=70Z+< zpvh?5sZ0!mb>F3r3n}dx|J*ro{0)l#-+qv3QVnn~0EUN2!LflxjZmh%OROQO3~mmR zkW1m=wQp~S=xf@vBzs7TJn2P8nD_xbU>X9e?YM{tOcA5pSkPUpalerZP?K}xF{s;s z9PF(3P2lPZA82731*DT(lkx@8F*@3amVOsey7}~&`Vgsmnh&)MuXR5pLJy4zXOp(3 zi&Sh@iPL=gVWgRYI|XGhXO+9sw6a1vnCLUy;JnD=`nW8CxQW;zJAiwnqdlgt%P25} zHHm{27{I#wJ_L%JWox0@*;B3VwpO4vyM|NJv(?!(-2jiObZG){Q?_H$wy~Oz9V%5; zbB^IJYSy^-ePC7hh7Y9Niv;4ne#DQI6R&7EmDroHsal)Kg)tZPa$;`-KP}aun zQlT&wVoeJ5%j~NsWu;^mYW8C_Kx9nf^ed+VGW`4x+Gh7+o2gJ}5f&lVprjZB(BkFJ z0murUADk@bHnA^Ug`B7*LjIA&uY z??wNuBswH|rGl>wg7qpz^rwVi16)!TTonr*UJ@M4^Ivq{J&3+cqW4OOHo%5u(bci& z&sgyb<_IQTsn+j46`P|)q8BYIo5KK40r2JsW~KG8qTP77o%Q0BaF5(4H)rGeNzFUC zsb4ksGxbgW&EhxoD5Qz7s^pwp6Dc4-lSs=KL-PhL6kaf1Z4edam4oa_SuZoownhpC zi>aS-dx2pJIsGbbHhU~?c59JrYhk&?7Pg(Hn6AQNBbIzY%4mm*eW=N~)A=amoY70y zpw$wSn*aYOdlNXT$Nv9+re{)K6LXo9R$Z{h)W9&56sln-RXHJgY zZN2TXXP**Hl#1+ID1~r+oDiae=>L4Zug~YqIpzM|{~wReT%YT`UhnIDt)J`jzC3*L zih`$=_T*n*P0r>&&`FstMRYLQs8fkcEbVm>A9NmhpNu8S#-hJbtXHg<7oS)fBwXdH zh5VhAJl6CrGoJbSvM(unMfz42Jax7wd&$-~Sqx;xZhx1#kAFL_Rw%h)wR&T^o^x=2qq0N$SHv1j|@=%eajU-%n^__5Y6&8&!6SLAwC;GX0QCJ-OXA$kOVt zs@)xyR%bwb8%wM4Rl6kV%!rs%H-k(uiV916PDPgXoK`CGNYZn1miC+$k#4C6`eJQ5 z@%Ht7TX6N|g^VuD3sayKynVIYtH`Z(e^mLpndwUyObl6BG?vPT%;EkJgWW(~w~1*- zA=kvrlh%7Na??LW)e)-LO)X=kofoZetB_ep_yI$diTg{03&D#CE#n0vtaL9ynAg76 z2>Cz2TH4oG+E-o&(Tc)^~`_n4PuHj`QH zwp)i+L(HqKcwL^y%Q8+9ujhyMsCEfbg=!3oN$qaJeey^xV=FSWMLlpGneAi3c9OYX z9-(FY$gxf$(z%tp71U(8kUs#{Qj;tp(W!}c(K4B2pe1$|q)hm~@P9tlpCWf3f7Zn= zt9FeZ?HT=PXmF zCudhb|D6^Q_7LF@{`{wTzGb{ihU{7jVVU z$Sc-chj2zrX!jfHPSM!VmT?am`Ay3*bvbCY+jQ5pwLd%NWnZ40m&eO84)wfpP0KP* zGF~4t|0%RYpP1L?D$tgByey+!ysT;UC6!l`TL^u*%dg45cXV90h!WK3C5rpivSG1&VV3g#L$*f0WXaBq{f8uS0;j+UrolD);Euj->w5fBlc>-ts z-6=b(?Q61_`6edVPXtffLDmxY7!;;*ZbtINe5OyfyBw~6B5xojXpf+m`-Zz^{~zB# zXiuiGbc7%ON@~x}yrL8I)ivjBf|Un8XMU{gCLGa+hpDc4U$AGN6)c$efQChj4P)8A zTQ)~_&dnsf@3yTy*T0+_%9Va)<1flXe#0ZTtvxRsgKbPi7R#3Tum){w$A#OG&xy;% zF zcMDM=@}*oDzAmg;oa?~-V0&Ts85u2XE(#y^Z2S^Z+vtO2GPjy92viUD-8^--xfYi3 zV0Ag^@J0xU5zMcTaC8+l#|WfnP7sy3i|zS5J-60#tvz#8Iew=iMXQ}!4XKK1H^M-6 zI>m$JJsvdBrx-LgGbG!+H;<|>=TDWEy%Wl7>`=!CYF)$2W@XD_b#Ifpd^w_f*$WF| z5Uq@>-D#M&rMQXgrS-hdE=yz^@}iVSaFyl*&~Xy`=JuVXd4L%nQ1E%zn=ejwC&gQ|Okymye+8J$dzs{iP5Xpq)oCeyy^cK!s(yZ9Be zdHju;%^+Vs?dKck@$Mm+4w{rxK@UI#kKDL24vrZQv|-Md?zWV-_!x4#z-T z?GENQvv-v=tQ(YBziOHi11QUM67?$@h=o&8>PW}5FOd$r8|?<7Ew2$~xQcz~mZMFx zmbNZ!Cfm+S$CPt~w*)-xp5b{HVdUsVkll+?Rx=3K`ziSFuIA5&IM32< zRxtf@?(mzH_`Endf7}+-VyP;iK-9YurSqKNy9;q)+^ZY?;TeeHJcPji>(gqIGZ>9z;?>qiL9Y$;`%;1F|LA#MxU zh_809@vB#A9WZKCe9?8lNQvf}n8037-DU*07(toa!ps<}dRlWkvwTdTZX>J}K~0jR zD>3#lcIm=AWlHhsaEPI<66(h-<&)lT=b`F5>#%bR>f+ zQ&;KaJ$lwlN;qdKtC~sG9WxgxBr?ZV$>Hh;Ht?Z)*+Auts#3wp*^L~|$Q5OFuUg8V zy8b+GuIB+&Y9sZ}Hhe=)2j%prl67^_YuO+@m)9t$W;jZ_`eMQZ>$+ab+mAf@KYpcN zBjvIyiFNkw^R~tFV%*JyyRmSEb{=Iey$sF;;5BSt6F&hK!nw-qV!dVLflDE9VT+eU z*;3xUyH2)B;9giKyII-yt&=UQxydcrW_BM=bqSS`YX!2UV~xV9<+?9 z^=)hSaNANOJuYoq;8{n>8kH(;o;fY^4>sVdYXkQ*rixs-<`v2O8h}M{YdU~2Zrax5 z(X4lTme>4>?N*R`>61~eoz=~3oXGaAAKFlvDNSTIt*hrnt`3`L#wW7<>dw?D+s*3x z$zN7aR`$t>>=rz~F6>^qzjd{aRc8)NWVfsvD(v1spCkKfW$%*6_TkxhZ(P@lY@Mjj z^iE_quUlW(o78`8*lI!e(fKNQ8_E(L=!{!aVg;u(?IAi=(5v>J?uz>hjul)j+UImc zCJI3jp9Dw?aEAf-+{Rwl+eF}J4z_9{V10__RMCNjL)-v3Q+4h&>VVz0lhDRi0(Xnk z!Q#|Rtod51&L$7BpnC+~(FApjUDxu4k*Ar7=W?&mIv5weM`F@g6w0(Q_`fLd9wb+x69eg zBeBSbM1P5iL?iVScD#Uh1!ky!;^PH|lBrhmnmNnAip52Vf<(JlaA@89a1QB zQ)mUz*@Zhuir!jl&di6qIh+s1hH)uoNQ+@N2+1;LMaeXfJbn)I!9&5p{2VZEjeeZ@u$b$TXdu!)2`@plZ`EHcCM_=yW{n<3BHn*c=ww#9HSu&ve%ct1d2;bA#)a!cs)nk{9t zivh=k-#icz8szjGp$Us)E3d4sxk=iOHRNF8ENrBXG0MI-=Fwl=`^G$05WCKF8ldb_ zvRmBYhkMy)h}_S>U$e#DxNk+jdGQ5>misojQ7A*tYM@w6C)ayT-9KU(2GE-Y?Opvr zh2c^?W8l`JnkZh)^q?G&QsDX6oI413iUD)xe1~z-R5#$E03&niQyDrBy3inbCXGGM zw7ZDUCZNWqO~p(M(lN&*GOaE;jdj>fv|qAEAGNiUd7e95hoeDR9vf<~uwK;u|GwR{ zbHuqi-yDYsaG%JVIlaByN4>L5-9YEx{6y{WN{vy&muIGgNfBMjPt3*kfyP1*wa5`Q zI<+0q9SB{FxQ{3YNspnO3pN!DFcbi<#;w(Nhbps8P1wSxZ5|)nNBWMvlkpowY+`u=zHZ693p}?09%T=IpDB_-q1$ENXYWrS~NXEH1FEZ zer%c_0f$;a#TGb9IFI|?|A@s!x3sXZz#-`Z7LSXCreHPZa903~`?VMDiTX9|{>1&- z197I#7{vYBwQ=T=KGXWO`Z)6mpK1NtDRE|3$_}~pYX`-dgUBrC*N#(pK4ZJyAN{s| zZ3NiX5DoZ--`wZ8X!tyhkExdC{7fDSru`M{hvoKav}P}W?)8wMHY^w9_kxO5$g~?6 zt@_22@W`wu{)auzG5h3J69t67-ya>svM3ZiP|>t8}WPECMkg_xVjqOvFJ_kyiLgszl9-m#o$9Vt~f0gw4%9 z?lc~K-#3maPNiFcM9p^X3RnAfJdv#g^JKS&5wi1EHr^{!HlCe0uHYM5w-*d&WjR4L z6oIpTYwg3d2;?siiwmmLGlUbPi7=hB$O(?!`_b-e?dIo&cY9~)Kz&Wi{Y@qyx@0)V zrC$q^Csp2ijmh155%Aw_^$S%{Xsc&MdkR$l)mEd7B@13}t06q*+iEr}Wh)=pytuZP zUogvzGih)w6IlS!PLq2e4^Ui-$>qzU@aywvks&}#F|L3j$`!?td4Qr?05Qd$`2gHM zUa&XtTEtIo>-2&|n=kS!;IUtAE5E96itmzWK0D8^ew3|tgDT%v`k=nQae{?6(MCMV zM2YOS@}~-S7p!C>YnzjYm&NO?HG>}24DwXwlTA}eC5p-#OO@5w;Te8+ombbPu~dL* zP5dx{wFf-HDW*%Jd3fycC5*V?-MqJ`u34<6wwvlKhujunv_sovl@cfBW85 z)I&sFUDK@{6pWUpkI^(sn7H>I>aqQrYa_8({WUOs@yl%7XZKY0 zSC;J~FZ=9Gl>Me8Tl?B~h z(8+>o*kF^HPojhL0CdOh(fWtMn(t%5*80b}V<6!hyS(+!KxuJ0TKKC4T^p*+)kBuI z{?V%-II#X{!>O2xbT2m`}*;Q;W*(7ls&Yk6k({`LBEpf}~*_vh`UNJthL#HX(*hRmW{qE3& zE@^}m+5?3qS6r(#lZZDm;wK=k?Nhsv_pzTSnd0^?2E`X;lqi2*hE6{XmQM9SatVpX zQf+7j)0eU_ttg;2>e?v((N$h<+MFYIm5{@do*@1Bm5Q_ z;b;MO2N*50mwBVn*Dps(-PslfMOqE1<%PyFw)BZlh(Qv~N5yUOc(LdJi>OV$j7ekE zw71n$1tq=;&Vr@Y z%wISHDy`Xs+CKDY`v9=Sq)*u2%BQul@al#r+*L4Ep4q<@^SscNy<{pQhk zq{-FjtCN~9_;C}lR;Ck1Lbl>lcLA(2edqMGAjd3dgn8?d>!r?>U&!iucWMjPAO9V7 zT?RZKAYIoq^{MjZ6*$y1b*QYkN9~T8t~E3DWy%$#%eTXcHm=eo-EgUeX`nD zX&ercogkq8jizoBYxak;1xT}JMTU1eG#*LCx?QM^0(<{QihlCBaF-kZy4JLuoG0Ed z@CyQ4mrdc@)t2JwMKHsL=kN#B$?jS6vdlEYIH@d~>)m3tOHn2Gh>j#QmTKgP3tXyk zBQEgKyQxtgAEfpp5u{(HY`B}73j1&mgLMj0{dpY_q_4pgg53a2{q6ZQy09lWRgal< z%8bL?U96XiE4R3=n;B&<+sbloG2ZD0pi`!IWDRCU%eddQyyg{^c>Yo`UuNI6L^9iWzgavRkb7UB)NBIrQ4OsV>rz6PYzOBSf!8bMx}R6WRDDzy?|ueC$j&n zzdA_Im(tw~w{?(u3;scR&92hYk7^4A&n}TWYPoGA>G3y3?r6Yo0NO~pl)zfn4Sp<| z*<|xsR3h7@j)lDkd?LUj2IyR@zz|E>+;b~wHVkUfAQwm)^OF@p2Kp1<~jlE$iH=k+X~eFT8#i z)SqI`vg?+rhM*Jm)Q%}!kURre>@cP76&$$QX&suaQV#owG3pVd_GLpqNbg?}G5VZcAj(*8a~GAEe`)=Nchuvp(B*441C`oOF)Qq!jN(w!pa6ODO}MO*RRJEtXUAgg0Zx4x%R zEcX`6KjDzb?jEG(Z7PP#cyxOKz`VH%kx{>6%UPdaGBDG%W*Mp+f4E@JmNNPkT; zbnQH4WPJH%EOB)K)*{Nu_bIyGZBj7Rj>ey4?V3$$S5JDSC*B8ylpuDt~$= zow(J{Rg8o=*851Yt-!3BBdlZ>6=xg+)Y`?_*ou>*+YIxCKhcX;$>Kq3pRFZhy42Xo zQ%6PGI9H_EIE`LjMJD+iH8R^#i-m>it3ti_sS5QR+*lZ&O|AH1Jpku$JVF!MJ%ZFk z{3J+U&`%S=oaJ2;gG9BP2=nk@!#pZTZD98P33g@xom0+JZ2!myWrcY!9 z4Hg*TG^*Jf;chsG7fPs_Q;21NfD+lGgX9nrR`jcxm*vPFw zMA3`kv2_<2kT6=R%e;?+ZkHyg%L^*tJx2ex4BnZw9j zn8>cG>*hi3dU(4ko0^C`b0j6x0%j9DnLUTNZQ2#gzb;f&tmHSt)#IS8iO@#GXf-PO zTZZ-EaZ3EVdn33dheSE*HB;KPssCuH55clLiCc29TO>$(TTf z%_2Gm$=Ot$>DfxlKkQpFj-?BK%j()T;b}#gR@*hp?QSETGvEET_;Q3OW3!A=d4&tv zq~v^9{=hs@n(c%vZou+A6qh2vl9i)@HUw1d$LzN;gzIl5_occ*v>$$0P^zJmqf!}g z4nXtg)#09Ti};yA809AoUr4wjJZb{Rh8DU}sK)Fgvx#M{(RSQI?TqXcGK3I z`q;KGbjQnOyBoKmL9z`A&A2uQl7BG5sS$~}I}XM)K^qC&w>XsB3OcvBh!=sF$aW8s z^YbaTS%)I4mix1+=V1`5u1AR=b)T*4U)~^3)-Oy2adHWGc2+d^gB zLvphNk^8P`{F{E$t$TQl-GCP9!(IOt>FiD|aD=QzmGX8QlpLg4_v9$nAUFoZET_4T(q~zzYmg@_nMX~P0M;_s_rI0EpuU8 zU0@pL`k>sps|&lycc8et{``7F^pp)&vMW|4S7!f*q#Ino*QRo|CAWZSnK_Dte1seP z%~b9?EC0JHzfI+i!~7D}#yzEiOoD$R+cQX>Pr`cgIm{!(uN>#+Z_N#|+6ZP0s%GcX zjEv#IQt%cl{_hO*LHg(p5%rZ3^#W@`uI5Hjm*=QQi@J-+JTXW;!HCyD@QTRwPd3^` z?iy(GYC(r_!cr@NxY3-NFqi8DQ@0*J;hg>|!%0E%DH2wOVmQ&`(Lvj*k@#<1uWiKf z>36V6o*2u#Q<*h3)jwE59+$o+8UH>(>L5$>3)1_N$gG#hZXBc*(#vu_tl={ooi?uL z6ec@dn<=1%V#qQfNi$`}F=f2()S>?qo|(=DI>JDjI=F`g8Ujey~9wFO?v>|o$ntp!MLxAf5=#_ij`|fnyz)xv1C&oA% z3Fpk1cyQfTF`%aaV_JxhL(yv2uZ2Z#cP#~>5l|)~!?9aj?b?&$o#!BGHtf0;&ZB*p zAX!W@)3Hi@dyx9Ay_)-JxN**OhcE)Utss|$E~53ZtuxN4l03hk&6yXuu`wtSffl)i z9wfpG%%7HS&_#0Fz{Q zv&u2bFh&N+-AGtY#!E!-fy$UN zf)j$|MKQrV2(01gWa}cZi*yatB7B_TToapJ=Z!l6XD)cn*=bVrn$zx<-Qi8il)D!o z{SYJBC9~^+VjO0*pu}^hGXf=jizoRn=`CWrt40DtlbeG ziRBdy!L6X$9T7StpQ-D(t)t~^Ym3ln+XqKc;n5n;=UP9tH@TUuu=@>LU zr}kCmUbJSWsQ{k|sLXq!ZPk-fJk_hCO1&i+rrY^&C~$@M|sz7WE*6ID^Qt3`sbgC)+|~ zyNm2`ktMgxmo^z9tAaJ-SnOf0jufBQI(Vemc6`^c=vXwZn(XQJ z%4_|^@4Cs0d@-bxy*Sn`&|xbubEx&`+R;qH;g>~$f0F&}2sjoTSV zDL6ZC;8z58$3rTdQQ)|@ahC8(HdPYY2|;ok3GG!k)UOEAr|^*TmN%H4B8}~&f_eTs zl6tz>+L+%^cuav{u(`#pVeV-Pd`>akVFyVbnjt-Iy5=)^EQlTgPE-#O! zEerizce)`nuD3L;sedy_zemz6v#Ft4BP@CgoY{tRYLL2sjlhQUaxA;#Sh{D$aH)`QHssnM zIWcDU9@CeoO)p_w3hNBxwEB;O^s$B$S>#p2QwK@lp>uE~mlngl4gK``1r4KelC?-s zGv8RFgWpi;?FNhFD3NqBlCy$jk@07ecwmbT!=%HHy;STogVd^aY@HF30i6DZbg9 z7T|1sS%lL^I3vMv*PvCd%BL9nMPgrG(@!}4z^Qo;ecb+};HRm5M_PnCOvPDG#nHZY zko;|9)a_@V*9FPtdf3Q+vbUU9GsQf1h&~3~3O)_KSMT}Xi*tEHr0RB3l=eYNi$UbCS#mU$lq!c`!%b%tTuKj8l((CeIdRa=Bq@>i+)KkZ9`uzP51I z)V-~h-sN~*)Nf2j8oBOb^+rh;C$i`A&i)Tsze%JF3FGR&4bo@feKxv{tLx;RLz>_6 zQQvmHH2#Ts53+OSxQAyQVPgi0>u`kOT=zq4cxGCW*i+DinN4Xkq8PE*Esc$Hri|0= zWer*P0%WoOx+k}2^R8J;Z6Bg7DV3l}D~Yx!7QVzwhD7$fAo&OhGt}>XURAmjPO*UV zCE)p45}>w+fLa95RTd!JBm{Q@zZAub9-b4Oq6vr9CasS5za;1Y=OU}N#CL!Ris!x~ zBizccF5pEGiH37HxbYvdH37L8AB^!27XFLE|DB~wB71)Q{SEW21iO$~(0rbuX^VU} z$Ytee>W9kA)LwR5@j6Gm9yeYW2Fcq;c_FbtEhPd4(>4WXnPtZ-2Mh% zR9Mw_s3ryiVPxai?WvxzO153u9i1*WHIAd0LHc7d%pQGF!RCg2-=hu{NfU3Z8|ETwld%17Uu86%EbL&lUkN)0-9bb%L4BX|)&A^*qyMw7T#bF-?kT>gV58NH&UUl8IcAaW2pNDXFxHj(9)uESZFqVES_YHHxNWodx!wUwSK36=W+U^u`?cM4M7 zEwNjWt|S5Jtug6N)$SaTw(_L=iS!wf{>ZjV)%#ZFMI@OVYa-35F&-Me=JWe&4Av}I zhbry#1*xYEW(}gq3y49<-#}pYCL-pIXGt3SPg}ZWc!$ksR%%wU$X#p`b(_uYp|+pgZnW`MC_I49_k?sN`SGw0<*zj#6cc?qPMXtTRYK2^+ zti9MiP=d-OsCGB^AXVymN}&NBHPM_quyc?QKX3Ag6Rhra==v>Tm)8st^l6~(Gu*)a zz>jUZEzfM_RokthTc)j9v2I)1vw!Dv2xyu9R*ctZ#`s@OXSp}gjw;ywoM zeqwee^%-uzJ|=hwq#)Uoq}9pk%sFaTt5-S`!fLk#P8_xqqUH-hawQvwG~5ZGsnh6i zR5OR3pP0qk_(cdic@OEUMt&VA;ai|rJs`@|blY;&S93V<;C1K&(Xa36orax*M4uM@ z!$yA))fc4e_=Wy2hUP-~Z_NPE#nVp_{raLmQ1tg3{ZCB5nJPnX1x>&KUwD>3Ds5ND z3mHxj!_J=JVPZH7)bOuL7`|nu2uT{NT|BE={qd$V$IiFTc6r*Bi`h6adlC*Di4Kx? zlAu)A;-dVyia&+A{3JkBxYsp&6uUi?#Q`!HYkyOngxecW3XhV8SD1$Tn1<0<@fd@$ zTF(Fx>Tva^B3U1oz)|CQ#tm|l!OyADEEag-^Q;~JBvtdV9_RB2HlJa}1UHGGLkq!! zVA$z-yx3UgU6Ogr zvpFSq0Gy{}ACH}<`So%y(@rw;(QJ$uc3gaciFasVAhI^AbcJuiOFI^AC z9yG;HBgxrn=6~fiPm1bTs5ozJC*?EVe9<=yTf-zA4t^rLSN)MeT4BuXXn*#rdePH%U86Urc>36vf$| zsjV7nK0{mAAHwixqdA~{ZjdhVda&6A&0^8)9?^s z&vO)WM6t@I8N-7VfeO|%a0m`pl9X>m^Wl?L+?x40nrlV#iqY&HB&U+dQ7jk5eG!Fb z0A8{CC#fm7d+gdc@JF2esYhrf;Rk2CxcL2{IrV2$Hf5$pv)UX>OLdk2uJ zG)4xg35zJj=EyLL-$l_;6jo~M`QE|~VX-J~hNAwTe1e2^|A(Ik1T(ct?`ks^=ceL^ zEq(7zvMn9Y`D#QV9dUS9IRZ2@VgHw8tWdi$6uNY(S=HKidyvgn{dcI_!-!p+KDG63 zPm+0%Zi2KiNMAuT)!}e+aZGTc>!|ECKjS_F@(`9%dgFM2TOmW}?hMynRHyqkGBZMO z&k4L5wm$zsG%N@l8gRPB=-7aEK;Frj5U4K%Lz5{}soE;_Sw#TCqUMx8Qat_Utb4s3^BV(prO`sRP zcbs{(Bpqau26FzFL{837$=M;6v%ciWlHXH86uw?%SR?ArM!gN^Kk}(Zi29euA}!z7 zT%;1}sh--bF$?P08qbopc1P(`!YQuZ-6cG-nd=52%QlPDd1+*?dIc4NRKsHVz)5(* z|7c_n6U(z{-jO9m@%N@~JgqGp1FJ;V1<5^0Fq`t9akzgY&!*Ly#>by!%toR7)1Swv zkh@UG=(CJ>v6j|pFM*ev3>?j5D{o{xUNj}pM7{W((Bw@9(mWP+`zMOvy+?BdXBbBQ zWZ)!WJZTu#n)V07&B9J@hKzL{+XS5RIk*-BEje_zP5rVg7Y@t!cl_G2RZdwr)M z{UJ$B-}Xd6_@3qe79^WVM4D~kHt?E(wt1XI)t2X5nW{>`zz-^Nf7J7 zJD%LOb&zWzLsCOUEi8|f*EpvzaLc2ENcC~R^86+x_D9Xp{vhTYjHA-X zF*Bo;N|MSe*Ax-_{t)GoO%4QD@Sfkmp9<_Qj#!-xj&R5FH@uw{Vj}xfkeoz9zV~C0 zI++=3kRJG#swy(5mBLEHNxmQdYiUA65D#MrHWeAkEE;G9? z)_=Zr`&!JN7PCrYcBz;>95K5IJoGF0a_L#&E}Noaf5C64kOYbBiXeFp37skUfxURlS6XwUp}vKMY*BGyj4ZUN45G^$&$6$UoR%n5UZPvPi>~{B`Fuw1f)0lgNG_ zBo#DU=Kd~7+3GQUD#8o(IWW@a2B_E3hwuIwCv*CIw~jvX^34!Gc~F+P2-~TECrO=e z=v~7*sp&*^IrAS9dclmgM{rw9@vk6BWWQzoLqdv& zL8|^Yrj;n3*9RP73Z3C4hlP?0VrIN2C7*dfjyfHV$UY^Ky$dWbMy%flLTm()?;rWi z98;yiB1ny1ssZ#`c5xKEth(kR<~FYBsA&Ijp{T0B=Rm5x>9verWF(sVPO~qwN7odA ztMg115s&RwcBLb(KZ}~Jc;&4^ zQT<&apB$u3KsO2=jipM`gArq!kRcxT^$7QAa9t~DwJ$|le6Kj@+Q+xZB4Ys=uy5sN z@*MH}T_S7TlYrJ{-OAl8I-6KjyXTNWQK#t+2M*_*Te4kqrd@FFtT-0KxO3fi4D^$R z>pO<~#FaG%e~2P8YiVazC(7dds{TY9@F)1X_?VUtrEtt3= zJ)x-me#ro`T+$CWYDwpGc_VA?*08;De@xWWe~_!N6&4ziF%rFA_FwIYYw z3RG9FwzaKcl-Kq3Ji@yG{Aixk*WHKU+V)zy7WU$&{<_jv7ydKyPdJCD1}STAMX%_ADQI!6)pk#vo zI-{&ED%=_^8ao(lKJH+!?0=~GS>5bzuWxW<8!09yvp?jeSH)>s3NfjO@;iwec=C~A z$3s3>)D>mCjz$Mjxt!WyEF`}XDGO0fX74f>= z6N-zUT=%9yb7gC>`c5aR4V@08b9Qe>KCq`+7d$itf` z@(&D8j&CXqiB&M*Y=Aix!V3}9bfK@zxBnoWva(E@s6XwhN5}qf9~FH>zgdajO2(H? zW2#?t_^$KDx0*Ds+D+gRx5nWcZLW{itBTN!^T&-Y2bPxmPzG}|<+XH9BusRGC7zu44s8Y?GtY^*MsG`gg* zx@^+uvc~F)Nuw(ot1Bmsu57ICJZW_2#_Dd9Myvfz;@rfv5jLVW{mYkoHCGQzlaoy< zc6%{MPa3||?Ph-$;XlMYsN;^@?5m8hr7KS>DKf?WwxjoG#kFml_B*~+QFYS}_WOwa zzGc5Uz#Rvk?tj!@^w&$7ZDW8sHhH-rf>0wj;Jo@0Gak;WW59n{8}mW~5g#0Q+7}SNcZu~sW-aw=n@57nBUzMUEs8U*@SUj*SPG@*tAqOb_+PpD zQePXsbQIftm+M-P-tO%K|DUe~@qON++Z3VazlQ|8V)S=VBmu4lUz;{E^|ZilE?-iSMk))P_7gW z?b7irA2CNbxtQWdy6yKZh(ml81mQ*SwK%&Lhxk}c%9<`?bL>P?Yl?E?0v$;I z>W2RMrw>zzPz&ofg09+!^^4aRw}`dk%vHOg{6-qKl1&yI3F1&3Z+N<~C$F9Bvrb;I zt6V3qpIhBxODxE(D*I5OHcWOWwe}qsyV~>-xB~HM#D>P66q5fMiWZwnYd^cZyxLv2 z8aI=LDS*HB;$JN?eRl1x&c__Iwx*iQ`hfq3LhCCw(Q-M)cjCPZ5WYX>x5aT|s$O|i z)v-puimH`S6}3=l%dgBOu)h~maKFi)B6;f%xeo(c!8H_~ZvPg#W)NagipUz?+(LIZ z$wGV46F{QQn$>F*Di z*Ih$8*VJ-x&C3!N*SxT)n z7C<*Os1J~uU+6XDW9wjH8$u->AN@jR=Z*RaxDTtEk$^7 z+|X6s4DGk`aq3?C0AE8uj4!0NNf&H0_%gZT15SCNyGjLQ1G0i?CVAEe-i-A!__yG? zP$N>KIZq9{Qeq~XDbc3ve3If`jLe)cG4sbD@~WLastdJ3ZJ{(HG+zyt*PN+R`KvzA zig;6CSXuaxtI{UGXA5I{NqO6;-%**OD?BPK3L<5qWvT0t9@nc_-Bg4MH&u4X#pi5w zn>36@RF#?tYGu}!WV$xpGlvO^w@i(u_zvW_JWXx#fU<>klTl%tdgK9}fXC%gem1*> z?NR}UvCbfoDtqxbar?8PM`5pD=u2zLw z)$Vpno)>!t*TNvG;kS_xJK75}_+nc!tdihwNah-xOm;*I-NHP&mqmAf3*8efbf#K` z>jfdBMrRDIx)QIGS!l&!Zwo@Xt~5X#n6+06#ix0I;@Y8}4`BCl9-v5oSjIznfRkNY z)KaMlsEd!WBU4u2pJzr~_DTpFLs!nA+Y+22RI%RtRqbv8zusWlm~5u(AQy~m3b!5J zE#%s5*e0AyD)N)sqMDy%&3{Ea{{M>qRU8i#M>mpRnJ@l2KQFRqR#^Rnh18u)gj!Ff z6)+An8-*`!2245g!pyD~b>^4CFtY{Wi*nyDA^nJ;R-l$qPRQT^>UV@m-*jcL8r%1~_ zOWWexW$tKtA-|d!$M-TU_b@QaK#QH9kW6ioDE?YHX?WQ>TMJ{^@lp8czuR{s&Se(IC9I*Y=U|J<_9UaMrg@A-Y!$MiMblxD zJ?Cc|9NEZyNTVuS88_#~!D;N)`VF2^DNn4`_VNB6z4~a8p9}ea)p+i39nK;!zxuX< z`24m*!Won0|E(CMYlg4Lv|clOrDE?dVD~-Y*vuPGd?AASC&D(#`K0F;b9y>Ecer|F z>=qT$?QbLJ|0SBJi$;NXwoNgY9m4*v%5c6Q=IPV`6Gw|=QiNp$a(?Y9;m5JZlPz~qGj)Q-St6@{Rbjt17+X-)WklVZVWOG3_ zUs;y8uPI<+xGTdpVPCLw6(;|2H>#c5KD|bWhsn-ygl+jt4}bl|h~Y;&({#C+d0PwZqJ{ zjMk!>E7V;aj@oa|J|~uEShf#G?X#PdeW+ze;ixl%;Fw&!m+D}pyYOZQbY5kcx+ z!#TcR^g4WzIh4coqu{jL;<~Qfa;4hUpvS5m;Z>7Mqnbo|)$US8dCePAZ3L>-Xlmlu z0AqPUAbZFrTu+c72s_kwv#)?W`W5>&S`xuOGPA>1+ov&*HLbuzinhIa=rko8yXZF;ZF@y4iuCPw^eH~twupP! zNw%#aroGTp5ZpFPdgSWN64-cS|0=pWp$m^iqpI1mZ%W^01nK`U7&OM?Kz_{a-$YXj zjlJpG6oeRk|5_dj ze6F2X-wf-VVak=0B*zTj*uktFhxKkRU_HQGSZ}KxW}cjGIIeCVmTCTzwXPc8Evz@z ze?!hOayHX|48A;fxH@I#Ebse2>Q1=kYFQ;^q&GmG%9sdQ;0Ec(Edyx;p&vI` z0iIZ`ug}ND6cK*Q@W?g8-_LAnpNhS$_q3&m-IW4pL>EeD(uv`3m+4hAhlWZU`bTqw zg?^53i0shg+sF={W+~dQ8NP6BwqIDGJj#ot#THY%lf@*7;fu<`Js`{Ib-6ABvI6_7 zP}U8nK1J1Ch49o#dM&Go|j@6dlWU zlq3rE^WK&!=Y9OznW9Ifdj8zM?Oxg!;@!at?Jf2ItRsS(p_QA>j~e8kGJLV?4=ntM zA;<@qPQFaCwsi~bBcNBiCDcdwB%nl=*t`4Erw8e&nBSyt4GYZ*5g{pK)CndH_vj#X zE{TSohSx@TEs=Hy3eQJ&9~&eU+1;>~A~45mA8_nMP|e*`rh8s~*9##vFX(X!kKu+8 zR=s8p(U-xO5OM7zPB-Oq+D6iTVC1ZN-Ecp#LG&v;#m%G6>|CX4gLb1r6baoTyU!JR zQjy&?S0P4mJ@3qd^o2-qSI3mgec;~s^-mt7eK2!)0n`@a`$Q7%@R%wOO;eJ*g1(8r z=M{7&kKy*vR=r`$YmYie|DzMk+Iwc`Oe-ogZ*+dgJntj58S<)wzm`|2QMjW?GB3bU zw`_#-!d>C4)k=_jg(P31ziMKRwR*O_oBQY&?1ZJn=(-l2dtLht!OIe}{44Y9<(^@| z8sKklAVYhQD5+o7hea_d$z9wu<==3D?)lR>iDP-5iAYoQG_#9@SjJJmkil z!P~dHP7sjWhac!G_}rcUp2=V-6lrq zzhN{NCs%)Al-?h5e0Nh@I}J*UHGY##!(PXm+}@s%8*G2I6pcM`fji$?mwn*toUS;_ zEA4|hud&kpn@6_{9|+q>`TI=yp*U)gKD|u6pxD|n)Q`hosJ^-_(=JZ#wAX1nMN1U} zwgq^&PJ7L396rz1Ctr$Y*_RYjVgHAX>s|nOJqGMsH-L`PzPwl_ipK%i5^5Pvw=?!- zRstnU>##d*FlOR}dqvD-uezgcT0@6hI^iF+tmVB98DSkOj%Rl+$UDIDDx31AHOKN= zS_@*FXSI9KD#xVWi*aJw72;PJOYKrO)CSRcb`Ph)R(?Tw_wB5{bPFtkA-L_p>++*$ z-xqwSzal`~T^%l(YcA(Pf(q^$B=~cS{!*`at@*21JPV8H#oA1g!oM8+aQB_$F5KF1 z0iR$6>CJeIr%`{1?g)_cs_)Sqqv|u@2!Msvw^}rtlWo;!Mdd4TUsQv&6U-NNH{|CR z)uR4~pGQSqfd%YLo)#EM^(}6i6mA@Z>rFA&JAZSjd^Q<5k9J2I=G`>u@Hha8EO!K) z%sM(qcjvQC8v#B8McqsE+Uh@&*m5+ooI?`fmEE+KygNx|C*!T*!1XkY6?ubtXJII2p9b}U z5#1mk3F5xy*A0_OC!>@oAi=aM@qIo-F^~DRo5L-#XCrmx*+u$iH3bRsi!*@ zn74M~k9&~8C7f<3L{d4}CRZ9um^YjoY5JTx;}W+FX6{0vHyZl++-yX`3bh`n1+$Y= z|3O!Z8W%&W4!se-aRcB0qua!28!_6`7+n~owjn`iqK!@N??NlJ>kM3(&^83>!>FX% z7~+G}P%fCtUPuVii^`?S0#1B5A`FScP|4j*)n7s|m61zK5lrjmV4B?6);MxO!LIyX zvS)jcspaKfXu$wS_gZkw*ziC741C78*3h}VRn$GyPEOb!y)TznCP$G(uIue%-_PPZZgm zpaYko4M7JQ`cNrJlz_7Z9GD~jsB}Mr?5@NG!&|o#BC!Upv;?sRCXj&Yz?h0y0}929 zbG<04(V{xhkV}HpCTx(fJZ5~7OY9CpwYy#h+S4!y{=1DO2>!dn7T9Th3;sJBDuVq6 z=_i?^NVRN10N|*qpMYC5axRw3&!bsI(L^pXkj*D{l*>H^NKwL$zf28ocHGCFAu}##+8gLoF!anv)(aa*dB>=D=E6x&N3IGcLJllPU|NCB40f0TuIl`G36I%da z4>(tV(^`m+MNur(!lJiZLmB<3(>Q##1pqF;6tnZb#JT5X(jQnWC9(uay>GRQ-hpP3 z=SBJ&B^-zZ!UFLd&H~#9!%j_P-5jK!r@gsby%1eZXV#m&IC4-)nU5*MNusk|ztoj& z)pT_s336=ap(r}hZA-txNkpk7upP()w=GSzT{+&J`P-HzNu_f?6&~{%P{ILLgpomN z<6dGtf1{|KJQOjTWAzw)J6}fw4}afUg(d>Mn1vVKIOF@;rE%|r?LjK<)07s*&7 z8OMcCYCl5m+9{e_wD5oXn}hfX1Ok~v>DCT?gyV#wY2^O zPl;oNZNURZZ_he>aCDY(1+=w!mv2dXxR6?Oy(Gtm!Z`yOsz1jjwx^pDMF z;?eyDNxYW4Xw)xVidqH0aRRyozd1cBa(Ya|SmBQYB$|lppOG-p;}9)lT(iVe-2hYf zVSTK9LR2q+97SB$ZPmnh?GjP%6j2`(QQs))f9I&>E#Y`ki*1msiKYHUi;>hG(D9k( zc=zT)pYf$A_7}x0qu7ZgTk|jTP)|I<({0)kb#3p%#Ob;Lae5m~+^-ZJU!YRGmt9DU z_icZeDcbDXSY0o0cME;)TIl;m=nGtz2>qi=#htl_bN?}ySSOJ8BbVT>ErGmm=g~{t zm!gH2^_RVCg4CHLg7gxKVOIakw6@NpxA2ZIyxJg@0wao|`AG}T&cYdFIK=JTl!S3< zYQe~&aM;N(h}-!Nlc|Q@hI2z?A74Wz@d@F6vz0VEyZ*6;3k~md@aUkTn4Kx1%r=x$ zhBaR#!#7) zWXP7CACl;O$&I2$mG_eH8<{Pm9xryTZe85cWfLmYOd5HFnyp(+JDfDUY2CO{ZP$t$ z)#Q3&*EMxb^sJiq{EB4u9?M$dMzw8;8^xDwB`tBIn%q>7TSzB)(h}lEv8H1?9Q3>} zQ%$bNqybKPXQm3_6F<>mkcXNYhzWLb!*(^!QD>34-u;_i*OeM5cKR=6%aIt?k| z3_~Zn)I%Qe;s{aqb#RDGp-sbo1BwDmC4^Pv4gm|UPg%oW;jR^O2RBp5rwLiZK#)9C z$i;3;kYzU?Q;Hj+i77Q>w`h(rj7fKR_WQEPGPf^$w0EcbI%?N*XNlj2;+M2CPq$He z)}H{2-8%r8b?z^mRa=7d5IFURHEe7if3cuhx!h~$NDM2i7``pEM}&3?leqO!u9dqA zM3ignaLvLfD9~*DthST;2|By@Exbi!4~UG<-;1?HSL_a6hitOQ)^{(6?7$^RJ6>cD zOY!7Lk`QgY4$f){tQ4bLf6w&=g)QzN-<#C|cd?|laAl)HTsPX#Z(%B6am-p4e zzF{Ki1OB8qbcLUEW!_@Ej`zH7&>u6;1y`)iZMN#Ri&N+!cZIm!0yn+7PYr}ikZxaQ zg?a8n(2Cs?{3+CCqNjffdf-P0t;nrM(KSC%MY@+%8GA{`$yU;>Nt$-EC9^v}Oas)> z(xWYKdzo`Yi^6Rvs{0(CZV^A>Uz@|^USkrHG#a-MNVThgEc}d2;%*1Y*GcGu)d}?% zHGH4zz0N`uCY6-O-cvai(763FA}?}iV<|5B%R4qUGZFtkqH!DM>%w%O@auMwqB}^@ zF{a3PzU(JqWtEm%5j^{@ErqLHZ!%h@KWCe2)(5X|syS0l>$N=9Zjx&Mlt4^m0dB$f(*}M@U^k0j;V77)+d$gx+DDbdg&5DRCtuxlRphJB0d&8p8aDu=>P@TW zRwSd_jaF^uO{wa1_km13di~nrZSDmq-E$&e2%_C?G$)_p+%DbGW&H)pVYX3iDe7(W=AHjeve*TcRWb#q`M#OVv^}BJX@RdywJJW3X zILTZv;JbM+2i@63+N9zq)OY7oam>FY_(jMR40!g{BoqvIwi+@svo&?I-BN4nM)!!Z zXm)2@fWU)boXB!H&uMfZRC6T9Ec!JXp`rT*0y${3H8%0h*k5BmQ`p$>RI;lr0ty2_ ziU;==HgT`<6E0^G$(23zHwI}%53-V+5jCKQ>(<6q(~ZBq!{|t*A7A8=;~{sbm3u!z-@%XNHlDktJNP2$!hg7tn13e zZ7W0O0=*4L7~MU4pPfWG#saw@m=e`57L*hxU!O;2bHz-Vx87t ze;q0XYE|3!IY%pJtt;_HSuN1jMOWhWR~fE1SzVa_k+9Asm^ixF?`r&rRdg&zZ;?&z zA8?Jg7)sh;&+8TxY%zSbaWwoJ@G^jfTMVV58A~=>44FRu^;dFgkx8=-o114)%5N@& z^8j$2V*Q~FAJ~{-3&7T@;=DQGb`yX_J+5fo4S2o4BHK@wnmx&rpd16F0kCTklQP929OOISWfl|xQCIBh=pkFPM3%V z6G4pLGte+dXIDpVw;GIs9nr%!|4T)1HE@vqE>hd+0T%2giCs^z+t%0-p0_6niuAol zsL>w3V>o z`-psWD2+uth~eEeh={h)wl_Sh^Lqh>laZIm5|sC15@x(gFbc|gS|4B5dRR;JWNEEF z2RV1>kBTxxa{8($yBWuJ_1gsLEsSTh+<6aF$mtbpo=^=3?&a5^`3i1fTcar>vL%~6 zaXUL%ZDyYV~vQr&KjxqG{UOg%Mxju`1XoY6D}q_&@JbX-|@(9oV5fSC3g_f7cy9h5uMEWm+nkK{GIS$ zE6Eu6&mi?F$%b#k&-jzbau3<-B&@kAK00-a{h7bW>NbB_K-E)M-fFssY(YVjZrmt3 zYW}E9@$#Iw5Cur5aK(f*t;d9P2S{!gG<7>j-7(1b_mHK=Gr!<)0~z5EQ}1BnR54X) z7~?juE<=}+T}my|6#Ug-SF2B7PSL~ljNlM%_GJ0bzL=1NJ~~3TJ>Fx4{-V&AfR)IO zsb3JJPhisJp3f2VGB4rPXx82Wzao{tpN(nOx}>ZV6nU4FmGBt1t+}F^4o&WovafMh zH%x+0MsReY$^k#vHiQh_&#q13W*4B`Lvky5TnE4dahE&TWh=TEVlLTMRnNgm9vNM$ zl7If^_a2e0-;@&Dp@i+r71YN^8%8*938w=%ZVEo0bFXua{Q|KsuX$fM;VbZ=ZLuFn z?fL6Rie(h*ukilm?$P66a~y2K1X0=jB`c{jNfLn?AIc1ju39;gtW2-yZk16yP{fXQ z^9onYV6q@x4!RZdt*GJsO))#g#at})_LF*g*-=o;6*10d!r1~GH;V@7-sQ($maI^L zdQ;e3$uDe?SYGp$$bNX)mwbV{pYr;Ww}q8o5nIWhIu53%i1YFMtldIR?H(CBBX)Pe zE2$HipHa*LlDm}xZK^M zp|3(*|80y`u~E&kW`?%8)Uz$&y(%*a;-bMklgTMB-=f3r;x}A?u?AwJ#bIKUArHbqnvA|>4n3= z_4mLfw>2_0Nnf@8)2i#Te1fzHI*Z_OE9#ogd2$|wNM_=kcQ?~@fqR!K%t<@Q8oHaN z*25W6e*>J}Lg@y$1=G$ZHQioHMK{1z(i4R%o2dl50qzcDC9)R<$*V{(B|B2qDRUpF zcRN*j)sycpY)akAx|Xe`Kfq|^wijX>_oxtu3h`heY96E~1-3+zuNEwhB)=CA4PTqs zk0^#4z>m#;mJjH zZn?m1hWGGkz|Jc5z?pIe^VaFKN_W3Hh`aRjBtJF>`@e&=KS+=Fe+Fy6LI~wG!zFFz zOQ>P*W4EOK!(-TEO=J%Yk_V8`i@$0@e0?b|Y4cmu%-=x^>*W16+}FVXcP=<#GFqJL z0O;+%coe+*CurQ-FaC{Sm)hKI6x4rVQ|&u4gV>k0!6946g9eo@n(kNEZdMpfvyK=GjHef0v@nF`N&LU(FG9??#G9_A;{)LWXq z+E$FG>8D7|3Q6~uj&_v_<0SniL{>d-u6`LwYKWQVdU1DH;?`ia@EjnC?4dz&ED7EY zj8%hEWOqV%2PyS^LAoj)^*)Ae%i*_fwS3h@&$lxFXj}3GqICEUc(q$VNt_eMayUlu z#D58-i$8`}FXgwKLE+1g-H1Z*CmK^^gpsSmcfhu2-!BJ5?!)MD?PH@UiFg)ZH4)YV_o>iIZ{T%9V+TdK(5i=b zIOC61i+GpoR$2ju1<60zD3$l_8>BwQtPMNHMz~g@HbsE- zFzm;9BdE)|hyDvIxcg?p=~WmcvisK`tsvDLKU5g(e~b3(=|)24i0azI-9%3m-emX( z1jz)69K{`?cqX6XD0fgqaiUQWo_lmYg$1?0910Vl3OdU55=EWPog=c+b&MEnW(h)*Y!iMM8(<3q8Uuwh>`<_(KO3i)h`8NaWOfOcWjRDaN`-B8nG{LeaYS&*48M z{KeDqlpO0W5q^u3r$^)yAdkXvzY(fmdz$Ld_B8Rl5BEB-mMgDm63eS#$!WYNJZHbh zIn3P^J+AFFFN&lApzkwAtljJJ$;Tma!!_K4g^Pb(B8KK)qV(Do^q8}jmJnTZG(OjE zEWR+kf->B!)|tA}+UOm>M*cI1e)E4chR=_Q8^gjTvyfcvIBbm~uaYC9=6`TpctUHg z%6J=S)wNr>Dg1S9=yJlo(XlI%nh9%jVXg*{wYztS2Qx~!$&JriL^)jSS5GA97$ z$Xg%xPZDwFC}k4g+liP&AAh;ZK|=WtbpETkzItSQj~=^w+zOAog`Rq`(rTrIUV;Ah ze2V~u>4R@)w@jHo!NYEyz!vz7JBSKFwda9(bCfoNvCbf2A@#2Ysk(NcyG1A zPb$?!CDgxNt*W68z z?MeQRTK?ncxR!r<&KJVA(ucV(qsO(K*GcZn0DYI|gk~;DFRRY(nj@*^J*2}Gro#Y| z%#p6-K_@{vF-pjH1aD#CQd7olzM#F}4-Q*pb zkoXTQ4rSD-9i&G)P`-}_AwM}Prjlybpte}l;)S(4=BRp!%Dxm^;O1iZ-0(VGwE+IZ zs^Qjg3Hxfn;!>(AKYBTLtw)raXX8ME4~2%m$~q^?8faP3JFMZ5xK-r1pZEzob6_&M z-eV0*dG#^G313OlrWCG@589*S?`EKju!4INN;A;^N7;G6S5>5cKLG*(f;S>a?}!Mf zsGtHOAVxqzFBa^IJzjNnHPKZgK|@wC!HB*0zNpy23O2B;V#kh(>l`mCDr#JVdB4AB z&bjy85Zw3A=R@u}Gf$gmo|$>3JqMcZH7Y@y?7?Fi>+ah~>+Tc8jt*N*dlW1#mC4yDSc_3b9p_dm zb9Zu+ZY%y~l-NJsC~dnevsuWxItf zksr&!lF`vxwTj!wPmhvmfA+97g~%Fa${LDD^T)|klP&bF06!p6Ja*?dm<#8s`d=z4 zIM7J4($|s>?+NZO<4vokOLFdC6xd02Iq2xtrfO$cjfD;1NC~tl5Uxm44NUns?XZ6I zA(_xR3)aeg${C)~3#10R1z1(TE>ZnUt8fZi12POVnsseNcQH*M_!yX~dg7~pN|h(- z{#@?~?dl~y&fN!4R$ISAD5h2Q8!gL;{QC& z4Y?S>!&vSIW$2TX-J*-V(pT6?9(~;r)Cb)QE`iKAWOhjBlH+ z5~nvug7ZOBQLK?Q3HHvUHD0p$lJ4>cRWi|ZH}a@L%!C9=iVAVLz)mJF=~Da+bbH&v zv42OWqv`bzET>v69}d2?-qUHw-YTq>=yux+R;<qDHXgCv0LPhddxtbPm2h`p&cVxQ$s)Et!hX9Cq`93D&>t~gm#f3o zu6U|idovDsCYIp8B<1t>BPF*l-sG3YiRvdKfV6Zx0yU@l`-N5`G%MWy2=Z>w`aXla z{%T{g+HDPKw*=!4zN9=B-2F`+Q~^PvcG+*trF?LAb(`V%h|TX2qQA~>)sp{@Q1A9> zfK>}HS@#)#RjP-sgrd-?8!8%>6h-9P)Y0YwrA=Sjhy1Jps` z_M{~oPJ$x4+jX}vvinoNG-$QyNsKC(PJXl-@vJBeGla}tzsiWbW%lsobtUgu2AxHU zDHld|Un=DEzex1w^R=4Vu9S#ygv2G)+-aq}pp+L#QM8ya=8+}?H3d37s5^~O*xUPw zK1vIpt6P8sCMc>ofGDW@y4k-rD0#vnP5ri$$$>F)0s?n%BO4oAVkwLzQ6st82e zV3Zamsjz&q`+;ICzDDTzEW{4SqF8O+NHxe zSJME}U5#G*^0v$+)?hLgQC;8jk{4GG)W2cF&kFMRStP?9sY1FtZ8&IfcZwHYB|p$w zyad6UjZtux8w;tq3i$3$6oXdoT!<2X*MgYOP!fSX^|Oi7$C7v(=(&DqJym$AU@n7+ z`;|W)lUPOyV*XFc=-x7L2nTRtly&R(^;Hyx+0t@;q1jnGyy&3yeb{6e#{95`&;l)| z{@!piShYqAZxY75NZ8APiG?w@u%xqpQD9RrFy#&cx*ecc7;{UjBMr6|QvB;bLbjH3 ze#EwE81sZ^9Y}60jJc&vBrO)k+=TdJorLhKTE#-_Z9r-b#`EtHPs{9(;h7C%-ceZY z9+4K-4NS`1mfl#JnyQu=8j?it_` zFx&SWoCoNb;aCYr=KSezY6=u5*VyhV)RCZ4U+4CxzG{9CEz5GYB**G&T~-Z#)ls2E zU1n!t@%p2KD0_mkSCH-P!uSk`_*mw1WO_c*`E~KY=DQ2|a`KUIj4UeP zn2>R`oazX3Ekg$`G$H)?p&i+G1r87Ok*Hdc(X$@7kmAmlY^n8S}TiMW0wA^z#<2vPZ*OZI4FF*`pCyV~-**uR716 z!Z2oi-rCr6ee@hzt9y^nly3~dU4b>0wqYfC(Keh7PcC{y@iP}aZqIA%ueQ{psI$*C z5{r2wq1|60PP2t}FC?_PSIi?M_nmAl3{l>K*y!vEtJCxDAdVX^ zturq<{YPbM`n4S*+*aj-L)@Ye+;@dhHHPeJw~EHH;OgyB-$e>x-rsfjxq-1dy*AY% zy(ZN%?NY7MOmNeyQmxaUq}rrcrV7*VrrM@gq}rulPqj}kCo&@8@CuWz-I>(rEf{cP zUKp&jrr-`8X#zpr)F|wid z4Pm_QoYVt}IuQnJ%t`O_yY-fBQpW{7MNlyv5h4fXCQ-}@CLHJY-XF>}_bdnNVX$xn z7OzFNSTJFT<1-C5;VqK7R%HrxNhX^_F_pHt%eOS69j3K*-~Fj_$J2Va4>w5b`mIXFd2R~0f?5yOE^ltVU}*VgU2(Y!*} zf1`PATTJWz1rqYU>#qxejVAVW3 zsKMw9;`p2~wIHMBS-lh0)pT;YZZfc9d}ZHdC53zF{k*FBEz19<`3w?B_Cf^ zKd54L<(BCJ{O9t$NuI3aeX8oWEFUlEeii>V=)IJ@b5;FdpgSs~e?{L)f@u}*sf<2V z^;?w}i^u>SZ7ZCj#CD}RW)!69y$~)FoS44(6pCdLF0rtNR2Mf`#pIh?=CSDdG}8dv zG$?c(?2Y|{diNubt|xzTCP2awt~)sg?>)G>AHs3f?0GSJdN!^ijQX1{cqQ!S5+baA zu>GvtN>X5C^?jQPXMnArO@nt>Ly< z07Ni=1ol!BwN;cRQI`PK=XY?gD8D877Kk!YdoVN-b=Puy*F$u2cMIYR5PkH=54dw; zH@R0O-G9jv*eb4N&F0x%$Dc)Ou)!$6<3W=0yWgR3GZd=oiI8|Qi$jUJfAXr8$Q#gA zAhG-|e(e<;CrZ?fqM=C1ay{i7uMD=#$ zXwigomPZ?%%iF?!3sHZVieeE8$t$lE-_}T)bo*f!L4naD(#t>liryOPR1m9?I_bIy z;wzHEs6K;{EK&C|9&JXjSf!k-;r9ewQVWlt_0j-G4=@M;+NP?JXmeD=RXjZgVxuRuCWvHLC++)QZ9}2b* zS~-FZa@&&R6!9z+?0U)=33iqQyUr7_>rmxeS@}+EN@k#QK)DtfGU)>&8Wo~3BNC)r zNMXyS6#BcnL}7^lO+)FbT)0luuAp;B)a_w+7<_O0xVUTuP^@7u{x)pb zmf4le+=l&xaDG{bWaEp>Fv>a8;+wW*ePmgDCoSKO+`IW!U^T+@CaU6NpqO+gkQy9q zl5rDJiwB81T@^MRoehZFfU@>2uh*-}w`CGFak2 zDHLs@?l3#&3H(stF<9F)U^`+}YJj^>NG}TMbGp1Rn3Ik)fX0|ZqMSC2yZLl4HVuu<1;okr)b|lH-!bTXGF;0Sf^<$JHumW9%y+ zR}dOW3x#g6M-TP98lX^T+X?=!FmC79tbQs~C=5}YOI1871tOjh7tQL>+exxVi3Wg!1j4mG6Gx6o6v^Hg#c%Ag*9%xw%hS zl?WwlVWO@LK8?YgoQ1hjFk1sN_EnR!YeZ*q7DkE<+8P~B zf%fOx4#B{~uEF)qz||BKM*Y#Q7-cZ*2gEVa7{kS5E!!!6z4c@F+% zKwPiAh6i1*)d@<<`>AO7*8d=k+%W>4Wx!moJ&A`5=)+miYXrKpK=(7y&WT#N*Id~# z1n8#7jOGX0-3-q9K4-*gvpO8HEc19Wb4M)u>cd2m8L`s)>vU}O)94So!RT!2yozbH zYV|S!d57_CAVM|QZ3s;J5uea?nx)&Y6DwCVp-2ZXAq#YHRsG?_)y`$gmQwF5$c|<~ zhoZ&Gx0?dCald?*VW=26SfBeH+%zX@7}B|l%-KzvMWU`OGM(+n4k5qdG5D#6;5sF$ zKj*=!ERls!H2J8SFNRg{qCpoXYM;YHNz~nj77XWOGCkE)H#bv|*BNBnMD>M6H#CPg z3{HbVs;k?X7q_o~Pch(j6>lW!4vK@{oCWXg+6sJtz;`w9_7$&J{w-rYWm(X^?z1(3 z*7GOW%s@BM#kQSsC`?!d6Ap##;~o*zcXpGFyR0AaU@+~nF#TMeU|um8F4{iML*=dp zwOV}c;t%%}jp9mon;~kvO!am%$O^50H0ka*5t?m;xW9Tz#Oy|qIWmXLp;ngHLnNw$wNwQ6Yb}b*F zr84gv-l42#$g*g4tKAsvt!iz4()BW)auD5i5^H9JaknsPB4XqGcQHM&dz5urme}{G zFzMbAtTkWv4Ufe2p^;NPtDS7IYDw#)TS$8FEpB;LJwe}ei>b1ksi6SYtSzWj?FMl0 zvcVAM?GYXlb=Tv57~H22@Xcg`J0^TyliJfAD8lm%X%O9z^RHiD!Iyz z@w`c5*t~Xd`wQX{gWw|Sxp8vO8=Un8!`(1mEJkr~lmVYyv7mBBhV#|rO2I3c@U+OH zZR37nN5&;c35FQjsTD6K>N-d6dWnHr!M1a+0vfb3C?a_25PhO9&9aKg+#_VL3I?|V z7|Oq`yFyrR07fh?uB=4xX_E0AESlG<)VA&vf!%Fjf3J8qQ8%80=SKK>GQ4TDa+3vg z0YKrk%kSD_X#-Lt+|FvxCo1E5>LgLUKaZ)MT|Xu7tK=Ig>MKs!Z8c$?t z?BtFYjax+HQPHTq2Qx_2RY#N_BRjn1CZpL|(5DOfedBm|1UJv%8dVE|D;C_Ig1f?~ zF2`}?kU71($#*2#QSbBh*R+S*XKU;GU8TL7n&RFf&F2%PEPQ^KP+^OC4u0k`TzDn$ zZu5yRW4*x07DCoN3Jea>V(snttBbk}$ZF-R&D1!Zf(cvT)y8Qq{hwUOe{qauRnG3u zvd_X@c>5m4($(-k1OB=lUi%uI3+uHQlySe<7{f>l=_@I=-4S1j6UgAPs%F~CQOk8l zd}R*(6C(QKR6$2U-}iz!KodU?g%~fOT>x@#=#Rw}UCo+jct?Dc`Au8OM|y+Qs(S8- z_hE>s?4{-AJi6q6fF{K{4sV^zb8wfz?VqTru7h(FLyRW5mVl+VirD@FfQD1QbaQ}k{zekl!5My5@)UG5UWEK< z#9k`LNx4>Y5=2y1QjiCYik_#r+lB5O_HR|W5A*Ks7p3J8AgoWK`mxCJz9!kMAvcPT zHSGcJU}2si%u5XOyhQCvo2ZpX_;(881pb)&vIapcxxTOPC;$gRijOc{vgYCSj3P_mqbWv5T95aNkptE-Sdf>1^n zceXJ!-Z8bjL#n$TKz9{?f`=%R-DkW>tMlwVai8&W9(A8F)b&aMR~l)`LOEBs-ViaL zY`Q*Z${@JH)ggc)(b&sXypSl@;~4Q9DiVYAryqZUU5qI~)wT+m&SKRRgN-pgM!<^K zJ+~xe8dGkKv^Mn%Dc7W!m64)tTnYuO_fo_(K3}-ShU+7s*YWHw=1*`ZuBeY$U41E! znGo5BK_*dmKaDq|lNUumWnG!t%_(%PJAyyW$$Fjm-NI>plXdKDsFWwXno`5v&t#;# zc}s5Pz808i5YK0&y{Pap>2DRaeT|xXpC9*@{=Ckg;2VZgAKAM4Z63J{a{;^(wL_q( z3&R+RxVgvplQEK*QtuV%-#(876>|CJ*jUod`gemx?%;dS6G2Y<)KXH-gIGx?uh82j zd0f~BMe$Cf=(ZB;f&2-^NzUgbTJ;dgxv7ukTKg%`iMsQw0}nmHBY>A~@(vdCGJ7sh5Wj5flUAdCmB^uywu&L9(I z>)dEJXCpD|jfxNk0`4b#0 ze)Ejq?mU|LDVVU^kw4k_=9SIa&1#8$%BS#N;eO=Dt>I75Mig&1ia+6cqGIOB@+$WZ*}lTv&e%ZuIE9A&tg>sEeN8rdJ&)-<6liv*O!nc~?B|uer8dPQT-8QM zS`ld3%m1%5+vgLCyqJS@7V7yf9!yW~lN>d+!!plPT~go|1Lb2pSC>Z!cV>VlSUB{k zQ5pS%h48Ft@k0Jq{sW8C5>=vBn;n%zYzWnO4pcHWw)$h#bQ_0-Z~&!QVfeQDZfY<0 zGP&N?eixm{S_7L-)^*Kqaw0_XEKKi3&)5NT_(Bs-Ev7XbQ$$wj#pe z`v^TfP78OXa9RuJ7gjLBFwojeY*a zH#&v(weCyp!hMKL`t1lwcMMsyIai>U8TPWqT_9#s^B;f)Ga+u@OVQ~o`(Dc9z#(xf z_c8fyDsRCU13IhXefnuAf;-=cIXBWv-pV~7;64K0#DMu;${(1NS^ZFwbL1X{+^X^4 zjLIr^9KY`I4??~&YWFU0!3$=T|KQ3p4{+@P949{u+<1XJB#>Lk@zJMi*V9w+$xS&S z`ED(l3?um^XoU#WxJ9GC2v-iTWI-x;=zVV}WhTNJcd|&gBSr8j z^7ts#gA;X!|0Z&7yAb?6ei5s)+gsqz3H$+p-)FL2%OkW~g~0a+xCOxd1bmr*&lm8U z2Fzh9UyvKfpdfGXgKkuoNk%|jUChB;1blGSdjQ$QV5xySH!))JG$nCci%Cx)6)(EF zEf2_Zl^Eo^x)5X22;*XvJ>Oky>C9@~AtVH!(Q++H$7?)<=frlJSF)U$jWIwGIC@r&1z@@d=;qE8B}Ksv^hMpOdID&?zyl!Lc#s}$KY_d`kVg!J zs2sO=koF#=yBjW$TLp5dfecC1o@Wol2PpHfpOb4H`jDg}Y^toPr>jQ|?nL1o1eAqf zsHmW*`EDVJG__vtJ%Q{Y5Pf#t$Bn4&E1LPP#sl?s3kB3qK*i)(G>r9V!rIN&0#cJn zjd72>BdU7d!QGvC9^KsN#<&qYdkgaiusPIc5rI!y!W~q7png?qq)TKFc5*Fw4iv&Bj6X9t zlItKc0C)f5*EPHiR2M=0(^{G$Yf^!VLW~jgahIX);5V{-yaV=Df2o%q++Ie7n86Wb zsUZI?$cv29BK|^YfY0yiCM*Ab67|uW>g#w=7qpf5Uu~)DDz;11C9wum{ljG7ZiMIj z@Ta3A1oejFCX$~%ip#>~`?_g7+itVI=&oadG4KZW-?yx{lZJY@?|9)<(1vjJ?rpN% z8vfwDPC*U9Q3mT9@o@UZU>6c%`#G<_9QMkVIh0J>I$awmiuxj*+zzko?I7eoRx~-K zG(xFglN$S+duc0mLz}ogAZEvqHgRL@(XF?iQXSDFe~?df{6v>MzDaT^$jw9*G><&@ zA$qs-=yuyd_d|?co=d~Ara*`4IZ_)T-v=_6fR>f4qblgh))8z`w{E&C%uz*n)qumv zN%s%X`CNVa-6^A{Oq-d zu8VZ`U|HT%^xlhfENWTa(0(n6DjKGLkWHUNdQ^F@sPdwkdYTu1F5FZ8rEYo9+#096-~P`?~Z~2357Rg%>RG;BvbI)~RNE;n=*{d3om*EYi=|yu4O< zvv}rb>8f^E7`Mr+PRJ?FBiPUiRN)3}xxR6knIvy$#$QBnqf5A%(`M0dN|apG)Bd)# zzrXfTO8gqdi?88LKG}dCM@nM13(dek>LfT9SqWSKH7U55&umiQ(o1wVWq|wplK=DF z6g8yAkwxeprx;7s*S;HAfM>#9pCs_k;qDhiN%NuI29A7>9Y6_hecrl?R;g{%w^=8F zA}}-sG;NdGKBz?6s->-{XS);GCbdIwvXYh*Et5u2iLOevNsR~&u;k+0G5>r!CkHwPL-Da}VZ_1-2mF=z`C73Ss7U_|+Q1;L*HoL1}}!s-?wq8MzDH3^=Pr@68W&mMOD# z27K{O47f1`ui_Z5RKQM%_(!}_!5btP)flgnf<=~!1mg8AjK%9q$(h4TxvyJpp{tR2 z^)1RX`aL%|9V$}$X=D+Jf)fc|w2I)MFy}Lo49i^+>=wx)y4!+_=;@R7vW*e{v;1IB zqMe0@3OX8(DjaqQ( z#QiM;^!VEH4R$sBB6lwEUNh}VEn^EZGGfmP#XiQ`)2wF6-7Ipt2%;(&79(dF?~{?S zrfoxVYEoVc*)n2KW?r50xDuug0~mP&i8)vLvWJ&L6oW084b{lJ4GOh9s*DpX16!oK zC}KPu5>g@m3FS|cI7?b#Jmf}+qe;{b0F=03Y~9o#c7aLoy#~6o3oyq3X3t#vJ&;FL zVPT#-4cNuPnwuZ&dk-Du)#@k*y2)d>gm%V-w-+%T;Sd1J;9|8>oxGa26NZl2+f-rH{6W+m|LTTT-*h^Mmv!5$G_{CZ5R(w>P`?%97)xq~*OuX7^7f9PjSt~Slf#f6`y z<+)vW4@7wFVt6RKuT|9I@qL@GjIs?ZFQzCOZC-FdL^!;#8!PK}zI^>+D4LfA{SBpW zO^3g##C5*Hn**JvXN11sl;aQc?bPrCJjY>O^&R(O_JlX^i1fo>u#V zGc2#z=Y`%A1AlSV(!#mBM24OTa>)M8Vh z+tXe%ks@@mqCq};dLkK$3YaXdWuE3G7NUW{XvLm*g#Msu#8%9-pSq*t~sD#)T^hrD_tcfmq0UrMdERWlCr6}`Clmi zZ&5zq{+czQ8GvaKz}O|gSF~&-Yzrg#g`v|J28xkd-arvnn6)CD51vw*oaJLO10p_9kQOXUWgr8kcqAckyw z>w*z=qb)Kq=Q@^;LWNIh#rG`QBcq(1*`$ljV@9X!Z@^elJ7QA71FWW~*Ja_k*PZQ+E_-WYb@`dlN{j(x@P z0Yhaxi*dA!D=j0_pJq8)?pZO8d(nM0Yc-xiksN`>dq4=|lFgDH<7s{f2mN_xqG}(%D5^+6X!SG*`&hEcj10r(rq)r@t@X3H{7c(0OC zGutwV=e5cU=AF29rTYlt9zn>Do87!+mvxU6FeZ=!rc5&h1afV1D{SY7!wTD1bPt1W zZXx$m@~DhJITg0Q@_Lb%E#%3u3bX7#f8MZ=Glcgw8JR-n){Gl-pv2`;K07uIr3(<+ z{c{GLuFd1zutW9O;I*w^`2Cj3 ziN|~Vm~9uiGZ71Gr1LKN%g+09`V`+}kP2XR8Cwu~i7w(C#S2;Kdn>Li`{`+=%KYO` z3?rv?bz4xFDC2x(tR$mmd|zt@maxnqi}}bz-vd~w8Ug}#t>|Ur+<3~JLNlFQ|3jpS zde?{SfE!lozT7M;L1NCYR@a{Ug<^7sG1>Ugk(i_X1$jOl{1m8sm}x+VL2+-{3@$HTA5 zOFX%%Aexbs4RTwb!kKlP7R4{?j;#xlK8n@ z`8FBFQjj8b_M<3Dlo&?LaSM)u%;1pB)A0g%hr2mh_A*(zyI@}{P&ap^Wci9+fQWiI zv5Sk`DV`jQMO3#R*vpwb`C4f$BBk$9sqR+j1b2Wgq_61DQR-oFq7Yf{M3+0fnD5=s=eM3#0!F$00hfArE^90 zYFGr3&t@~~cBL-~sz*epL-`gFx@EM;W)$hjoQilba;bkYCZ=akFVvq-kmHMtX_#Ng-|rd00g?A?|C! zJydWDyYlG%DbVpzA^xr0v7)RAbUV{hvFs|Nr4@qcVSGX@{hdvnpp0bM%ay(!$3_J0 zGWHs-I%w?Lm{(TD0X{mI!6Gy?Bs2s~N(oh_1Yd{RLJf3}&7?DTD3Fy$YedMi0zmeBwAtEDBU^~u)B;9@c zWTH#?RYvd4{v^rwl?b!-sV|#8Y2Cwh$TcGEP-S6L&URdu~^{sX&sRCneh1-N~kxR6e(6edA=4 zf|0AD2V$$go=Tfx0}mKiAwWVGerCge7eM!czkvzszbIrpWoEs5Ku>RGkHn(^|4y~@F?2}Wh}|wD2$Ay zZKX8z35AL3+u)hn4H{T8y={cMy>Rn^Yg{OUa*NN=M(%}1y;y!iK{+w&i>)In8yr1h zW;%HhEa%o(&FmzIlar-do^stN6&?J&dakADX$C8>wXoT)bhL1;0H^V^5pFq3FKpT8oSIC00Y0_LJ_6dCo^f6=E45Dx(STO9q_nz=w(5Sqvyi z_uHPdy4F;!l8&dd8J~1-EA1!#1h*lIGRB3XT@({-xm=*2NNHojXwHe?c zk!Ydc#BIM~caMp7n8Y}VKT7)2i?)-}4&+a|o$1?6J&LLxfnOKej@pg8o31cx4MzYH z=6cIIRFXf$@lRjFB45KmlXN41R29qh=BhnlzQSudguW*0SHGvbRK6+a3}#J1@SFG(C^sq*W_VhpBE>-udI-yEFEg~^6c)$UJ>R)K zbPA6Z{BPWTik9yz;Uf~VQ^;v(E$Lc_cYpC-oomC#i^M%(n4s+wbCz5EX8M8?lz)-W z-{|}}G3Wf4RT#&~v?<>|Dzaq^ZU(rM0sA?e0k!nl8x++eY1AH$TxvFQ2^g_rm ze(7Vz9CAIvTYl)vo+AKV^@{nymUb>_@`Ka3KJHC6b^;wW3)@Tw1yu6G5Ce%05(aw- z-uuI^3*`o(Xof3sXOKw?2uGhxBP;SP>nA|dgq-nOzd+R1b51X69pPH+PQKk`rrBFI zH}CD3YVQ?qmwcQ;O1O@Y*U%pNb(t-S$p5Jm!&+lFbE|MFU}>{SYg`d7mDH50x2#)Tk+=_hIi6>uv^}bhiM24~iDbx`(4( z&)m^&77&L&-_>t+BSm^E+3P;GqB0>pox!Q%`%1qiIW@hTCLcRk-ahG(RrOsfJ`eNu zO%LLxNJW?M^^|lMVlwCqG;5jvz+HG)Qt1|5& z1isbSU>aGfkNVPmbfAIX))Zr2$=cYO(@ARd>W&xZ+5ONB_gE8iKIiHrjV2h)icM8L zpM<~95;E24dP6<68-%T0ZUz6On|f%rpEtGJa@I@l`JPoLK-apCoR&)ub`2Bdey(x% z@j9<$P10ShgHZ;tmWHMqRo?*;jD>AgJ%KmQ!a5Rlmr+<;%!jWX@)RN<|#LZql{(FC-b1j z;qE+0d0j$~^Nt*uPrAl~rOZdQTD9%GlBbid6Nea*)Cr}}Juds!s>ug)T5WpjJa^Ru zwA;&o!aY*PYdce0wPaS({mQu-eLuZf8cFbHfFBga)bhOw@#$wdYSDq%T(ump?#Qd< zp%G2hvJR&$rk0;Xu?C7Uwaj3<(sX8-=a4D291p3OTBe|_q;m&l)Iuyo)Uy8VNG%(b zc%P)J9=~ygOvja!zWOK(G%9HhzXbdo8*9(d5Zukp%c^=p#$2H*n8bM_pvznyb0E*y zIma4bj9X(jbdqAWT;|crG8;%vy6X?jD050`XEl{YcO0r1+$ky;-A<8iT{%$pdf8i%sypObV8I1y1g`72 zjCnN$m~8-OHr3`cJE6^kJ4lnweK|8W-I5?fNX5bOzdScPkks0>FR#ig;r+mdIieO zE&2pVg`H&Ww(B+AFNE@ddDZ_Qeepy}ZKKwihs5mtM;7(c=c$Y+Kfinf;78)XFABI{ zQ+lJ~Ah!ZCuet(;;n{>eCH?x9X2{Xh$hYlz(-4oHcMnbva&OAY-a7|>Z{a@!zDob2 z#^3A!Xi+R~B`?;~pL|u=Ia%hVWU6zj*v40+6>|4bGkv80U(B1k7s7fQfeObb-CSPN zEPobTh=ZiNIL!W&c20JR*Bl`alaO6~A+4LRgf=F1G50xUj&9P)52CXSI5>zr+a#(V zX!|LHpvG znvE>juc?iwr^;!$k@tJ7ig3UO)YI&Y_iJfWNNZe?I$Ry0we53B!2g}Dw#}f{xqM92 z@E3)3eu8MV6)l#yXWgYzHgy4$ZZ-tcqne_gC{*246Kd~Unnx}1ywd~3{eXET5#LjU zJl~Lu=T?^?cX|SftXNrDw9H=dJMz-oplCkQ7$%|5ymSw$p*&2W4^UY3lSS)bXn6^1 z41eCVMKx`0LU)F;2Z_~`VmkYqd}qHP={tKfvp$WFNd#)kywt~ERo|zTbN4I*Hy>WG z>{4A@cjHJ29&WAT4o+0x%tLw$MO~}DLXQOH9+;>dhGdDludoR@1e+(S|3O|(cXjme z-0tdQRy(rBkwV&}Ya17l4b)=yDXUc8T+TzUxn0Wl>UO-VFluO1SD_+9-t1!hd!m2u zKA~M8;BDx;X$8-f;=X(LuWjR4BO=!{QT-hHu`15YGxrudb;oTrDam#R^F;bGNXNQ^ z!!HZF1Is+0OmzpR451gzb4jKIX$%{ec%_!JvZO2u$)sFT9V1efxnoGGKcuo2c$q{< zkfnpr*X~ZG+L4MZ;VT93{X01_E}kFCXqlgqDH&hcDkPjKcUwfh5t`}Ap+3T?bnlu1 zO*pLMxmNTqfrJF;DqzB6HK zQP>s=f7LwinwA;%`NAm5Jy(lkSsmOVBHzB9ql3pT4Rv6dACf5@yfjz_-H_f?-#i$e z+lB{LeA~1Q4{p+i?-Zjeq2-&JE2PLd4d&*p(ZLv?6k4SAGt4zn*PqvA)u(}^-lE2y zn3q=`67P1;XD=?>vWig%A$zCB8o#xyD(1nyWewQ7Y0J8T*4Svo)7Qr-Z<#~+afDC0 z1LBl*n!-Ai<6c&WG8Z9T9upb*EG_A{Gw@jgt-bMGiA3!HxFqTx`hzP}8xK@Hx@?U2DooRRV$w1ZEU$$#HxLWM6 zah?*>f!D`om`H9mxW!*x@W&&Ab!KK3QeoZY+26EWOu~QOUk9WmNLr_F0w8 zL_LA_g{$hjC#v-UiCo@K(O~CQPlc_*ZiJKVV_DWn4b`YuV_E8q!flF|_N2Ua)2yb0 zJE;|i>SxWYDbQ0I7WoxZD*L5|2s1nc;%O5{T;jP4!A=j?Qcu4W5k>{Y`Aa55#wO`T z8q`sOYFDbLJHgv;M)D=y^PfW_b*}3``J(F5$%f!sfU-*qCh5F+lciKSS&7H1{j-9= z7rK3odTOwqFEmy9MT$U__K8uVA6S8-nn6!gFXa`%Ucv&&Zgx}ElP07{w^`46r0X_s%Yf%HUH*oa!IM?T2XD^aT; z4vD&-<*5Ok1o5?VP8pT2YP#Ed;|lA&OI>J3I>3?zK-Z)dpeGF<4&v%u=tcC;jZEy#FpPirbm z=MkynX6D;AY;>dogZ=(Z&Cax1qb|x>gnlBVhCx54$Z_laOY%$rGYMO)Q%%S840JcwIV*TdK;&FbhWq)EC%CaHj0=-;4# zqayhp`~>;@OH{C;*SU9dQnvo_d)Tr|y7rJu56><&x6B-|+BDUc)kD9|d@gP@CjKb8 zcLVXMf-k6cKH`(8-Nc;mtFVQ*;AgODkQKaz34ZGy5?q^O8yEc7k2etfZ?7TvadE+u z(yiMUa&f_1#RR8CBY0kZo_ijj8^IOu(VfH;Fc@rt^CgD;>46h7*+$3ObAUzs#k21?JM0pbQE3368p5V&)oDqPhT%oc%e{y+m@H-`(=rGEHJHDvuh+ z*7$tEa(f=A=hKmcbS_pFyZt%JTXe2}?M=IWCt*TnuC{acQ3#VYPV2u2zaLNI;H`f>&wG ze55Z?t$W3pG3f>Mcpne4ZYA`L3*tjtpaZ)4C_?QY4btdk+>nTCbPHBBn%C$wFH5Ag zmsP;qUXa#`ArRBr62@dJvVoin2>Hzwfg!t*1{j>7d7yx?vuP72Y<%ZAhp zq+t!fit``wSSWI`p>~m_?K9TPT)}Sy8VI!7KnEMHC6phG6~4S> z9sTV4%1~cZci{}yPw389{j4x~B*~cykMxVCATvPdSYL0+olreR$CDZ4~ar;|vnc z5r#8f%}zIgZ5HXXw^a5xvJ3h~xrH^wb2qI?wwgP=RZX&R?)1W%WYOH|MK#Idxzmel zlAY#G?^KiQI(K^4nq<$p(|ZPo!`40q_xDEic5=?mxEQ2V2-DaQv03@7B#%oG5Q_&~ zCfl1tvh$n4+FDq*ZGgq@&RQ$SFx7Q_@QIC!IG1Od085Mly&=wXhSYWIf1f?Eui z&G+!6;Icfnk~3H%gw=0DtdwElWgf^wRK^_zyzZH%WmF3ZN64K7@wOoR2+7$e#3Ydu z0QSffhx>#^yj{gje6cgqC9}K?pIt?z_OJMi6GY1MSv(sW8*b0U^>>3ow654UQD>nO zBos6E48z?-u17Nrecet}cEi&u_wJHc7B-kL86`%R3F7uj6;T#cGDP?82+pW4t0yt0zYe$%q!%1Za3nRG~CP@la=o;4E^(6NAv1VkS4-8lGhzY5b;I=*5F18Bsu};FK}>8!x!j0mG=_3)Y!>+D1ofm z^s+-l*N=l0e0j9NAE|%2Cp4!uG)}8euNKYl`{2frMXK_>4Sl#9$Evy~7IC^*oCd-v zquDa1fDOd0Jsp~9JhBF2T9@8I<-3`r1jEhF?P57s23|6w(Df3lh)YH7{l&;_ZNF@H zNf6I_GRkYCuhZt{-DG*JTI5`yE+hDLMlbV4|4iT-7wSfVFZ?S#5Ol1Su$3FiS#qk( zmWS`4?WDQ>nL)o&=sRW6tyC8a{cu6$Exv`~Y}k!JFCzc?o>}s0nmOdJ7x|Toa-|yz z`An582EsgqtkvXYtY#ax2@008$lSW2^Z`KKAz-HnwPeS3|1>*laDPbRqEw>?d9}Ow z=(3Lg9F(;V?EhiOGZ}e^X(j&`jpHto@rW|Em7u2;6XW-yEQJ%Gzzvyo++yLoQv78N zsfh2ft%jw=)*}M*N}gkl?`aYH@`=b+!Cpf=Q%?hIjC75!r+%<$5cG0=xC7`rQd97!L~1inYI{?MZvyX#$~%us>0FGnk$=No zgBmMCokl+6`m;(83HQ|jg_zm?1C>X>okV1Q47h)JWv+d`MSDz5 zLl%kgGIfqSg;4R1Vwc}UFjEU%MRTkPwqX~bLbU-uE)mb(X%9X%{rPhA7MWik%9f)~ zqFPtWBu5*l(-F)WW3z<}XG3{GD1Xr(Cgv36V)YfHc^*s4Y~50OBc%$&_*@YAroDzW zZMo{H=9SEjwcKO5x1QoQf?D6~*t*`bp*j8MmSWg5!!S{;I8!NFyIMSV;;ecH3+T6n zRuRY5G#ciddls?DouK?3_`ootp!pe zUOAU1Kk0~-=MvjSkVl2Y?n7+XLd4EYP0y8nd%=y0q;DHZ|Ll*LOkf1``DZUre_EP(XTpNc|8hIsiIn7L%LD-lAqDJReYgV8;+24g^2dCHjP=wwy z&^*yE%@vvU_m%)>n*ckT6YG=rQS#B2+{s+yhK+94m+cTn;GIWgeJwYoT5>bVeYVf~ z#-*zYxWHTWd#hOmi&=BZ%U{m;W*ho=z>D*iY{V~|2th2D?mHw%sHGw|FGJACFx{(i ztqEe;V!I_o7_JJKp78vNGFPXMGX{CXn|C}}UzX2CG%bb4%1ig&5ryoUc0Iq;T!fGS4Pc=c|ru zsRG!Pq(k|ZY^d4@l=1pc7oiEjhT9vTX@oc_L}*>U^9BfILMR5ICL4yq(i#@X*ty3o z3N|Km1d1`BSE?0r#hzNeBu=S&?nmHE40k0>@h_E&!PHwsPnVyd^~`W*qXr9>{+F6& zzX;{kSACJ6znpa`f-bA_xj3#xeE0Y!Mrs>Xg10X;-0Z}LAu6f_!>sU_>yRZqR1z#< zt*BW{uKb09PXwzK^XR3HN0x6qApeutJ}`TPzl>uSHlEFdV~DKBGGAbq#kJU*QNT6*UY zZu1as(njFAg!H?H^mh*NCWd(3H^f`q7gei+vO8*Y0r8VB+t4B9x{zzS1C0x*^T)W5 zxBW}Q_Jl1W7qYx}YM3%(H%oBTez;kVS`UNrL-0}==Nb3OIK5N5jqk{#2ym#JU52uw za>ZHmK+|#Y@R&HWlWsE;=V2m&+Ax{lj5rr@<;ujV1xhDu*Ge=>uz$gXc~kT$3C&clxlJ>SA1oyqP)D>$qE%Or7a2;~rX?z#T@9EQBsJoB|f9XNV29yix=T2 z0!wN@Jad4m!joMmvXwEiLlSe=!weF6XpCwz|n9CR;7rD z>x(}@{}^#@^yvVMg!r+)2JJW##t)Ul&H*Se-NxBfiJf^g^dA;>O2y=q442rFsZ(9Y zc3%HR0sXIFmpIJ&t*xp3BzFoGkx_fFC%tNFh~&Bs<>+@h@?~m+0!4FZeW)qe`))+V z>1=*&m_c=d$H<&arkj$(V#Q0QCb~~0hJ5&lY(J6x?Jf-h92)JU@GIU9n(iVF7T_BI z`bKKr3dfOKsFUHhr8*gY3)IQ*+e)1bzpcy9u+qwUqv{zZQdN*D=*t?WIZyw`y$dT< zp?h~4x(qi)q`S`j@VNRi<{Rr03wY!k&Z33$3yIwo2X=h{{@HwVqKrwqlf&52vnl%1+Mp%>ctCShzC~k0WAKStE4AOJT$42S zbZ;+uw3?^SCwpiAD+(ou>wr)-ynDOx!x8iyN^FNd_-915Tlwj^72nr)rI~s@7h6ej znLq_*It{LO07KeJP z87LESbsXx04WV+*qZRhdR9;$)obe*7Ps>f0GrU!?Qzf<1T zGd*x;X3#rVtf(B68oV*!Y4-^DQUP1C>+FK?j_`xa@Wf=6z( z8km%+7s4?5x;XYqjfaJ<1+y6WBX-=G@sI<_Q^KroTG)8l)*a698>oOHd66eMB12L^ zIAj8gn5O7sA4aK2Rio6~NKKWv?vO~+PK#Zc$KNf3pAqS;DJ5_vhMS48U+TV+G zf_v2_Ukn2BDT40&)tU3!6_`|_?m0S{tg(E6La;(_EU(&2uCbUId>V&Zu_08B8RU1D z8CXH74KC@N;jw$AwpKlw7MG$$j6Gbed9z#AaLSnl8tyUD0S1HYEh;8utiS>a_ZUKX0lPdg~8(_+sudFty6I~nV zAyHU`+U>8ZpO~oLod?|n*f~*qDfL+SZMG)ArcjxhTxl<{n&i-6*G#qaN}ZFbiL>qQ zS>k4Ya;3z8LPZ=E7W!aY&e*wpP}piYlh?G>F1%G$&<5=EpwzSt^Diae7L2}-{&&9- z{lA9(J%h52?jFiLw`5^s`NGuR?%90rG*IOH@?Etaw8mW}C%1f|yWBez=CwY{?KTE! zI^v1mlA`WYCt2MdjDwmHS-tsq3-dOPuu0N&7Q(ik-IgJ{fyS;m4(*ce7%xj$M~_e* zy9IO$57}yY^@dorJYz38)$-2fG27?VlZnetnsJMR@@3G5`dvU1NHZ%B z4JIVh#oAh)T>^{-mO_=XUFkd#e)oFn;UgCK{76+c!}TRMtcP)KN6N<-NQ+c&`$T82>c|Ot z1|PsrN6U*mW@64#Ro+0g4t2-#VTsw=VeI?;vmM6%w>{_ddhH<|vR6I$$yjgSVt9|a z-rp0hE9pM&l&$x&y+h2gV%pOaZ<{K1`6w|xSc%(4iId%$^(0!Ps69e4Qh#?JkeI3d zWqhiXe~}SQl=j}emK5*%lzp#KCFbt=?cEFp=-Wcbelm{D~$j9iCxgudb?} zl=Xe~5^fo|86%bN*7rOUVUhe@Bh)d4}!3Bhtu$NdH#Q-ek^ny6l&CNjVuZns&4s~ZUP}>Mjf~aO3ty~Ash-@`_~IJHa*gr_BCpVA z!XbDGXpOm#bBtVSGVd!!<`j{+wRtj6-y|}Pn?h!mk!hKzK8c4I`e{Nxx_R`kSnLUp zZ*eqF$G6gLn37jKQTe?LXnY|r<=y91FQ8*emgf0V+gLCi%=8{sroJ4jweNvEwSPG1 zoGF%{UzI&pYYESjz(_G~o>7}_~S3hzt+W33==Qk5qw;z;XJqQn?CqX`U!%smCX~m3+g_X8(P4EK~i-vON0m zyhRIg76$0rOC`zgSJJhs3S@1sA_Xl#3mLv&;{1+xbkDt*`U?9#A8W~V=4_E`TTeL| zjbvWs{jBK84M3N4PP$dU0oXZ*!jessZu0L`q(Y>N{TZJ9X&Lsq=%UW#cD&sjRJWIy zw+A^rK4d;XO+>(FHU(a?7wjcx6ZRy(qGW5d13YiO^3k;Dv*&J5^i#!s6O|~p=m%^7 zy5!WP`&tqEn(#g;>88OOZaH4Tq(t>CC?o3?JbH!Ii0^UkwwG9s!~AEHY*SYxSF4AN zS8%6lxFuMb4i~SWV#7v#6|FJHD=;#61vus3UKH&t8t{Ecspitorb> zBV9XGGPn93Ot|qe{bg3#ol@$9u`S7B)PER!*T_uOeZ~|0z54Gww~kzo;yxmsl)3x} z?=`(1>iUXuU+t1SsacKD@-fY`# zGFuT9ZyKy7KDu5ztm0F9XPn4O4`yqkqMN-l^5vzwYKuaY)s86rGL?SGWh!`+ZxR0g z3T13FLK)MTP$qIrC=>dB3H7mr8rnoC8V#cb-!)zWjyYvnQK9(;4v?72~nocvOTu z+Auu83$?3*gE9#jBi7uC2pzlD`RZ!u$sO*s@i4DO9wDcS{6!)81H6#k z1v|w*ZxR6x05E;Dg!sv;$e{k?pFI@Pu7`Ab7eQ6cw>n|9y^}l3Kl4#XmaRK!2;@Lw z%*i}OQ!)SHAsv~`e*AE8PbBj@Wbtbd9g$6aWaJy~y-x4m`yRxh+~A73jQ_a$E6I_V z^JlT|-$$6lK4#T%%~W>$G|rZyH5pnpI)oJk`n0LxU}bGBHk?X2>L)4G^BYd~01B zI@7r&S8%2-I0#A>m*;N@IwO4Af%0j0B9&Zagg))1Mnl8uI@qE@UxIJ!B{qftR{e;z zlw#K#-DMy*wU;K4b3@3-;*j?=2YF-&`9vJ@zUCnHjUvf8&qLztqUrtp%ZA#Ky#CG< zP=|P^&4u3IKevlU@R&x0^Cqe^%7Z*yZ?E@q!~Ks}(Z+Buw`w31xCiSKu_*Vl-s6*- zlePR%iT1e%;7%_xzwKXSHko5K{d-y5G1mRGiDfx%6HALZ_85PT%YPp26-z1WGq2k!`@j<9mQG0%)g>|*zckDLp@hG0=H z0TE-duY4HW5n+OkO#V-G?|luLIyIy2ev!I&t&F))P`Q-NcotLAEG4Sxm-jZMcij+b zw4izmgK91+U5XHHb5%#X(&zQuj_06HDEmkgwd^#Ld$4~w=6}k3-PMq@j+b7=KCEXR z_jU|dT81|HScbmET zHjP@t6Kg2e>v&u$)^7%xn4`-#R)W2ZPGXKmZL8;v@8cbqqR`>7VI3oES9*?2v-~3S z#(n7Q#ugfgZs3D&5c6BHzOsEM-lR3Z#R_cL5NWoXNYDYHppS%tYVY3!9UCT8o1nLB zT+A5~b0rh~72y~*M^e6dVNA+{|4&j5&5^P+jg$)KEp^^QD^%<1$Gb^+b(o-Uti`*- zrJJccOw6fgWH2>rdwt6d6ncq79T*q&fqYGeFxu8ELN_Vcd_n*E&sf1`8#JBcM%5G5 z^j|12)ocao1CfQC#sGS{+Lbld#5`hn^a|l@4OQeZF4Fu9BiY5I- zhw?#9CAdWdt`Ttf2_wOC0Ft`kdrVEZ-6r6ZvcLxmI5WhI2zax-$4_W1^n4@DSl;w6 ztTJuTV45_Pd+Hz%^%loBvh6mNVT37QqIwh$3feeKPSf|ap7iES6cg3`l#Vk+fSvn( zB>>2$ve&1OFyjtAU@ti%aH4uh=(^m6nlq5s+Dj8iEv;D_h(liA9OV1dv><1B$j(;y z693Yii;<|lBWm?~c_?#fHuKNTyENrxMzx2B$#I1~_J!UE9`lQ0x7vd=b%Sp8$<4|* z=K^HJ3jW$(>7W)dBQ&yneN5T=E9=j~Uy&bt#afNy^nUZd1~S)aSt+2X8~?lVGZyvb zf3W^P!Wy`9uGQ5srh#r=X7P+UE%%KNy@?lOsBc`5by_UpAri7q%RuOvaKHT!3b&3A zq6M|EGZrH~Kl5Dfn`6A=p3ANgub0K^=ol|cD9Pcqh>Z<2cVZwfC};G3Z|_wQggrnuBWMqxn=Tz#_NctgPaJKasaU z63A>unnd17xZUeL$4TJuIqq@7L-_%{q8Tv48#m`9?1hXmC*jmT*dUGifTMW{^l=^* zb`rJvv{9n&Wu)>Bg=AZCzEzCp+6A3MD(fJyXaR+cUG`HP@pakLo{^dUS&jv|A%KRK zj$?OCGR5q=sbfCy67<;2&Tl7CNS)yx{*rt)@991B%Q;VgPyTzEvdY}m%4(B3-E~m) zpF#DrI+duN$wO+2{38|TGfKesAO6cpVy;iD#AKk935#+O>4KVVeO4nj1Q{Y`fIKqXaf_e4Wi#q9v7G-UVsdS$_X7kDM$+%$0d24#9e2CQA_ zAId#S#By#*Jp6@L*CUP%0@@`cv7Ja9sQVFdp&A9!O>`tw=6=LYzw1m)L`T=VgLSh6 z>F=bSkc zLVvw~{F2YioW1s1Yp=cb+H0@9&p!LG_Rbq2&STNHTu)Evyb)sULd%^><|brv=l?n| z53QvHgUMZ(%5k6Cjp9#^(xa+B{FMfEqZ7+f(nqWybq-587mTp5twZU@fUOV2M#oOQ z=Tb&FalhP{QPxbnRq1N@Evz!{1Xb!W7jh+$UveR1Lm_Y2Lv#OMHcDsfvala(=2z%O z*}|$O(2<_8>O7C4Ra3MjH8|HFnHleiL)!k5seexDJ&3#==5wN#pCrs|wsi@~&@09!U&qzfq0z1LABbSSs5lCw>6h7ooQc`ZQ`WNNpBtkwv@Yzb)v za3KNEgKeAYQ&%lIm|(_ePF_`%-&^vp zR}}G)Ud&(x_9S3~`z(IWQ<8l|-zn(&(S}8Qj-UHJrb7_!%*jE`Z00u*JLJM%Sg_@z zFWH?%$~89LO~hO3!ds9mr>s-5W!+4)(*(_tRbT~x@u;?AYBSU>$MAKk)o;S_Adt;d z1u!T6KL3e+ltpfPILAs!bIk^_DhILN$D$VEQtkdN)3RlAJ4jtxyNi_O6Ms*VC=KoBUd(o1FXLa2M_&uxwI$j|^$@hHksbsp)t~o!#TtQr$JP$VfGGWLscjm z9SOVH2bw}Ao}t=Oj26S4>tj&H)w7`VvPw(oud!mS>qY7EWMrP*mTxep6giuB=kpeS zzMb)VW=xR`G%{)~efCX42a_C-PsY#)uv3A4JVrE3Ffs@31tFTQ3hyVq0CmE5V6Xdr zHi`9E{qtBo31Jq+sByn5W<2*Wt$Tly`rcO7d0%P?;%%~dSlAS7slj-g&FVT?hyfF9 z=J+EDpx3hYP0XmU6f(eiEJHnPD-^&vQn7r!$3uA`IU?qQt#@WK`F**Y$(M;COx^Tv*w)Z;AF`S|9TXJj>pb5i)f+HA&KZ2r??^8_q~ zGsb(6#yrI}-2C}b_#Vs~*s?oa^M)p{(sE-Bh7mGfOQ<@r1rqPSL>`4J7On~0`ntm! zXvd6)#%_qyTU4SNY3%j2v&J&3L$VM*V1N-ovx6&`*vvv}-si;7GB^}$IR?2yKHTF( zvG#Z|g$yTyUPqte$KEcpv@e-C$h0j;00(0jB6?0%cVRCyWLTBOY7a79to}KR)lZO_ z#p-s=ifXt-xVa*tqjRAHhCt?=zQpHxcidlM&nFK7XG2`WL*JdC*pL1yQa7ianVrP4&>%0{qEBj_QV z6**|va1puf>0#wZWgaA=OgF)V(Eku8a`Pu>wWGa&1h;_z*2EdE(WDyD(tJ3M?r_)6 zcX0AEp1Za3z7auit*T1vKHpyOK>Lk;Gl`SqY6y{4HZ zpN^7k4W6Dn+tJ`FFqw=7e}n?aVLyJY+x|G1U!FSszBM#R!Omevb}MzUj9pQ?3_X_N zEsq6TD&Wr5L`>!&5vqrU1*@GGK@~VkD1@iF^VEINGk@2L0QqW>h?VH#_{AvVu$)%} z7Z7DZjVQ>~?@leTY*jKBBh&780yvXmErHqQZ?7wpct^nF0KREApOxB{qfUB`0v>{Z zs`q6Er1`2JrULyxW4^LqByZ|A7y%y4VH<81@>dW7+;=@=&KAW zAlr6fo0x&y@h*w3CyQR7+Y-^8X;ow6j&xvAb-|XFk(r77w@9@VR4!#qK+GV`E}3(Y zX)8kjCu{5-4FeggwHxskviqc)+RC>Nc}n217Mv6X&HpoVUq!B~u)8r9W-^~erd^m| z|44XEMDwLbqa~#o^%BK*$?O|;_8~bnk3}64ZnrZxlwDMnU6f>A?kY+Ei)>!XDoUvZ zzhIjl#CtH%X2SPw@}2DPm5}P~bFC^!W{&2&&2wP8=KzO44u^6H4ctTWSHhwn=IM8n z0L{+(sm|Nppbx1N{Cfd|k7&B&5*;^p+vQ2_t;n@iCV+%yaryk+3EUphynn!Q*OHGc znuyrv*lZ;8BFzS3r#%@Gu$85=IDZu}kfsnu@B4`#Gxa!IfO% zp%7d;QLoj_o|bmk5BVb%-8fdLn?K1ovHfc>RowvIaMmg+ zzXPgEevgX(gMGlt_3S6qq0aveb$1k8{FvX`XOAQ?zvI)HGIampGn$kZ=w%A@!yo|G zBIH+-r_;mt9i*psQ#}N#^b53)zo7`5{&%GBbkQ$JE++kap?7@m?}>JSpgD7UfmHw| zb9)H<7;2TC5E^5Rt+(#8XZR)W>tW~MANiZFo`bc(79r?S)g$#itQ4{!9N2V|O)LB% zW{NV7C>H+nKz0ZJr*kaJklaU*Yg>i@{x{K|nRxj&1TYv453A{)W3}kTcQN`?lj`0s z7I#d2{Oe8oa=$QWDQW*+}3?0W5zV)Cv9K zm60$>#UB{6A@3rcSL#}d{y$I!?rgk=X$5Yhv)n_n+NVuY9YBVV zzAgnOrrS3uo^nk$p9B(?|9GQhydd9#Nnje!t)a-fG~GP41B)FNbGY(6gv_Z!owQt@ zM7h#BBJ=!TN;8B<8LDwV3;_pdgU3wGqX>&82*sX)j7KrGeGqL}bp=pEQ&nz;ZW`!9 zD`>@!q1yaiCw0&&Wg6=Mu4R`qt)`Ksrl(&(f87IS?5{tQ-vNDI;MwRBe1Wg-c!da@7~<_GyY4*zZdXDWd*Cl3!?*m@$3*CZ({R0CLG=>V z>q0%3sQ)Rb46K~@Ok4OXiC@Bc#?aw#XTfD~XQTbGg5SRkb=C*--S#RBt{zxW>Lb_> z3)!1g`dupSsA@Vu@gK5fEN8(rDA-!@M<<3ydI)Eo-n<8GH4$6iowH68fNb|XV%seY^Cr8fmF)fS}F5TRLavU ztyM|PZQPoE5aiKL9{J^WdQW^_(IOPk_B8%$F9f0w2 zZ5>9a!#}mN&746+VDA7nxX(6;9-{pMpyP~g5=6~5y1{2r`r{ixj(3b7VM12FPo*fb z*!%;ikUisa5oJJq3>LBy`y7zztuqJziVb~(g|849+0OQiD<_F{^*r^+AK~S$zl~lag8*5~X?LEwnp1RJ zBm$@wTY2B7U=Mq#JZ*qyBqtN+#V;?yG^G$YC6s!?`N`$WiVSDB@GJ!<^n70LpgxMk{Rj z5vyjU;Ij6zxYye#>U1;#24f#F9tTD)5fG8^eRb-FGpuMxvVVYVI~o$eR&rdD z58uok2ZN8n-)1JFEf1zT=%r6BanWN?;?L88OO{uSnq za^-?TV27_7r1mLMceX_PN%9i1T@5C%rvcLvrD>SjMDE0vT_?`M%e}6aN9=S@l|KA7 z+1&ur(8RzG&cs{iG3G4&63M*4zgx))Ci4T2T1gzwH5i&4c*08JVd25h$$|fCB}X$k zCGeb;#NF$`&`E*4R+52iXhLAWm3)KAF@ZO%_3oE&aNh2`oEM21>B=sBX`>}QbLq7h{p8v69P~{AwU+C99a65xCY$BDx<8nSmRvJFXa+XRt%K&SXlA+F7z-d~I>*Lu_6e=A4sPQ0hIpACc+*R2ND-2$G|N8xnA(Q3&= z#K8AsX}X_x)v#`NJFj^Q4GX1)3N#|c)gGph{_erdboc!_Xse1`)z7dLSMZbEuOU9C zAKM6bwd=@HOu%;i_D+63_&mQKC&U_Lp2m?h+qNG2t0f9dKXe*``%#0B6SiG)q(>LR z#ikzlnm7piwz$CV18i^~!qVE~Xl9dUqtL9eX$00IH1N|Xqe-2;ADdD3p`C5O$pHLa zx${--KPq<#Wf-_TOKyQ30!-vye4N~+q;kt z%>#?-+xRkJl5ZX;N#>GW9*1GQePfK}_^=ifxUPV1B}b*kbDoE=Y&r(#9i9Q)2*(k- z9ISS1J<86fZ3@%QcM2&3Vf~csiEpF2O}n@~;*w?@^{x&~5Lwm@dX5eyy;n#Nlbt(D z?UlQRiCNpXGLLP1ihXHrI!RxmQdmQlda-QQYb0K_koqfj54y$q&Jb}f(c&x}Mx2u& z4%B3`%jLTprf6Qc@5D0(*gyA;rkW$k5QfZv>het;z>Ln1K{hV4egz(NG zgpaxj^E4s$u;8JkA%yo1A?$M#=4--!68;w&&8?6Jgm8@0K1+nKV9OL(!7xf0JUdG% zdDQXy7#{X)Jp{Fbi^Y8V4yJGVj5>;q30;+%g~D@Q&>JPU@Oeo~li7Gzr;cF|61>d= zJ;`wePb80xNcEivy*>3}20fwCb5a+b2;G-rTw-w#YIO9<6QOseq8apdjh>r2bfP*2 zQrL-ZbMMgTBU4-^AGWHY)T9jh28}*S&NmwtJ)HUjf)h*jSaK3IGm>AU_?4SpGb~k4 zisx!rRPp2(;*L%i4~rX1-I&4kCb46OI|PhDY1tG`;T=rPDh7z|r`I zF`VaT(k~o@QJ`}x{gd$=>cdi@oVs1|b|09yeFt%KUa-BD-3_HzpE*R1$A%d3bz_Aa z9_>bdo5ESpM@}J^{`_L5|T+JkEpi+6lX3cRF2j{$@?Ii(eEL&%ehYcX;;()N#?Y%j#CJ=|-A_2i@a z_z#>k#J6Ybk!gqLGmK9=JfF+=u|38nqH5dIPTO<87~@Cwz=d(?oHGUVx(x#UyRK`j z0%_F(?vSa8cMFk|seX5#G;ysP3)c<;u4(#Oirjl_DR%4-6l+M?ILhV<_+Fq}aG!?n zu^C`o?lBQX%)z$etp^>j+J#vVfOE2d_X4QCz+@os3Y9%wU5ION_#QzK#_A(fB|-Dm zqXeaiHBy~Pkf{;`eMrz`wTIWnOkAI%p2W2-Mw|RlBR!H!eH3hY5_YSuC*e6HT&TW| zYZWHIOTbul4X)EG0wJa*VUsqvwF zg_pJt1|DH*GHQnd=m!Ho*K{M)IHvaL)JVmVCh!hZ6Hxw#Or@C`9~!3)F!dLv3SiwY zGnG3Fsgpvv>RG0~!juWS`3X}MOr05;pdLU<{R@0qpp~GnsPExgZ6TnGfEj8V0dWFu zCZI|663|Y-YXsD*E?%E?Hm-}*T4s6(xR`)ybrAuT1l&ZxVl|(DnFRcdfD6=Y0wxpi zB?0wn8UZ;3Ty%~AMiX$j1c2KJI8S|wYxOPxy9p>&2MPEszEHtgU&ZwyT%(=;k=~K9 z!y|XtMA|rHj=IbCpgHQ*kRVc!`L2**vQTtiTCB?9tAz7DH;s{o<_srA3(bU zc~}_2=rg-$~Il&`@d1U?~rL>7E0;Jc<{J`XpXl~Hs8f=Phy*m~fn z;EYXO{WBm07DnH~?Qu9=OuK64+xf$5aR7>kRxsGJ#dhovPL?D4*TFB?0xth5xw-~B zXF$>#TT)lXCS;^9wPez`!MlbtkqiwA$++9waPk@eVj^y7CQuqa7k^{|9)6ZaNS}vh zXiQ(mMq9~AUe3l3HysIlO1|Yy+u<2I9rg!sj!-l(d^Re^YusKNBpK@HgKZM(V zq+KxNLzw+{l6Ap4|D%7y$D3wCj1OKnq~VT6P2ZNW$|VYIZ? zHn$qV?w)8YVftgSXl#LLba*3$2{Rn^`piNj5>1$$(PV_zg=R3qp9$lPIq|;u9I%;V zkYRIcz2S|={jo$a8ZkS)!EiF>H&)fvn?8Tc--%D8!*8^Mp)a^T7>~vzuO}Am@cV#i zc6h^KBhlC6H@lMFm`_V$1S39wuNh4y%xI?>^G3S-0Im0igFbUvZHve7#$w(+6XgcG zBHjLoRRLq!%I0jM%Z`IAy}Z?vjWc0fchr{*`%(P~J`={#Z0pQZ^4- zh?y5hQRi5&vBg;3T36ppcF&kD`WE$(ev7om-?3dv5r6ER*u$w@yn3rJ_M*Y7h$)rLRf3;W}7b46n_%p=-k1bt9@urmmziD(qCNEaB3 z9hu-;gim)+^DbOjXhMO7YYH7u9L?@Gl97&Z6cSlw8^Lhc-{lRP9RY95+mZ0c3`;1d zgh;X*jgl$Ro%Y6HB{4tfH8gJ0faA#?S~#j**wDCqb-kz1^!N7o!QJPsg9FpHU`D*% ze$yBAYbM>^L`MMnfG(L~6fPW|%Mbz=FQc&3MN;TlwcMR7E-W_5lUiDEzAMM(VE06$ zI~h&{d%}I_U7avhpP6X~)V(7aiwD>HP2H=FLN}|zA{XCyUnJq}wVDe(8`Y1YdC`T9 z!s}gl!AM86yT_Xd(u|@#eso2sZ5UwOC~Wq$u5MnHMV#<=p|zs0yv}fRgMlxwf|2z^ zX{HXG?c|R{lU>kpHcHIj6^z3W;tS0bNM&P_e z6k{ksL+zRtPpcuWiT6!@oq|cg+C;jQMkZWY{ZWO6H%*?&6dksT0IShsFYoU zu9OP348$mGZFCVQ0#J%eMR52;Zbz3l9jEN>7(-0j!OanoLZf|T|wjx}m!~@Y} z*vC?`DrvQOb8UlBINK#;pq_j=IZ1={49a@{# zm^Z{bTMVRMuP=xpj(t=6J@Ipy8g?h+2{YhDuMfk;hs`pJn}dW;6oBaX|I}FFFFT zTT%}CkTc6Sl4ISfR?mf=W)~A{2sy4-nX}7^vNaL*w)?}!J5&vp5r>*K9g|~)7*802 zLGkn`BJw);hPR`G10_2so4nia3wjfNM?%XbSq*_*(-m`eP3vkIV=VR!&L#_0@uyWl|9MWP!JHZ#F5lj_QZEOu8I%HJGDxu(P?3ry41 z4<$M;HH51~@)C$UVj|F$n8w%;gF-PbOG;um!>L=$AC7il*v9B&#Dmu&3=sd?1xL&Q zHe>j9rrn|A+1ad_+GzmE_UeuuTD=QDJ$`QjKZ#^4 zVk827d_|2!Ea{gK0PUUt6DZ2q5I|6AT!tXt(~RlM>Qxu(upX1M3q1($yW>5T6=g<4 zOA~)e1O8rPLoiZNj#?O(VU`r#5I0Kwy?zbtN(S|X50k1=eyu}%joi%S1pvv6wugvX zT}e)IVG&nXG9UAxWN$?|Y3q4u1L9Gm6d%d1u4J}#31B?Y4Z*rAFdb^BC|}l4VZ_!0 z5;U4GZRo9=Q&Db|wnLi$R#)1<>Pn-jwsmETQCDv?H8);pSm6xjm_EqD?R^Qf z9Hs?E+@CPoqtUS63r-03jST|UQ&0l|nc?s42-DN^6E-6L4QTS7KEvA{$3!&-E-@pF z1_{T}j6NUQ5pD*J*&a;90hG+HL;zEjh|%rs#SE!q9U81>9m7}Pb%qlxGX@ii_dvVG zEK6js57ME77;#>)>jr%WteKx01NO{M4TSOeVM^;cqwO>{2r@F}Rx=wq0yeJkjq47~ zi1D+mws|>zme#E@nmrd9D?MwB)|IOpmSVyci*~civr{59+c>+3K(7F`(QtxpnNL$K z=7{lxPv+bm3|@^6xt8`fw9ePl8pN)oWsRuJg3&eN3Bk1n4#RTTs84rK5U5?IG21X_ zYh_Rhh}GnQ*rf?{Us$6z;e`RjVXr}b?U$d*h7775Mewe}yrx63O!FDj=25tE%=OHJ{&=m6a>1Kw7;Vgq6tmlr1l-Ek^~j z{|qe77!96Pt39n{bJ1AK8dt0^N--WJ49}XT#%A~dPyGsmi!RlbbHct7X_=DVn(C73 zN_5B4a>;XYG{_gmge_wD!tuUt^wM@;Si{%UR2#Jo%hB_sUmCTS*0(l$u&{s?AwD#^pPRA1``y zTW37kuD=PAI_Q4e#*W)2y}3=g^D;4949O+$t{A%Ibm@U|Nz=sx(0;wuvE2p|il zZj>-m$4^hN!zjTrO57+x@DDRb$Y7X8?K&(KnR>;@v^ksW(IJcyc$OlwVs42y*;P_r zR*wD*e-sOL1+Y@nQDl~v&8-o5u~{2QfXl^DWpur4!C`SrcMW_PdyD}+%rdK7IRi|Zi; z#bYI>x1^!sc!cA$umEktMl}~Xal~ReC6hCIdShgx;mt+#*;bBZLycH$(18vnxtcrkbl|HswKViOa9Vws9ap<dS9F-}HfLQch5 zqk=m~oSoIuA~IvgzpHmF2~g{n(zS6EF>1fq0!fIWc}4$Uyc+*uUg-Yjq76Y`BH%Iz zR!d-_L!gNM=mLf+-3()~%37Dflumb51Qo${+&;LhZq@R}%UZB(yK40sc>MahrOkEl z`^%bEx6vhAzi`W7gK11L2K2bUgFjMd!*&Fv>ktHH{rPYgW<5Uczb#1Lg3lce+**4s cZCrX05Yfik1zXqRd97 - {$ELSIF "(" ident {"|" ident} ")"} - <...> - [$ELSE] - <...> - $END - - где ident: - - одно из возможных значений параметра в командной строке - - пользовательский идентификатор, переданный с ключом -def при компиляции - - один из возможных предопределенных идентификаторов: - - WINDOWS - приложение Windows - LINUX - приложение Linux - KOLIBRIOS - приложение KolibriOS - CPU_X86 - приложение для процессора x86 (32-бит) - CPU_X8664 - приложение для процессора x86_64 - - -примеры: - - $IF (win64con | win64gui | win64dll) - OS := "WIN64"; - $ELSIF (win32con | win32gui | win32dll) - OS := "WIN32"; - $ELSIF (linux64exe | linux64so) - OS := "LINUX64"; - $ELSIF (linux32exe | linux32so) - OS := "LINUX32"; - $ELSE - OS := "UNKNOWN"; - $END - - - $IF (debug) (* -def debug *) - print("debug"); - $END - - - $IF (WINDOWS) - $IF (CPU_X86) - (*windows 32*) - - $ELSIF (CPU_X8664) - (*windows 64*) - - $END - $ELSIF (LINUX) - $IF (CPU_X86) - (*linux 32*) - - $ELSIF (CPU_X8664) - (*linux 64*) - - $END +Условная компиляция + +синтаксис: + + $IF "(" ident {"|" ident} ")" + <...> + {$ELSIF "(" ident {"|" ident} ")"} + <...> + [$ELSE] + <...> + $END + + где ident: + - одно из возможных значений параметра в командной строке + - пользовательский идентификатор, переданный с ключом -def при компиляции + - один из возможных предопределенных идентификаторов: + + WINDOWS - приложение Windows + LINUX - приложение Linux + KOLIBRIOS - приложение KolibriOS + CPU_X86 - приложение для процессора x86 (32-бит) + CPU_X8664 - приложение для процессора x86_64 + + +примеры: + + $IF (win64con | win64gui | win64dll) + OS := "WIN64"; + $ELSIF (win32con | win32gui | win32dll) + OS := "WIN32"; + $ELSIF (linux64exe | linux64so) + OS := "LINUX64"; + $ELSIF (linux32exe | linux32so) + OS := "LINUX32"; + $ELSE + OS := "UNKNOWN"; + $END + + + $IF (debug) (* -def debug *) + print("debug"); + $END + + + $IF (WINDOWS) + $IF (CPU_X86) + (*windows 32*) + + $ELSIF (CPU_X8664) + (*windows 64*) + + $END + $ELSIF (LINUX) + $IF (CPU_X86) + (*linux 32*) + + $ELSIF (CPU_X8664) + (*linux 64*) + + $END $END \ No newline at end of file diff --git a/programs/develop/oberon07/doc/WinLib.txt b/programs/develop/oberon07/doc/WinLib.txt deleted file mode 100644 index be342ad92b..0000000000 --- a/programs/develop/oberon07/doc/WinLib.txt +++ /dev/null @@ -1,312 +0,0 @@ -============================================================================== - - Библиотека (Windows) - ------------------------------------------------------------------------------- -MODULE Out - консольный вывод - - PROCEDURE Open - открывает консольный вывод - - PROCEDURE Int(x, width: INTEGER) - вывод целого числа x; - width - количество знакомест, используемых для вывода - - PROCEDURE Real(x: REAL; width: INTEGER) - вывод вещественного числа x в плавающем формате; - width - количество знакомест, используемых для вывода - - PROCEDURE Char(x: CHAR) - вывод символа x - - PROCEDURE FixReal(x: REAL; width, p: INTEGER) - вывод вещественного числа x в фиксированном формате; - width - количество знакомест, используемых для вывода; - p - количество знаков после десятичной точки - - PROCEDURE Ln - переход на следующую строку - - PROCEDURE String(s: ARRAY OF CHAR) - вывод строки s (ASCII) - - PROCEDURE StringW(s: ARRAY OF WCHAR) - вывод строки s (UTF-16) - ------------------------------------------------------------------------------- -MODULE In - консольный ввод - - VAR Done: BOOLEAN - принимает значение TRUE в случае успешного выполнения - операции ввода и FALSE в противном случае - - PROCEDURE Open - открывает консольный ввод, - также присваивает переменной Done значение TRUE - - PROCEDURE Int(VAR x: INTEGER) - ввод числа типа INTEGER - - PROCEDURE Char(VAR x: CHAR) - ввод символа - - PROCEDURE Real(VAR x: REAL) - ввод числа типа REAL - - PROCEDURE String(VAR s: ARRAY OF CHAR) - ввод строки - - PROCEDURE Ln - ожидание нажатия ENTER - ------------------------------------------------------------------------------- -MODULE Console - дополнительные процедуры консольного вывода - - CONST - - Следующие константы определяют цвет консольного вывода - - Black = 0 Blue = 1 Green = 2 - Cyan = 3 Red = 4 Magenta = 5 - Brown = 6 LightGray = 7 DarkGray = 8 - LightBlue = 9 LightGreen = 10 LightCyan = 11 - LightRed = 12 LightMagenta = 13 Yellow = 14 - White = 15 - - PROCEDURE Cls - очистка окна консоли - - PROCEDURE SetColor(FColor, BColor: INTEGER) - установка цвета консольного вывода: FColor - цвет текста, - BColor - цвет фона, возможные значения - вышеперечисленные - константы - - PROCEDURE SetCursor(x, y: INTEGER) - установка курсора консоли в позицию (x, y) - - PROCEDURE GetCursor(VAR x, y: INTEGER) - записывает в параметры текущие координаты курсора консоли - - PROCEDURE GetCursorX(): INTEGER - возвращает текущую x-координату курсора консоли - - PROCEDURE GetCursorY(): INTEGER - возвращает текущую y-координату курсора консоли - ------------------------------------------------------------------------------- -MODULE Math - математические функции - - CONST - - pi = 3.141592653589793E+00 - e = 2.718281828459045E+00 - - PROCEDURE IsNan(x: REAL): BOOLEAN - возвращает TRUE, если x - не число - - PROCEDURE IsInf(x: REAL): BOOLEAN - возвращает TRUE, если x - бесконечность - - PROCEDURE sqrt(x: REAL): REAL - квадратный корень x - - PROCEDURE exp(x: REAL): REAL - экспонента x - - PROCEDURE ln(x: REAL): REAL - натуральный логарифм x - - PROCEDURE sin(x: REAL): REAL - синус x - - PROCEDURE cos(x: REAL): REAL - косинус x - - PROCEDURE tan(x: REAL): REAL - тангенс x - - PROCEDURE arcsin(x: REAL): REAL - арксинус x - - PROCEDURE arccos(x: REAL): REAL - арккосинус x - - PROCEDURE arctan(x: REAL): REAL - арктангенс x - - PROCEDURE arctan2(y, x: REAL): REAL - арктангенс y/x - - PROCEDURE power(base, exponent: REAL): REAL - возведение числа base в степень exponent - - PROCEDURE log(base, x: REAL): REAL - логарифм x по основанию base - - PROCEDURE sinh(x: REAL): REAL - гиперболический синус x - - PROCEDURE cosh(x: REAL): REAL - гиперболический косинус x - - PROCEDURE tanh(x: REAL): REAL - гиперболический тангенс x - - PROCEDURE arsinh(x: REAL): REAL - обратный гиперболический синус x - - PROCEDURE arcosh(x: REAL): REAL - обратный гиперболический косинус x - - PROCEDURE artanh(x: REAL): REAL - обратный гиперболический тангенс x - - PROCEDURE round(x: REAL): REAL - округление x до ближайшего целого - - PROCEDURE frac(x: REAL): REAL; - дробная часть числа x - - PROCEDURE floor(x: REAL): REAL - наибольшее целое число (представление как REAL), - не больше x: floor(1.2) = 1.0 - - PROCEDURE ceil(x: REAL): REAL - наименьшее целое число (представление как REAL), - не меньше x: ceil(1.2) = 2.0 - - PROCEDURE sgn(x: REAL): INTEGER - если x > 0 возвращает 1 - если x < 0 возвращает -1 - если x = 0 возвращает 0 - - PROCEDURE fact(n: INTEGER): REAL - факториал n - ------------------------------------------------------------------------------- -MODULE File - работа с файловой системой - - CONST - - OPEN_R = 0 - OPEN_W = 1 - OPEN_RW = 2 - - SEEK_BEG = 0 - SEEK_CUR = 1 - SEEK_END = 2 - - PROCEDURE Create(FName: ARRAY OF CHAR): INTEGER - создает новый файл с именем FName (полное имя с путем), - открывет файл для записи и возвращает идентификатор файла - (целое число), в случае ошибки, возвращает -1 - - PROCEDURE Open(FName: ARRAY OF CHAR; Mode: INTEGER): INTEGER - открывает существующий файл с именем FName (полное имя с - путем) в режиме Mode = (OPEN_R (только чтение), OPEN_W - (только запись), OPEN_RW (чтение и запись)), возвращает - идентификатор файла (целое число), в случае ошибки, - возвращает -1 - - PROCEDURE Read(F, Buffer, Count: INTEGER): INTEGER - Читает данные из файла в память. F - числовой идентификатор - файла, Buffer - адрес области памяти, Count - количество байт, - которое требуется прочитать из файла; возвращает количество - байт, которое было прочитано из файла - - PROCEDURE Write(F, Buffer, Count: INTEGER): INTEGER - Записывает данные из памяти в файл. F - числовой идентификатор - файла, Buffer - адрес области памяти, Count - количество байт, - которое требуется записать в файл; возвращает количество байт, - которое было записано в файл - - PROCEDURE Seek(F, Offset, Origin: INTEGER): INTEGER - устанавливает позицию чтения-записи файла с идентификатором F - на Offset, относительно Origin = (SEEK_BEG - начало файла, - SEEK_CUR - текущая позиция, SEEK_END - конец файла), - возвращает позицию относительно начала файла, например: - Seek(F, 0, 2) - устанавливает позицию на конец файла и - возвращает длину файла; при ошибке возвращает -1 - - PROCEDURE Close(F: INTEGER) - закрывает ранее открытый файл с идентификатором F - - PROCEDURE Delete(FName: ARRAY OF CHAR): BOOLEAN - удаляет файл с именем FName (полное имя с путем), - возвращает TRUE, если файл успешно удален - - PROCEDURE Exists(FName: ARRAY OF CHAR): BOOLEAN - возвращает TRUE, если файл с именем FName (полное имя) - существует - - PROCEDURE Load(FName: ARRAY OF CHAR; VAR Size: INTEGER): INTEGER - загружает в память существующий файл с именем FName (полное имя с - путем), возвращает адрес памяти, куда был загружен файл, - записывает размер файла в параметр Size; - при ошибке возвращает 0 - - PROCEDURE CreateDir(DirName: ARRAY OF CHAR): BOOLEAN - создает папку с именем DirName, все промежуточные папки - должны существовать. В случае ошибки, возвращает FALSE - - PROCEDURE RemoveDir(DirName: ARRAY OF CHAR): BOOLEAN - удаляет пустую папку с именем DirName. В случае ошибки, - возвращает FALSE - - PROCEDURE ExistsDir(DirName: ARRAY OF CHAR): BOOLEAN - возвращает TRUE, если папка с именем DirName существует - ------------------------------------------------------------------------------- -MODULE DateTime - дата, время - - CONST ERR = -7.0E5 - - PROCEDURE Now(VAR Year, Month, Day, Hour, Min, Sec, MSec: INTEGER) - возвращает в параметрах компоненты текущей системной даты и - времени - - PROCEDURE NowEncode(): REAL; - возвращает текущую системную дату и - время (представление REAL) - - PROCEDURE Encode(Year, Month, Day, - Hour, Min, Sec, MSec: INTEGER): REAL - возвращает дату, полученную из компонентов - Year, Month, Day, Hour, Min, Sec, MSec; - при ошибке возвращает константу ERR = -7.0E5 - - PROCEDURE Decode(Date: REAL; VAR Year, Month, Day, - Hour, Min, Sec, MSec: INTEGER): BOOLEAN - извлекает компоненты - Year, Month, Day, Hour, Min, Sec, MSec из даты Date; - при ошибке возвращает FALSE - ------------------------------------------------------------------------------- -MODULE Args - параметры программы - - VAR argc: INTEGER - количество параметров программы, включая имя - исполняемого файла - - PROCEDURE GetArg(n: INTEGER; VAR s: ARRAY OF CHAR) - записывает в строку s n-й параметр программы, - нумерация параметров от 0 до argc - 1, - нулевой параметр -- имя исполняемого файла - ------------------------------------------------------------------------------- -MODULE Utils - разное - - PROCEDURE Utf8To16(source: ARRAY OF CHAR; - VAR dest: ARRAY OF CHAR): INTEGER; - преобразует символы строки source из кодировки UTF-8 в - кодировку UTF-16, результат записывает в строку dest, - возвращает количество 16-битных символов, записанных в dest - - PROCEDURE PutSeed(seed: INTEGER) - Инициализация генератора случайных чисел целым числом seed - - PROCEDURE Rnd(range: INTEGER): INTEGER - Целые случайные числа в диапазоне 0 <= x < range - ------------------------------------------------------------------------------- -MODULE WINAPI - привязки к некоторым API-функциям Windows \ No newline at end of file diff --git a/programs/develop/oberon07/doc/x86.txt b/programs/develop/oberon07/doc/x86.txt index 7f67425c45..c1d4535151 100644 --- a/programs/develop/oberon07/doc/x86.txt +++ b/programs/develop/oberon07/doc/x86.txt @@ -20,15 +20,17 @@ UTF-8 с BOM-сигнатурой. 3) необязательные параметры-ключи -out имя результирующего файла; по умолчанию, - совпадает с именем главного модуля, но с другим расширением - (соответствует типу исполняемого файла) + совпадает с именем главного модуля, но с другим расширением + (соответствует типу исполняемого файла) -stk размер стэка в мегабайтах (по умолчанию 2 Мб, - допустимо от 1 до 32 Мб) + допустимо от 1 до 32 Мб) -tab размер табуляции (используется для вычисления координат в - исходном коде), по умолчанию - 4 + исходном коде), по умолчанию - 4 -nochk <"ptibcwra"> отключить проверки при выполнении (см. ниже) -lower разрешить ключевые слова и встроенные идентификаторы в - нижнем регистре + нижнем регистре (по умолчанию) + -upper только верхний регистр для ключевых слов и встроенных + идентификаторов -def <имя> задать символ условной компиляции -ver версия программы (только для kosdll) -uses вывести список импортированных модулей @@ -81,6 +83,7 @@ UTF-8 с BOM-сигнатурой. 13. Возможен импорт модулей с указанием пути и имени файла 14. Добавлен специальный синтаксис для условной компиляции (см. CC.txt) 15. Имя процедуры в конце объявления (после END) необязательно +16. Разрешено использовать нижний регистр для ключевых слов ------------------------------------------------------------------------------ Особенности реализации @@ -137,6 +140,10 @@ UTF-8 с BOM-сигнатурой. PROCEDURE WSADR(x: строковая константа (WCHAR)): INTEGER возвращает адрес x + PROCEDURE VAL(v: любой тип; T): T + v - переменная; + интерпретирует v, как переменную типа T + PROCEDURE SIZE(T): INTEGER возвращает размер типа T diff --git a/programs/develop/oberon07/doc/x86_64.txt b/programs/develop/oberon07/doc/x86_64.txt deleted file mode 100644 index 092fbce6fd..0000000000 --- a/programs/develop/oberon07/doc/x86_64.txt +++ /dev/null @@ -1,397 +0,0 @@ - Компилятор языка программирования Oberon-07/16 для x86_64 - Windows/Linux ------------------------------------------------------------------------------- - - Параметры командной строки - - Вход - текстовые файлы модулей с расширением ".ob07", кодировка ANSI или -UTF-8 с BOM-сигнатурой. - Выход - испоняемый файл формата PE32+ или ELF64. - Параметры: - 1) имя главного модуля - 2) тип приложения - "win64con" - Windows64 console - "win64gui" - Windows64 GUI - "win64dll" - Windows64 DLL - "linux64exe" - Linux ELF64-EXEC - "linux64so" - Linux ELF64-SO - - 3) необязательные параметры-ключи - -out имя результирующего файла; по умолчанию, - совпадает с именем главного модуля, но с другим расширением - (соответствует типу исполняемого файла) - -stk размер стэка в мегабайтах (по умолчанию 2 Мб, - допустимо от 1 до 32 Мб) - -tab размер табуляции (используется для вычисления координат в - исходном коде), по умолчанию - 4 - -nochk <"ptibcwra"> отключить проверки при выполнении - -lower разрешить ключевые слова и встроенные идентификаторы в - нижнем регистре - -def <имя> задать символ условной компиляции - -uses вывести список импортированных модулей - - параметр -nochk задается в виде строки из символов: - "p" - указатели - "t" - типы - "i" - индексы - "b" - неявное приведение INTEGER к BYTE - "c" - диапазон аргумента функции CHR - "w" - диапазон аргумента функции WCHR - "r" - эквивалентно "bcw" - "a" - все проверки - - Порядок символов может быть любым. Наличие в строке того или иного - символа отключает соответствующую проверку. - - Например: -nochk it - отключить проверку индексов и охрану типа. - -nochk a - отключить все отключаемые проверки. - - Например: - - Compiler.exe "C:\example.ob07" win64con -out "C:\example.exe" -stk 1 - Compiler.exe "C:\example.ob07" win64dll -out "C:\example.dll" -nochk pti - Compiler "source/Compiler.ob07" linux64exe -out "source/Compiler" -nochk a - - В случае успешной компиляции, компилятор передает код завершения 0, иначе 1. - ------------------------------------------------------------------------------- - Отличия от оригинала - -1. Расширен псевдомодуль SYSTEM -2. В идентификаторах допускается символ "_" -3. Добавлены системные флаги -4. Усовершенствован оператор CASE (добавлены константные выражения в - метках вариантов и необязательная ветка ELSE) -5. Расширен набор стандартных процедур -6. Семантика охраны/проверки типа уточнена для нулевого указателя -7. Добавлены однострочные комментарии (начинаются с пары символов "//") -8. Разрешено наследование от типа-указателя -9. Добавлен синтаксис для импорта процедур из внешних библиотек -10. "Строки" можно заключать также в одиночные кавычки: 'строка' -11. Добавлен тип WCHAR -12. Добавлена операция конкатенации строковых и символьных констант -13. Возможен импорт модулей с указанием пути и имени файла -14. Добавлен специальный синтаксис для условной компиляции (см. CC.txt) -15. Имя процедуры в конце объявления (после END) необязательно - ------------------------------------------------------------------------------- - Особенности реализации - -1. Основные типы - - Тип Диапазон значений Размер, байт - - INTEGER -9223372036854775808 .. 9223372036854775807 8 - REAL 4.94E-324 .. 1.70E+308 8 - CHAR символ ASCII (0X .. 0FFX) 1 - BOOLEAN FALSE, TRUE 1 - SET множество из целых чисел {0 .. 63} 8 - BYTE 0 .. 255 1 - WCHAR символ юникода (0X .. 0FFFFX) 2 - -2. Максимальная длина идентификаторов - 255 символов -3. Максимальная длина строковых констант - 511 символов (UTF-8) -4. Максимальная размерность открытых массивов - 5 -5. Процедура NEW заполняет нулями выделенный блок памяти -6. Глобальные и локальные переменные инициализируются нулями -7. В отличие от многих Oberon-реализаций, сборщик мусора и динамическая - модульность отсутствуют -8. Тип BYTE в выражениях всегда приводится к INTEGER -9. Контроль переполнения значений выражений не производится -10. Ошибки времени выполнения: - - 1 ASSERT(x), при x = FALSE - 2 разыменование нулевого указателя - 3 целочисленное деление на неположительное число - 4 вызов процедуры через процедурную переменную с нулевым значением - 5 ошибка охраны типа - 6 нарушение границ массива - 7 непредусмотренное значение выражения в операторе CASE - 8 ошибка копирования массивов v := x, если LEN(v) < LEN(x) - 9 CHR(x), если (x < 0) OR (x > 255) -10 WCHR(x), если (x < 0) OR (x > 65535) -11 неявное приведение x:INTEGER к v:BYTE, если (x < 0) OR (x > 255) - ------------------------------------------------------------------------------- - Псевдомодуль SYSTEM - - Псевдомодуль SYSTEM содержит низкоуровневые и небезопасные процедуры, -ошибки при использовании процедур псевдомодуля SYSTEM могут привести к -повреждению данных времени выполнения и аварийному завершению программы. - - PROCEDURE ADR(v: любой тип): INTEGER - v - переменная или процедура; - возвращает адрес v - - PROCEDURE SADR(x: строковая константа (CHAR UTF-8)): INTEGER - возвращает адрес x - - PROCEDURE WSADR(x: строковая константа (WCHAR)): INTEGER - возвращает адрес x - - PROCEDURE SIZE(T): INTEGER - возвращает размер типа T - - PROCEDURE TYPEID(T): INTEGER - T - тип-запись или тип-указатель, - возвращает номер типа в таблице типов-записей - - PROCEDURE INF(): REAL - возвращает специальное вещественное значение "бесконечность" - - PROCEDURE MOVE(Source, Dest, n: INTEGER) - Копирует n байт памяти из Source в Dest, - области Source и Dest не могут перекрываться - - PROCEDURE GET(a: INTEGER; - VAR v: любой основной тип, PROCEDURE, POINTER) - v := Память[a] - - PROCEDURE GET8(a: INTEGER; - VAR x: INTEGER, SET, BYTE, CHAR, WCHAR, SYSTEM.CARD32) - Эквивалентно - SYSTEM.MOVE(a, SYSTEM.ADR(x), 1) - - PROCEDURE GET16(a: INTEGER; - VAR x: INTEGER, SET, WCHAR, SYSTEM.CARD32) - Эквивалентно - SYSTEM.MOVE(a, SYSTEM.ADR(x), 2) - - PROCEDURE GET32(a: INTEGER; VAR x: INTEGER, SET, SYSTEM.CARD32) - Эквивалентно - SYSTEM.MOVE(a, SYSTEM.ADR(x), 4) - - PROCEDURE PUT(a: INTEGER; x: любой основной тип, PROCEDURE, POINTER) - Память[a] := x; - Если x: BYTE или x: WCHAR, то значение x будет расширено - до 64 бит, для записи байтов использовать SYSTEM.PUT8, - для WCHAR -- SYSTEM.PUT16 - - PROCEDURE PUT8(a: INTEGER; - x: INTEGER, SET, BYTE, CHAR, WCHAR, SYSTEM.CARD32) - Память[a] := младшие 8 бит (x) - - PROCEDURE PUT16(a: INTEGER; - x: INTEGER, SET, BYTE, CHAR, WCHAR, SYSTEM.CARD32) - Память[a] := младшие 16 бит (x) - - PROCEDURE PUT32(a: INTEGER; - x: INTEGER, SET, BYTE, CHAR, WCHAR, SYSTEM.CARD32) - Память[a] := младшие 32 бит (x) - - PROCEDURE COPY(VAR Source: любой тип; VAR Dest: любой тип; n: INTEGER) - Копирует n байт памяти из Source в Dest. - Эквивалентно - SYSTEM.MOVE(SYSTEM.ADR(Source), SYSTEM.ADR(Dest), n) - - PROCEDURE CODE(byte1, byte2,... : BYTE) - Вставка машинного кода, - byte1, byte2 ... - константы в диапазоне 0..255, - например: - - SYSTEM.CODE(048H,08BH,045H,010H) (* mov rax,qword[rbp+16] *) - - Также, в модуле SYSTEM определен тип CARD32 (4 байта). Для типа CARD32 не -допускаются никакие явные операции, за исключением присваивания. - - Функции псевдомодуля SYSTEM нельзя использовать в константных выражениях. - ------------------------------------------------------------------------------- - Системные флаги - - При объявлении процедурных типов и глобальных процедур, после ключевого -слова PROCEDURE может быть указан флаг соглашения о вызове: -[win64], [systemv], [windows], [linux], [oberon], [ccall]. -Например: - - PROCEDURE [win64] MyProc (x, y, z: INTEGER): INTEGER; - - Флаг [windows] - синоним для [win64], [linux] - синоним для [systemv]. - Флаг [ccall] - синоним для [win64] или [systemv] (зависит от целевой ОС). - Знак "-" после имени флага ([win64-], [linux-], ...) означает, что -результат процедуры можно игнорировать (не допускается для типа REAL). - Если флаг не указан или указан флаг [oberon], то принимается внутреннее -соглашение о вызове. [win64] и [systemv] используются для связи с -операционной системой и внешними приложениями. - - При объявлении типов-записей, после ключевого слова RECORD может быть -указан флаг [noalign]. Флаг [noalign] означает отсутствие выравнивания полей -записи. Записи с системным флагом не могут иметь базовый тип и не могут быть -базовыми типами для других записей. - Для использования системных флагов, требуется импортировать SYSTEM. - ------------------------------------------------------------------------------- - Оператор CASE - - Синтаксис оператора CASE: - - CaseStatement = - CASE Expression OF Case {"|" Case} - [ELSE StatementSequence] END. - Case = [CaseLabelList ":" StatementSequence]. - CaseLabelList = CaseLabels {"," CaseLabels}. - CaseLabels = ConstExpression [".." ConstExpression]. - - Например: - - CASE x OF - |-1: DoSomething1 - | 1: DoSomething2 - | 0: DoSomething3 - ELSE - DoSomething4 - END - - В метках вариантов можно использовать константные выражения, ветка ELSE -необязательна. Если значение x не соответствует ни одному варианту и ELSE -отсутствует, то программа прерывается с ошибкой времени выполнения. - ------------------------------------------------------------------------------- - Тип WCHAR - - Тип WCHAR добавлен в язык для удобной поддежки юникода. Для типов WCHAR и -ARRAY OF WCHAR допускаются все те же операции, как для типов CHAR и -ARRAY OF CHAR, за исключением встроенной процедуры CHR, которая возвращает -только тип CHAR. Для получения значения типа WCHAR, следует использовать -процедуру WCHR вместо CHR. Для правильной работы с типом, необходимо сохранять -исходный код в кодировке UTF-8 с BOM. - ------------------------------------------------------------------------------- - Конкатенация строковых и символьных констант - - Допускается конкатенация ("+") константных строк и символов типа CHAR: - - str = CHR(39) + "string" + CHR(39); (* str = "'string'" *) - - newline = 0DX + 0AX; - ------------------------------------------------------------------------------- - Проверка и охрана типа нулевого указателя - - Оригинальное сообщение о языке не определяет поведение программы при -выполнении охраны p(T) и проверки типа p IS T при p = NIL. Во многих -Oberon-реализациях выполнение такой операции приводит к ошибке времени -выполнения. В данной реализации охрана типа нулевого указателя не приводит к -ошибке, а проверка типа дает результат FALSE. В ряде случаев это позволяет -значительно сократить частоту применения охраны типа. - ------------------------------------------------------------------------------- - Дополнительные стандартные процедуры - - DISPOSE (VAR v: любой_указатель) - Освобождает память, выделенную процедурой NEW для - динамической переменной v^, и присваивает переменной v - значение NIL. - - COPY (x: ARRAY OF CHAR/WCHAR; VAR v: ARRAY OF CHAR/WCHAR); - v := x; - Если LEN(v) < LEN(x), то строка x будет скопирована - не полностью - - LSR (x, n: INTEGER): INTEGER - Логический сдвиг x на n бит вправо. - - MIN (a, b: INTEGER): INTEGER - Минимум из двух значений. - - MAX (a, b: INTEGER): INTEGER - Максимум из двух значений. - - BITS (x: INTEGER): SET - Интерпретирует x как значение типа SET. - Выполняется на этапе компиляции. - - LENGTH (s: ARRAY OF CHAR/WCHAR): INTEGER - Длина 0X-завершенной строки s, без учета символа 0X. - Если символ 0X отсутствует, функция возвращает длину - массива s. s не может быть константой. - - WCHR (n: INTEGER): WCHAR - Преобразование типа, аналогично CHR(n: INTEGER): CHAR - ------------------------------------------------------------------------------- - Импорт модулей с указанием пути и имени файла - -Примеры: - - IMPORT Math IN "./lib/math.ob07"; (* относительно текущего модуля *) - - IMPORT M1 IN "C:\lib\math.ob07"; (* абсолютный путь *) - ------------------------------------------------------------------------------- - Импортированные процедуры - - Синтаксис импорта: - - PROCEDURE [callconv, library, function] proc_name (FormalParam): Type; - - - callconv -- соглашение о вызове - - library -- имя файла динамической библиотеки (строковая константа) - - function -- имя импортируемой процедуры (строковая константа), если - указана пустая строка, то имя процедуры = proc_name - - например: - - PROCEDURE [windows, "kernel32.dll", "ExitProcess"] exit (code: INTEGER); - - PROCEDURE [windows, "kernel32.dll", ""] GetTickCount (): INTEGER; - - В конце объявления может быть добавлено (необязательно) "END proc_name;" - - Объявления импортированных процедур должны располагаться в глобальной - области видимости модуля после объявления переменных, вместе с объявлением - "обычных" процедур, от которых импортированные отличаются только отсутствием - тела процедуры. В остальном, к таким процедурам применимы те же правила: - их можно вызвать, присвоить процедурной переменной или получить адрес. - - Так как импортированная процедура всегда имеет явное указание соглашения о - вызове, то совместимый процедурный тип тоже должен быть объявлен с указанием - соглашения о вызове: - - VAR - ExitProcess: PROCEDURE [windows] (code: INTEGER); - - Для Linux, импортированные процедуры не реализованы. - ------------------------------------------------------------------------------- - Скрытые параметры процедур - - Некоторые процедуры могут иметь скрытые параметры, они отсутствуют в списке -формальных параметров, но учитываются компилятором при трансляции вызовов. -Это возможно в следующих случаях: - -1. Процедура имеет формальный параметр открытый массив: - PROCEDURE Proc (x: ARRAY OF ARRAY OF REAL); - Вызов транслируется так: - Proc(LEN(x), LEN(x[0]), SYSTEM.ADR(x)) -2. Процедура имеет формальный параметр-переменную типа RECORD: - PROCEDURE Proc (VAR x: Rec); - Вызов транслируется так: - Proc(SYSTEM.TYPEID(Rec), SYSTEM.ADR(x)) - - Скрытые параметры необходимо учитывать при связи с внешними приложениями. - ------------------------------------------------------------------------------- - Модуль RTL - - Все программы неявно используют модуль RTL. Компилятор транслирует -некоторые операции (проверка и охрана типа, сравнение строк, сообщения об -ошибках времени выполнения и др.) как вызовы процедур этого модуля. Не -следует вызывать эти процедуры явно. - Сообщения об ошибках времени выполнения выводятся в диалоговых окнах -(Windows), в терминал (Linux). - ------------------------------------------------------------------------------- - Модуль API - - Существуют несколько реализаций модуля API (для различных ОС). - Как и модуль RTL, модуль API не предназначен для прямого использования. -Он обеспечивает связь RTL с ОС. - ------------------------------------------------------------------------------- - Генерация исполняемых файлов DLL - - Разрешается экспортировать только процедуры. Для этого, процедура должна -находиться в главном модуле программы, ее имя должно быть отмечено символом -экспорта ("*") и должно быть указано соглашение о вызове. Нельзя -экспортировать процедуры, которые импортированы из других dll-библиотек. \ No newline at end of file diff --git a/programs/develop/oberon07/lib/KolibriOS/Math.ob07 b/programs/develop/oberon07/lib/KolibriOS/Math.ob07 index d6056af747..03302f6426 100644 --- a/programs/develop/oberon07/lib/KolibriOS/Math.ob07 +++ b/programs/develop/oberon07/lib/KolibriOS/Math.ob07 @@ -1,7 +1,7 @@ (* BSD 2-Clause License - Copyright (c) 2013-2014, 2018-2020 Anton Krotov + Copyright (c) 2013-2014, 2018-2022 Anton Krotov All rights reserved. *) @@ -271,8 +271,7 @@ BEGIN ELSIF x < -15.0 THEN x := -1.0 ELSE - x := exp(2.0 * x); - x := (x - 1.0) / (x + 1.0) + x := 1.0 - 2.0 / (exp(2.0 * x) + 1.0) END RETURN x diff --git a/programs/develop/oberon07/lib/Math/CMath.ob07 b/programs/develop/oberon07/lib/Math/CMath.ob07 index e1d48b0b50..adc7fb178e 100644 --- a/programs/develop/oberon07/lib/Math/CMath.ob07 +++ b/programs/develop/oberon07/lib/Math/CMath.ob07 @@ -1,462 +1,462 @@ -(* *********************************************** - Модуль работы с комплексными числами. - Вадим Исаев, 2020 - Module for complex numbers. - Vadim Isaev, 2020 -*************************************************** *) - -MODULE CMath; - -IMPORT Math, Out; - -TYPE - complex* = POINTER TO RECORD - re*: REAL; - im*: REAL - END; - -VAR - result: complex; - - i* : complex; - _0*: complex; - -(* Инициализация комплексного числа. - Init complex number. *) -PROCEDURE CInit* (re : REAL; im: REAL): complex; -VAR - temp: complex; -BEGIN - NEW(temp); - temp.re:=re; - temp.im:=im; - - RETURN temp -END CInit; - - -(* Четыре основных арифметических операций. - Four base operations +, -, * , / *) - -(* Сложение - addition : z := z1 + z2 *) -PROCEDURE CAdd* (z1, z2: complex): complex; -BEGIN - result.re := z1.re + z2.re; - result.im := z1.im + z2.im; - - RETURN result -END CAdd; - -(* Сложение с REAL. - addition : z := z1 + r1 *) -PROCEDURE CAdd_r* (z1: complex; r1: REAL): complex; -BEGIN - result.re := z1.re + r1; - result.im := z1.im; - - RETURN result -END CAdd_r; - -(* Сложение с INTEGER. - addition : z := z1 + i1 *) -PROCEDURE CAdd_i* (z1: complex; i1: INTEGER): complex; -BEGIN - result.re := z1.re + FLT(i1); - result.im := z1.im; - - RETURN result -END CAdd_i; - -(* Смена знака. - substraction : z := - z1 *) -PROCEDURE CNeg (z1 : complex): complex; -BEGIN - result.re := -z1.re; - result.im := -z1.im; - - RETURN result -END CNeg; - -(* Вычитание. - substraction : z := z1 - z2 *) -PROCEDURE CSub* (z1, z2 : complex): complex; -BEGIN - result.re := z1.re - z2.re; - result.im := z1.im - z2.im; - - RETURN result -END CSub; - -(* Вычитание REAL. - substraction : z := z1 - r1 *) -PROCEDURE CSub_r1* (z1 : complex; r1 : REAL): complex; -BEGIN - result.re := z1.re - r1; - result.im := z1.im; - - RETURN result -END CSub_r1; - -(* Вычитание из REAL. - substraction : z := r1 - z1 *) -PROCEDURE CSub_r2* (r1 : REAL; z1 : complex): complex; -BEGIN - result.re := r1 - z1.re; - result.im := - z1.im; - - RETURN result -END CSub_r2; - -(* Вычитание INTEGER. - substraction : z := z1 - i1 *) -PROCEDURE CSub_i* (z1 : complex; i1 : INTEGER): complex; -BEGIN - result.re := z1.re - FLT(i1); - result.im := z1.im; - - RETURN result -END CSub_i; - -(* Умножение. - multiplication : z := z1 * z2 *) -PROCEDURE CMul (z1, z2 : complex): complex; -BEGIN - result.re := (z1.re * z2.re) - (z1.im * z2.im); - result.im := (z1.re * z2.im) + (z1.im * z2.re); - - RETURN result -END CMul; - -(* Умножение с REAL. - multiplication : z := z1 * r1 *) -PROCEDURE CMul_r (z1 : complex; r1 : REAL): complex; -BEGIN - result.re := z1.re * r1; - result.im := z1.im * r1; - - RETURN result -END CMul_r; - -(* Умножение с INTEGER. - multiplication : z := z1 * i1 *) -PROCEDURE CMul_i (z1 : complex; i1 : INTEGER): complex; -BEGIN - result.re := z1.re * FLT(i1); - result.im := z1.im * FLT(i1); - - RETURN result -END CMul_i; - -(* Деление. - division : z := znum / zden *) -PROCEDURE CDiv (z1, z2 : complex): complex; - (* The following algorithm is used to properly handle - denominator overflow: - - | a + b(d/c) c - a(d/c) - | ---------- + ---------- I if |d| < |c| - a + b I | c + d(d/c) a + d(d/c) - ------- = | - c + d I | b + a(c/d) -a+ b(c/d) - | ---------- + ---------- I if |d| >= |c| - | d + c(c/d) d + c(c/d) - *) -VAR - tmp, denom : REAL; -BEGIN - IF ( ABS(z2.re) > ABS(z2.im) ) THEN - tmp := z2.im / z2.re; - denom := z2.re + z2.im * tmp; - result.re := (z1.re + z1.im * tmp) / denom; - result.im := (z1.im - z1.re * tmp) / denom; - ELSE - tmp := z2.re / z2.im; - denom := z2.im + z2.re * tmp; - result.re := (z1.im + z1.re * tmp) / denom; - result.im := (-z1.re + z1.im * tmp) / denom; - END; - - RETURN result -END CDiv; - -(* Деление на REAL. - division : z := znum / r1 *) -PROCEDURE CDiv_r* (z1 : complex; r1 : REAL): complex; -BEGIN - result.re := z1.re / r1; - result.im := z1.im / r1; - - RETURN result -END CDiv_r; - -(* Деление на INTEGER. - division : z := znum / i1 *) -PROCEDURE CDiv_i* (z1 : complex; i1 : INTEGER): complex; -BEGIN - result.re := z1.re / FLT(i1); - result.im := z1.im / FLT(i1); - - RETURN result -END CDiv_i; - -(* fonctions elementaires *) - -(* Вывод на экран. - out complex number *) -PROCEDURE CPrint* (z: complex; width: INTEGER); -BEGIN - Out.Real(z.re, width); - IF z.im>=0.0 THEN - Out.String("+"); - END; - Out.Real(z.im, width); - Out.String("i"); -END CPrint; - -PROCEDURE CPrintLn* (z: complex; width: INTEGER); -BEGIN - CPrint(z, width); - Out.Ln; -END CPrintLn; - -(* Вывод на экран с фиксированным кол-вом знаков - после запятой (p) *) -PROCEDURE CPrintFix* (z: complex; width, p: INTEGER); -BEGIN - Out.FixReal(z.re, width, p); - IF z.im>=0.0 THEN - Out.String("+"); - END; - Out.FixReal(z.im, width, p); - Out.String("i"); -END CPrintFix; - -PROCEDURE CPrintFixLn* (z: complex; width, p: INTEGER); -BEGIN - CPrintFix(z, width, p); - Out.Ln; -END CPrintFixLn; - -(* Модуль числа. - module : r = |z| *) -PROCEDURE CMod* (z1 : complex): REAL; -BEGIN - RETURN Math.sqrt((z1.re * z1.re) + (z1.im * z1.im)) -END CMod; - -(* Квадрат числа. - square : r := z*z *) -PROCEDURE CSqr* (z1: complex): complex; -BEGIN - result.re := z1.re * z1.re - z1.im * z1.im; - result.im := 2.0 * z1.re * z1.im; - - RETURN result -END CSqr; - -(* Квадратный корень числа. - square root : r := sqrt(z) *) -PROCEDURE CSqrt* (z1: complex): complex; -VAR - root, q: REAL; -BEGIN - IF (z1.re#0.0) OR (z1.im#0.0) THEN - root := Math.sqrt(0.5 * (ABS(z1.re) + CMod(z1))); - q := z1.im / (2.0 * root); - IF z1.re >= 0.0 THEN - result.re := root; - result.im := q; - ELSE - IF z1.im < 0.0 THEN - result.re := - q; - result.im := - root - ELSE - result.re := q; - result.im := root - END - END - ELSE - result := z1; - END; - - RETURN result -END CSqrt; - -(* Экспонента. - exponantial : r := exp(z) *) -(* exp(x + iy) = exp(x).exp(iy) = exp(x).[cos(y) + i sin(y)] *) -PROCEDURE CExp* (z: complex): complex; -VAR - expz : REAL; -BEGIN - expz := Math.exp(z.re); - result.re := expz * Math.cos(z.im); - result.im := expz * Math.sin(z.im); - - RETURN result -END CExp; - -(* Натуральный логарифм. - natural logarithm : r := ln(z) *) -(* ln( p exp(i0)) = ln(p) + i0 + 2kpi *) -PROCEDURE CLn* (z: complex): complex; -BEGIN - result.re := Math.ln(CMod(z)); - result.im := Math.arctan2(z.im, z.re); - - RETURN result -END CLn; - -(* Число в степени. - exp : z := z1^z2 *) -PROCEDURE CPower* (z1, z2 : complex): complex; -VAR - a: complex; -BEGIN - a:=CLn(z1); - a:=CMul(z2, a); - result:=CExp(a); - - RETURN result -END CPower; - -(* Число в степени REAL. - multiplication : z := z1^r *) -PROCEDURE CPower_r* (z1: complex; r: REAL): complex; -VAR - a: complex; -BEGIN - a:=CLn(z1); - a:=CMul_r(a, r); - result:=CExp(a); - - RETURN result -END CPower_r; - -(* Обратное число. - inverse : r := 1 / z *) -PROCEDURE CInv* (z: complex): complex; -VAR - denom : REAL; -BEGIN - denom := (z.re * z.re) + (z.im * z.im); - (* generates a fpu exception if denom=0 as for reals *) - result.re:=z.re/denom; - result.im:=-z.im/denom; - - RETURN result -END CInv; - -(* direct trigonometric functions *) - -(* Косинус. - complex cosinus *) -(* cos(x+iy) = cos(x).cos(iy) - sin(x).sin(iy) *) -(* cos(ix) = cosh(x) et sin(ix) = i.sinh(x) *) -PROCEDURE CCos* (z: complex): complex; -BEGIN - result.re := Math.cos(z.re) * Math.cosh(z.im); - result.im := - Math.sin(z.re) * Math.sinh(z.im); - - RETURN result -END CCos; - -(* Синус. - sinus complex *) -(* sin(x+iy) = sin(x).cos(iy) + cos(x).sin(iy) *) -(* cos(ix) = cosh(x) et sin(ix) = i.sinh(x) *) -PROCEDURE CSin (z: complex): complex; -BEGIN - result.re := Math.sin(z.re) * Math.cosh(z.im); - result.im := Math.cos(z.re) * Math.sinh(z.im); - - RETURN result -END CSin; - -(* Тангенс. - tangente *) -PROCEDURE CTg* (z: complex): complex; -VAR - temp1, temp2: complex; -BEGIN - temp1:=CSin(z); - temp2:=CCos(z); - result:=CDiv(temp1, temp2); - - RETURN result -END CTg; - -(* inverse complex hyperbolic functions *) - -(* Гиперболический арккосинус. - hyberbolic arg cosinus *) -(* _________ *) -(* argch(z) = -/+ ln(z + i.V 1 - z.z) *) -PROCEDURE CArcCosh* (z : complex): complex; -BEGIN - result:=CNeg(CLn(CAdd(z, CMul(i, CSqrt(CSub_r2(1.0, CMul(z, z))))))); - - RETURN result -END CArcCosh; - -(* Гиперболический арксинус. - hyperbolic arc sinus *) -(* ________ *) -(* argsh(z) = ln(z + V 1 + z.z) *) -PROCEDURE CArcSinh* (z : complex): complex; -BEGIN - result:=CLn(CAdd(z, CSqrt(CAdd_r(CMul(z, z), 1.0)))); - - RETURN result -END CArcSinh; - -(* Гиперболический арктангенс. - hyperbolic arc tangent *) -(* argth(z) = 1/2 ln((z + 1) / (1 - z)) *) -PROCEDURE CArcTgh (z : complex): complex; -BEGIN - result:=CDiv_r(CLn(CDiv(CAdd_r(z, 1.0), CSub_r2(1.0, z))), 2.0); - - RETURN result -END CArcTgh; - -(* trigonometriques inverses *) - -(* Арккосинус. - arc cosinus complex *) -(* arccos(z) = -i.argch(z) *) -PROCEDURE CArcCos* (z: complex): complex; -BEGIN - result := CNeg(CMul(i, CArcCosh(z))); - - RETURN result -END CArcCos; - -(* Арксинус. - arc sinus complex *) -(* arcsin(z) = -i.argsh(i.z) *) -PROCEDURE CArcSin* (z : complex): complex; -BEGIN - result := CNeg(CMul(i, CArcSinh(z))); - - RETURN result -END CArcSin; - -(* Арктангенс. - arc tangente complex *) -(* arctg(z) = -i.argth(i.z) *) -PROCEDURE CArcTg* (z : complex): complex; -BEGIN - result := CNeg(CMul(i, CArcTgh(CMul(i, z)))); - - RETURN result -END CArcTg; - -BEGIN - - result:=CInit(0.0, 0.0); - i :=CInit(0.0, 1.0); - _0:=CInit(0.0, 0.0); - -END CMath. +(* *********************************************** + Модуль работы с комплексными числами. + Вадим Исаев, 2020 + Module for complex numbers. + Vadim Isaev, 2020 +*************************************************** *) + +MODULE CMath; + +IMPORT Math, Out; + +TYPE + complex* = POINTER TO RECORD + re*: REAL; + im*: REAL + END; + +VAR + result: complex; + + i* : complex; + _0*: complex; + +(* Инициализация комплексного числа. + Init complex number. *) +PROCEDURE CInit* (re : REAL; im: REAL): complex; +VAR + temp: complex; +BEGIN + NEW(temp); + temp.re:=re; + temp.im:=im; + + RETURN temp +END CInit; + + +(* Четыре основных арифметических операций. + Four base operations +, -, * , / *) + +(* Сложение + addition : z := z1 + z2 *) +PROCEDURE CAdd* (z1, z2: complex): complex; +BEGIN + result.re := z1.re + z2.re; + result.im := z1.im + z2.im; + + RETURN result +END CAdd; + +(* Сложение с REAL. + addition : z := z1 + r1 *) +PROCEDURE CAdd_r* (z1: complex; r1: REAL): complex; +BEGIN + result.re := z1.re + r1; + result.im := z1.im; + + RETURN result +END CAdd_r; + +(* Сложение с INTEGER. + addition : z := z1 + i1 *) +PROCEDURE CAdd_i* (z1: complex; i1: INTEGER): complex; +BEGIN + result.re := z1.re + FLT(i1); + result.im := z1.im; + + RETURN result +END CAdd_i; + +(* Смена знака. + substraction : z := - z1 *) +PROCEDURE CNeg (z1 : complex): complex; +BEGIN + result.re := -z1.re; + result.im := -z1.im; + + RETURN result +END CNeg; + +(* Вычитание. + substraction : z := z1 - z2 *) +PROCEDURE CSub* (z1, z2 : complex): complex; +BEGIN + result.re := z1.re - z2.re; + result.im := z1.im - z2.im; + + RETURN result +END CSub; + +(* Вычитание REAL. + substraction : z := z1 - r1 *) +PROCEDURE CSub_r1* (z1 : complex; r1 : REAL): complex; +BEGIN + result.re := z1.re - r1; + result.im := z1.im; + + RETURN result +END CSub_r1; + +(* Вычитание из REAL. + substraction : z := r1 - z1 *) +PROCEDURE CSub_r2* (r1 : REAL; z1 : complex): complex; +BEGIN + result.re := r1 - z1.re; + result.im := - z1.im; + + RETURN result +END CSub_r2; + +(* Вычитание INTEGER. + substraction : z := z1 - i1 *) +PROCEDURE CSub_i* (z1 : complex; i1 : INTEGER): complex; +BEGIN + result.re := z1.re - FLT(i1); + result.im := z1.im; + + RETURN result +END CSub_i; + +(* Умножение. + multiplication : z := z1 * z2 *) +PROCEDURE CMul (z1, z2 : complex): complex; +BEGIN + result.re := (z1.re * z2.re) - (z1.im * z2.im); + result.im := (z1.re * z2.im) + (z1.im * z2.re); + + RETURN result +END CMul; + +(* Умножение с REAL. + multiplication : z := z1 * r1 *) +PROCEDURE CMul_r (z1 : complex; r1 : REAL): complex; +BEGIN + result.re := z1.re * r1; + result.im := z1.im * r1; + + RETURN result +END CMul_r; + +(* Умножение с INTEGER. + multiplication : z := z1 * i1 *) +PROCEDURE CMul_i (z1 : complex; i1 : INTEGER): complex; +BEGIN + result.re := z1.re * FLT(i1); + result.im := z1.im * FLT(i1); + + RETURN result +END CMul_i; + +(* Деление. + division : z := znum / zden *) +PROCEDURE CDiv (z1, z2 : complex): complex; + (* The following algorithm is used to properly handle + denominator overflow: + + | a + b(d/c) c - a(d/c) + | ---------- + ---------- I if |d| < |c| + a + b I | c + d(d/c) a + d(d/c) + ------- = | + c + d I | b + a(c/d) -a+ b(c/d) + | ---------- + ---------- I if |d| >= |c| + | d + c(c/d) d + c(c/d) + *) +VAR + tmp, denom : REAL; +BEGIN + IF ( ABS(z2.re) > ABS(z2.im) ) THEN + tmp := z2.im / z2.re; + denom := z2.re + z2.im * tmp; + result.re := (z1.re + z1.im * tmp) / denom; + result.im := (z1.im - z1.re * tmp) / denom; + ELSE + tmp := z2.re / z2.im; + denom := z2.im + z2.re * tmp; + result.re := (z1.im + z1.re * tmp) / denom; + result.im := (-z1.re + z1.im * tmp) / denom; + END; + + RETURN result +END CDiv; + +(* Деление на REAL. + division : z := znum / r1 *) +PROCEDURE CDiv_r* (z1 : complex; r1 : REAL): complex; +BEGIN + result.re := z1.re / r1; + result.im := z1.im / r1; + + RETURN result +END CDiv_r; + +(* Деление на INTEGER. + division : z := znum / i1 *) +PROCEDURE CDiv_i* (z1 : complex; i1 : INTEGER): complex; +BEGIN + result.re := z1.re / FLT(i1); + result.im := z1.im / FLT(i1); + + RETURN result +END CDiv_i; + +(* fonctions elementaires *) + +(* Вывод на экран. + out complex number *) +PROCEDURE CPrint* (z: complex; width: INTEGER); +BEGIN + Out.Real(z.re, width); + IF z.im>=0.0 THEN + Out.String("+"); + END; + Out.Real(z.im, width); + Out.String("i"); +END CPrint; + +PROCEDURE CPrintLn* (z: complex; width: INTEGER); +BEGIN + CPrint(z, width); + Out.Ln; +END CPrintLn; + +(* Вывод на экран с фиксированным кол-вом знаков + после запятой (p) *) +PROCEDURE CPrintFix* (z: complex; width, p: INTEGER); +BEGIN + Out.FixReal(z.re, width, p); + IF z.im>=0.0 THEN + Out.String("+"); + END; + Out.FixReal(z.im, width, p); + Out.String("i"); +END CPrintFix; + +PROCEDURE CPrintFixLn* (z: complex; width, p: INTEGER); +BEGIN + CPrintFix(z, width, p); + Out.Ln; +END CPrintFixLn; + +(* Модуль числа. + module : r = |z| *) +PROCEDURE CMod* (z1 : complex): REAL; +BEGIN + RETURN Math.sqrt((z1.re * z1.re) + (z1.im * z1.im)) +END CMod; + +(* Квадрат числа. + square : r := z*z *) +PROCEDURE CSqr* (z1: complex): complex; +BEGIN + result.re := z1.re * z1.re - z1.im * z1.im; + result.im := 2.0 * z1.re * z1.im; + + RETURN result +END CSqr; + +(* Квадратный корень числа. + square root : r := sqrt(z) *) +PROCEDURE CSqrt* (z1: complex): complex; +VAR + root, q: REAL; +BEGIN + IF (z1.re#0.0) OR (z1.im#0.0) THEN + root := Math.sqrt(0.5 * (ABS(z1.re) + CMod(z1))); + q := z1.im / (2.0 * root); + IF z1.re >= 0.0 THEN + result.re := root; + result.im := q; + ELSE + IF z1.im < 0.0 THEN + result.re := - q; + result.im := - root + ELSE + result.re := q; + result.im := root + END + END + ELSE + result := z1; + END; + + RETURN result +END CSqrt; + +(* Экспонента. + exponantial : r := exp(z) *) +(* exp(x + iy) = exp(x).exp(iy) = exp(x).[cos(y) + i sin(y)] *) +PROCEDURE CExp* (z: complex): complex; +VAR + expz : REAL; +BEGIN + expz := Math.exp(z.re); + result.re := expz * Math.cos(z.im); + result.im := expz * Math.sin(z.im); + + RETURN result +END CExp; + +(* Натуральный логарифм. + natural logarithm : r := ln(z) *) +(* ln( p exp(i0)) = ln(p) + i0 + 2kpi *) +PROCEDURE CLn* (z: complex): complex; +BEGIN + result.re := Math.ln(CMod(z)); + result.im := Math.arctan2(z.im, z.re); + + RETURN result +END CLn; + +(* Число в степени. + exp : z := z1^z2 *) +PROCEDURE CPower* (z1, z2 : complex): complex; +VAR + a: complex; +BEGIN + a:=CLn(z1); + a:=CMul(z2, a); + result:=CExp(a); + + RETURN result +END CPower; + +(* Число в степени REAL. + multiplication : z := z1^r *) +PROCEDURE CPower_r* (z1: complex; r: REAL): complex; +VAR + a: complex; +BEGIN + a:=CLn(z1); + a:=CMul_r(a, r); + result:=CExp(a); + + RETURN result +END CPower_r; + +(* Обратное число. + inverse : r := 1 / z *) +PROCEDURE CInv* (z: complex): complex; +VAR + denom : REAL; +BEGIN + denom := (z.re * z.re) + (z.im * z.im); + (* generates a fpu exception if denom=0 as for reals *) + result.re:=z.re/denom; + result.im:=-z.im/denom; + + RETURN result +END CInv; + +(* direct trigonometric functions *) + +(* Косинус. + complex cosinus *) +(* cos(x+iy) = cos(x).cos(iy) - sin(x).sin(iy) *) +(* cos(ix) = cosh(x) et sin(ix) = i.sinh(x) *) +PROCEDURE CCos* (z: complex): complex; +BEGIN + result.re := Math.cos(z.re) * Math.cosh(z.im); + result.im := - Math.sin(z.re) * Math.sinh(z.im); + + RETURN result +END CCos; + +(* Синус. + sinus complex *) +(* sin(x+iy) = sin(x).cos(iy) + cos(x).sin(iy) *) +(* cos(ix) = cosh(x) et sin(ix) = i.sinh(x) *) +PROCEDURE CSin (z: complex): complex; +BEGIN + result.re := Math.sin(z.re) * Math.cosh(z.im); + result.im := Math.cos(z.re) * Math.sinh(z.im); + + RETURN result +END CSin; + +(* Тангенс. + tangente *) +PROCEDURE CTg* (z: complex): complex; +VAR + temp1, temp2: complex; +BEGIN + temp1:=CSin(z); + temp2:=CCos(z); + result:=CDiv(temp1, temp2); + + RETURN result +END CTg; + +(* inverse complex hyperbolic functions *) + +(* Гиперболический арккосинус. + hyberbolic arg cosinus *) +(* _________ *) +(* argch(z) = -/+ ln(z + i.V 1 - z.z) *) +PROCEDURE CArcCosh* (z : complex): complex; +BEGIN + result:=CNeg(CLn(CAdd(z, CMul(i, CSqrt(CSub_r2(1.0, CMul(z, z))))))); + + RETURN result +END CArcCosh; + +(* Гиперболический арксинус. + hyperbolic arc sinus *) +(* ________ *) +(* argsh(z) = ln(z + V 1 + z.z) *) +PROCEDURE CArcSinh* (z : complex): complex; +BEGIN + result:=CLn(CAdd(z, CSqrt(CAdd_r(CMul(z, z), 1.0)))); + + RETURN result +END CArcSinh; + +(* Гиперболический арктангенс. + hyperbolic arc tangent *) +(* argth(z) = 1/2 ln((z + 1) / (1 - z)) *) +PROCEDURE CArcTgh (z : complex): complex; +BEGIN + result:=CDiv_r(CLn(CDiv(CAdd_r(z, 1.0), CSub_r2(1.0, z))), 2.0); + + RETURN result +END CArcTgh; + +(* trigonometriques inverses *) + +(* Арккосинус. + arc cosinus complex *) +(* arccos(z) = -i.argch(z) *) +PROCEDURE CArcCos* (z: complex): complex; +BEGIN + result := CNeg(CMul(i, CArcCosh(z))); + + RETURN result +END CArcCos; + +(* Арксинус. + arc sinus complex *) +(* arcsin(z) = -i.argsh(i.z) *) +PROCEDURE CArcSin* (z : complex): complex; +BEGIN + result := CNeg(CMul(i, CArcSinh(z))); + + RETURN result +END CArcSin; + +(* Арктангенс. + arc tangente complex *) +(* arctg(z) = -i.argth(i.z) *) +PROCEDURE CArcTg* (z : complex): complex; +BEGIN + result := CNeg(CMul(i, CArcTgh(CMul(i, z)))); + + RETURN result +END CArcTg; + +BEGIN + + result:=CInit(0.0, 0.0); + i :=CInit(0.0, 1.0); + _0:=CInit(0.0, 0.0); + +END CMath. diff --git a/programs/develop/oberon07/lib/Math/MathBits.ob07 b/programs/develop/oberon07/lib/Math/MathBits.ob07 index 3d102c226a..b339c06bd8 100644 --- a/programs/develop/oberon07/lib/Math/MathBits.ob07 +++ b/programs/develop/oberon07/lib/Math/MathBits.ob07 @@ -1,33 +1,33 @@ -(* **************************************** - Дополнение к модулю Math. - Побитовые операции над целыми числами. - Вадим Исаев, 2020 - Additional functions to the module Math. - Bitwise operations on integers. - Vadim Isaev, 2020 -******************************************* *) - -MODULE MathBits; - - -PROCEDURE iand* (x, y: INTEGER): INTEGER; - RETURN ORD(BITS(x) * BITS(y)) -END iand; - - -PROCEDURE ior* (x, y: INTEGER): INTEGER; - RETURN ORD(BITS(x) + BITS(y)) -END ior; - - -PROCEDURE ixor* (x, y: INTEGER): INTEGER; - RETURN ORD(BITS(x) / BITS(y)) -END ixor; - - -PROCEDURE inot* (x: INTEGER): INTEGER; - RETURN ORD(-BITS(x)) -END inot; - - -END MathBits. +(* **************************************** + Дополнение к модулю Math. + Побитовые операции над целыми числами. + Вадим Исаев, 2020 + Additional functions to the module Math. + Bitwise operations on integers. + Vadim Isaev, 2020 +******************************************* *) + +MODULE MathBits; + + +PROCEDURE iand* (x, y: INTEGER): INTEGER; + RETURN ORD(BITS(x) * BITS(y)) +END iand; + + +PROCEDURE ior* (x, y: INTEGER): INTEGER; + RETURN ORD(BITS(x) + BITS(y)) +END ior; + + +PROCEDURE ixor* (x, y: INTEGER): INTEGER; + RETURN ORD(BITS(x) / BITS(y)) +END ixor; + + +PROCEDURE inot* (x: INTEGER): INTEGER; + RETURN ORD(-BITS(x)) +END inot; + + +END MathBits. diff --git a/programs/develop/oberon07/lib/Math/MathRound.ob07 b/programs/develop/oberon07/lib/Math/MathRound.ob07 index ac2548a022..3952e88b3e 100644 --- a/programs/develop/oberon07/lib/Math/MathRound.ob07 +++ b/programs/develop/oberon07/lib/Math/MathRound.ob07 @@ -1,99 +1,99 @@ -(* ****************************************** - Дополнительные функции к модулю Math. - Функции округления. - Вадим Исаев, 2020 - ------------------------------------- - Additional functions to the module Math. - Rounding functions. - Vadim Isaev, 2020 -********************************************* *) - -MODULE MathRound; - -IMPORT Math; - - -(* Возвращается целая часть числа x. - Returns the integer part of a argument x.*) -PROCEDURE trunc* (x: REAL): REAL; -VAR - a: REAL; - -BEGIN - a := FLT(FLOOR(x)); - IF (x < 0.0) & (x # a) THEN - a := a + 1.0 - END - - RETURN a -END trunc; - - -(* Возвращается дробная часть числа x. - Returns the fractional part of the argument x *) -PROCEDURE frac* (x: REAL): REAL; - RETURN x - trunc(x) -END frac; - - -(* Округление к ближайшему целому. - Rounding to the nearest integer. *) -PROCEDURE round* (x: REAL): REAL; -VAR - a: REAL; - -BEGIN - a := trunc(x); - IF ABS(frac(x)) >= 0.5 THEN - a := a + FLT(Math.sgn(x)) - END - - RETURN a -END round; - - -(* Округление к бОльшему целому. - Rounding to a largest integer *) -PROCEDURE ceil* (x: REAL): REAL; -VAR - a: REAL; - -BEGIN - a := FLT(FLOOR(x)); - IF x # a THEN - a := a + 1.0 - END - - RETURN a -END ceil; - - -(* Округление к меньшему целому. - Rounding to a smallest integer *) -PROCEDURE floor* (x: REAL): REAL; - RETURN FLT(FLOOR(x)) -END floor; - - -(* Округление до определённого количества знаков: - - если Digits отрицательное, то округление - в знаках после десятичной запятой; - - если Digits положительное, то округление - в знаках до запятой *) -PROCEDURE SimpleRoundTo* (AValue: REAL; Digits: INTEGER): REAL; -VAR - RV, a : REAL; - -BEGIN - RV := Math.ipower(10.0, -Digits); - IF AValue < 0.0 THEN - a := trunc((AValue * RV) - 0.5) - ELSE - a := trunc((AValue * RV) + 0.5) - END - - RETURN a / RV -END SimpleRoundTo; - - +(* ****************************************** + Дополнительные функции к модулю Math. + Функции округления. + Вадим Исаев, 2020 + ------------------------------------- + Additional functions to the module Math. + Rounding functions. + Vadim Isaev, 2020 +********************************************* *) + +MODULE MathRound; + +IMPORT Math; + + +(* Возвращается целая часть числа x. + Returns the integer part of a argument x.*) +PROCEDURE trunc* (x: REAL): REAL; +VAR + a: REAL; + +BEGIN + a := FLT(FLOOR(x)); + IF (x < 0.0) & (x # a) THEN + a := a + 1.0 + END + + RETURN a +END trunc; + + +(* Возвращается дробная часть числа x. + Returns the fractional part of the argument x *) +PROCEDURE frac* (x: REAL): REAL; + RETURN x - trunc(x) +END frac; + + +(* Округление к ближайшему целому. + Rounding to the nearest integer. *) +PROCEDURE round* (x: REAL): REAL; +VAR + a: REAL; + +BEGIN + a := trunc(x); + IF ABS(frac(x)) >= 0.5 THEN + a := a + FLT(Math.sgn(x)) + END + + RETURN a +END round; + + +(* Округление к бОльшему целому. + Rounding to a largest integer *) +PROCEDURE ceil* (x: REAL): REAL; +VAR + a: REAL; + +BEGIN + a := FLT(FLOOR(x)); + IF x # a THEN + a := a + 1.0 + END + + RETURN a +END ceil; + + +(* Округление к меньшему целому. + Rounding to a smallest integer *) +PROCEDURE floor* (x: REAL): REAL; + RETURN FLT(FLOOR(x)) +END floor; + + +(* Округление до определённого количества знаков: + - если Digits отрицательное, то округление + в знаках после десятичной запятой; + - если Digits положительное, то округление + в знаках до запятой *) +PROCEDURE SimpleRoundTo* (AValue: REAL; Digits: INTEGER): REAL; +VAR + RV, a : REAL; + +BEGIN + RV := Math.ipower(10.0, -Digits); + IF AValue < 0.0 THEN + a := trunc((AValue * RV) - 0.5) + ELSE + a := trunc((AValue * RV) + 0.5) + END + + RETURN a / RV +END SimpleRoundTo; + + END MathRound. \ No newline at end of file diff --git a/programs/develop/oberon07/lib/Math/MathStat.ob07 b/programs/develop/oberon07/lib/Math/MathStat.ob07 index a05d14476f..9e56d93a2a 100644 --- a/programs/develop/oberon07/lib/Math/MathStat.ob07 +++ b/programs/develop/oberon07/lib/Math/MathStat.ob07 @@ -1,238 +1,238 @@ -(* ******************************************** - Дополнение к модулю Math. - Статистические процедуры. - ------------------------------------- - Additional functions to the module Math. - Statistical functions -*********************************************** *) - -MODULE MathStat; - -IMPORT Math; - - -(*Минимальное значение. Нецелое *) -PROCEDURE MinValue* (data: ARRAY OF REAL; N: INTEGER): REAL; -VAR - i: INTEGER; - a: REAL; - -BEGIN - a := data[0]; - FOR i := 1 TO N - 1 DO - IF data[i] < a THEN - a := data[i] - END - END - - RETURN a -END MinValue; - - -(*Минимальное значение. Целое *) -PROCEDURE MinIntValue* (data: ARRAY OF INTEGER; N: INTEGER): INTEGER; -VAR - i: INTEGER; - a: INTEGER; - -BEGIN - a := data[0]; - FOR i := 1 TO N - 1 DO - IF data[i] < a THEN - a := data[i] - END - END - - RETURN a -END MinIntValue; - - -(*Максимальное значение. Нецелое *) -PROCEDURE MaxValue* (data: ARRAY OF REAL; N: INTEGER): REAL; -VAR - i: INTEGER; - a: REAL; - -BEGIN - a := data[0]; - FOR i := 1 TO N - 1 DO - IF data[i] > a THEN - a := data[i] - END - END - - RETURN a -END MaxValue; - - -(*Максимальное значение. Целое *) -PROCEDURE MaxIntValue* (data: ARRAY OF INTEGER; N: INTEGER): INTEGER; -VAR - i: INTEGER; - a: INTEGER; - -BEGIN - a := data[0]; - FOR i := 1 TO N - 1 DO - IF data[i] > a THEN - a := data[i] - END - END - - RETURN a -END MaxIntValue; - - -(* Сумма значений массива *) -PROCEDURE Sum* (data: ARRAY OF REAL; Count: INTEGER): REAL; -VAR - a: REAL; - i: INTEGER; - -BEGIN - a := 0.0; - FOR i := 0 TO Count - 1 DO - a := a + data[i] - END - - RETURN a -END Sum; - - -(* Сумма целых значений массива *) -PROCEDURE SumInt* (data: ARRAY OF INTEGER; Count: INTEGER): INTEGER; -VAR - a: INTEGER; - i: INTEGER; - -BEGIN - a := 0; - FOR i := 0 TO Count - 1 DO - a := a + data[i] - END - - RETURN a -END SumInt; - - -(* Сумма квадратов значений массива *) -PROCEDURE SumOfSquares* (data : ARRAY OF REAL; Count: INTEGER): REAL; -VAR - a: REAL; - i: INTEGER; - -BEGIN - a := 0.0; - FOR i := 0 TO Count - 1 DO - a := a + Math.sqrr(data[i]) - END - - RETURN a -END SumOfSquares; - - -(* Сумма значений и сумма квадратов значений массмва *) -PROCEDURE SumsAndSquares* (data: ARRAY OF REAL; Count : INTEGER; - VAR sum, sumofsquares : REAL); -VAR - i: INTEGER; - temp: REAL; - -BEGIN - sumofsquares := 0.0; - sum := 0.0; - FOR i := 0 TO Count - 1 DO - temp := data[i]; - sumofsquares := sumofsquares + Math.sqrr(temp); - sum := sum + temp - END -END SumsAndSquares; - - -(* Средниее значений массива *) -PROCEDURE Mean* (data: ARRAY OF REAL; Count: INTEGER): REAL; - RETURN Sum(data, Count) / FLT(Count) -END Mean; - - -PROCEDURE MeanAndTotalVariance* (data: ARRAY OF REAL; Count: INTEGER; - VAR mu: REAL; VAR variance: REAL); -VAR - i: INTEGER; - -BEGIN - mu := Mean(data, Count); - variance := 0.0; - FOR i := 0 TO Count - 1 DO - variance := variance + Math.sqrr(data[i] - mu) - END -END MeanAndTotalVariance; - - -(* Вычисление статистической дисперсии равной сумме квадратов разницы - между каждым конкретным значением массива Data и средним значением *) -PROCEDURE TotalVariance* (data: ARRAY OF REAL; Count: INTEGER): REAL; -VAR - mu, tv: REAL; - -BEGIN - MeanAndTotalVariance(data, Count, mu, tv) - RETURN tv -END TotalVariance; - - -(* Типовая дисперсия всех значений массива *) -PROCEDURE Variance* (data: ARRAY OF REAL; Count: INTEGER): REAL; -VAR - a: REAL; - -BEGIN - IF Count = 1 THEN - a := 0.0 - ELSE - a := TotalVariance(data, Count) / FLT(Count - 1) - END - - RETURN a -END Variance; - - -(* Стандартное среднеквадратичное отклонение *) -PROCEDURE StdDev* (data: ARRAY OF REAL; Count: INTEGER): REAL; - RETURN Math.sqrt(Variance(data, Count)) -END StdDev; - - -(* Среднее арифметическое всех значений массива, и среднее отклонение *) -PROCEDURE MeanAndStdDev* (data: ARRAY OF REAL; Count: INTEGER; - VAR mean: REAL; VAR stdDev: REAL); -VAR - totalVariance: REAL; - -BEGIN - MeanAndTotalVariance(data, Count, mean, totalVariance); - IF Count < 2 THEN - stdDev := 0.0 - ELSE - stdDev := Math.sqrt(totalVariance / FLT(Count - 1)) - END -END MeanAndStdDev; - - -(* Евклидова норма для всех значений массива *) -PROCEDURE Norm* (data: ARRAY OF REAL; Count: INTEGER): REAL; -VAR - a: REAL; - i: INTEGER; - -BEGIN - a := 0.0; - FOR i := 0 TO Count - 1 DO - a := a + Math.sqrr(data[i]) - END - - RETURN Math.sqrt(a) -END Norm; - - +(* ******************************************** + Дополнение к модулю Math. + Статистические процедуры. + ------------------------------------- + Additional functions to the module Math. + Statistical functions +*********************************************** *) + +MODULE MathStat; + +IMPORT Math; + + +(*Минимальное значение. Нецелое *) +PROCEDURE MinValue* (data: ARRAY OF REAL; N: INTEGER): REAL; +VAR + i: INTEGER; + a: REAL; + +BEGIN + a := data[0]; + FOR i := 1 TO N - 1 DO + IF data[i] < a THEN + a := data[i] + END + END + + RETURN a +END MinValue; + + +(*Минимальное значение. Целое *) +PROCEDURE MinIntValue* (data: ARRAY OF INTEGER; N: INTEGER): INTEGER; +VAR + i: INTEGER; + a: INTEGER; + +BEGIN + a := data[0]; + FOR i := 1 TO N - 1 DO + IF data[i] < a THEN + a := data[i] + END + END + + RETURN a +END MinIntValue; + + +(*Максимальное значение. Нецелое *) +PROCEDURE MaxValue* (data: ARRAY OF REAL; N: INTEGER): REAL; +VAR + i: INTEGER; + a: REAL; + +BEGIN + a := data[0]; + FOR i := 1 TO N - 1 DO + IF data[i] > a THEN + a := data[i] + END + END + + RETURN a +END MaxValue; + + +(*Максимальное значение. Целое *) +PROCEDURE MaxIntValue* (data: ARRAY OF INTEGER; N: INTEGER): INTEGER; +VAR + i: INTEGER; + a: INTEGER; + +BEGIN + a := data[0]; + FOR i := 1 TO N - 1 DO + IF data[i] > a THEN + a := data[i] + END + END + + RETURN a +END MaxIntValue; + + +(* Сумма значений массива *) +PROCEDURE Sum* (data: ARRAY OF REAL; Count: INTEGER): REAL; +VAR + a: REAL; + i: INTEGER; + +BEGIN + a := 0.0; + FOR i := 0 TO Count - 1 DO + a := a + data[i] + END + + RETURN a +END Sum; + + +(* Сумма целых значений массива *) +PROCEDURE SumInt* (data: ARRAY OF INTEGER; Count: INTEGER): INTEGER; +VAR + a: INTEGER; + i: INTEGER; + +BEGIN + a := 0; + FOR i := 0 TO Count - 1 DO + a := a + data[i] + END + + RETURN a +END SumInt; + + +(* Сумма квадратов значений массива *) +PROCEDURE SumOfSquares* (data : ARRAY OF REAL; Count: INTEGER): REAL; +VAR + a: REAL; + i: INTEGER; + +BEGIN + a := 0.0; + FOR i := 0 TO Count - 1 DO + a := a + Math.sqrr(data[i]) + END + + RETURN a +END SumOfSquares; + + +(* Сумма значений и сумма квадратов значений массмва *) +PROCEDURE SumsAndSquares* (data: ARRAY OF REAL; Count : INTEGER; + VAR sum, sumofsquares : REAL); +VAR + i: INTEGER; + temp: REAL; + +BEGIN + sumofsquares := 0.0; + sum := 0.0; + FOR i := 0 TO Count - 1 DO + temp := data[i]; + sumofsquares := sumofsquares + Math.sqrr(temp); + sum := sum + temp + END +END SumsAndSquares; + + +(* Средниее значений массива *) +PROCEDURE Mean* (data: ARRAY OF REAL; Count: INTEGER): REAL; + RETURN Sum(data, Count) / FLT(Count) +END Mean; + + +PROCEDURE MeanAndTotalVariance* (data: ARRAY OF REAL; Count: INTEGER; + VAR mu: REAL; VAR variance: REAL); +VAR + i: INTEGER; + +BEGIN + mu := Mean(data, Count); + variance := 0.0; + FOR i := 0 TO Count - 1 DO + variance := variance + Math.sqrr(data[i] - mu) + END +END MeanAndTotalVariance; + + +(* Вычисление статистической дисперсии равной сумме квадратов разницы + между каждым конкретным значением массива Data и средним значением *) +PROCEDURE TotalVariance* (data: ARRAY OF REAL; Count: INTEGER): REAL; +VAR + mu, tv: REAL; + +BEGIN + MeanAndTotalVariance(data, Count, mu, tv) + RETURN tv +END TotalVariance; + + +(* Типовая дисперсия всех значений массива *) +PROCEDURE Variance* (data: ARRAY OF REAL; Count: INTEGER): REAL; +VAR + a: REAL; + +BEGIN + IF Count = 1 THEN + a := 0.0 + ELSE + a := TotalVariance(data, Count) / FLT(Count - 1) + END + + RETURN a +END Variance; + + +(* Стандартное среднеквадратичное отклонение *) +PROCEDURE StdDev* (data: ARRAY OF REAL; Count: INTEGER): REAL; + RETURN Math.sqrt(Variance(data, Count)) +END StdDev; + + +(* Среднее арифметическое всех значений массива, и среднее отклонение *) +PROCEDURE MeanAndStdDev* (data: ARRAY OF REAL; Count: INTEGER; + VAR mean: REAL; VAR stdDev: REAL); +VAR + totalVariance: REAL; + +BEGIN + MeanAndTotalVariance(data, Count, mean, totalVariance); + IF Count < 2 THEN + stdDev := 0.0 + ELSE + stdDev := Math.sqrt(totalVariance / FLT(Count - 1)) + END +END MeanAndStdDev; + + +(* Евклидова норма для всех значений массива *) +PROCEDURE Norm* (data: ARRAY OF REAL; Count: INTEGER): REAL; +VAR + a: REAL; + i: INTEGER; + +BEGIN + a := 0.0; + FOR i := 0 TO Count - 1 DO + a := a + Math.sqrr(data[i]) + END + + RETURN Math.sqrt(a) +END Norm; + + END MathStat. \ No newline at end of file diff --git a/programs/develop/oberon07/lib/Math/Rand.ob07 b/programs/develop/oberon07/lib/Math/Rand.ob07 index c13deb6f38..a8372eb080 100644 --- a/programs/develop/oberon07/lib/Math/Rand.ob07 +++ b/programs/develop/oberon07/lib/Math/Rand.ob07 @@ -1,81 +1,81 @@ -(* ************************************ - Генератор какбыслучайных чисел, - Линейный конгруэнтный метод, - алгоритм Лемера. - Вадим Исаев, 2020 - ------------------------------- - Generator pseudorandom numbers, - Linear congruential generator, - Algorithm by D. H. Lehmer. - Vadim Isaev, 2020 -*************************************** *) - -MODULE Rand; - -IMPORT HOST, Math; - - -CONST - - RAND_MAX = 2147483647; - - -VAR - seed: INTEGER; - - -PROCEDURE Randomize*; -BEGIN - seed := HOST.GetTickCount() -END Randomize; - - -(* Целые какбыслучайные числа до RAND_MAX *) -PROCEDURE RandomI* (): INTEGER; -CONST - a = 630360016; - -BEGIN - seed := (a * seed) MOD RAND_MAX - RETURN seed -END RandomI; - - -(* Какбыслучайные числа с плавающей запятой от 0 до 1 *) -PROCEDURE RandomR* (): REAL; - RETURN FLT(RandomI()) / FLT(RAND_MAX) -END RandomR; - - -(* Какбыслучайное число в диапазоне от 0 до l. - Return a random number in a range 0 ... l *) -PROCEDURE RandomITo* (aTo: INTEGER): INTEGER; - RETURN FLOOR(RandomR() * FLT(aTo)) -END RandomITo; - - -(* Какбыслучайное число в диапазоне. - Return a random number in a range *) -PROCEDURE RandomIRange* (aFrom, aTo: INTEGER): INTEGER; - RETURN FLOOR(RandomR() * FLT(aTo - aFrom)) + aFrom -END RandomIRange; - - -(* Какбыслучайное число. Распределение Гаусса *) -PROCEDURE RandG* (mean, stddev: REAL): REAL; -VAR - U, S: REAL; - -BEGIN - REPEAT - U := 2.0 * RandomR() - 1.0; - S := Math.sqrr(U) + Math.sqrr(2.0 * RandomR() - 1.0) - UNTIL (1.0E-20 < S) & (S <= 1.0) - - RETURN Math.sqrt(-2.0 * Math.ln(S) / S) * U * stddev + mean -END RandG; - - -BEGIN - seed := 654321 +(* ************************************ + Генератор какбыслучайных чисел, + Линейный конгруэнтный метод, + алгоритм Лемера. + Вадим Исаев, 2020 + ------------------------------- + Generator pseudorandom numbers, + Linear congruential generator, + Algorithm by D. H. Lehmer. + Vadim Isaev, 2020 +*************************************** *) + +MODULE Rand; + +IMPORT HOST, Math; + + +CONST + + RAND_MAX = 2147483647; + + +VAR + seed: INTEGER; + + +PROCEDURE Randomize*; +BEGIN + seed := HOST.GetTickCount() +END Randomize; + + +(* Целые какбыслучайные числа до RAND_MAX *) +PROCEDURE RandomI* (): INTEGER; +CONST + a = 630360016; + +BEGIN + seed := (a * seed) MOD RAND_MAX + RETURN seed +END RandomI; + + +(* Какбыслучайные числа с плавающей запятой от 0 до 1 *) +PROCEDURE RandomR* (): REAL; + RETURN FLT(RandomI()) / FLT(RAND_MAX) +END RandomR; + + +(* Какбыслучайное число в диапазоне от 0 до l. + Return a random number in a range 0 ... l *) +PROCEDURE RandomITo* (aTo: INTEGER): INTEGER; + RETURN FLOOR(RandomR() * FLT(aTo)) +END RandomITo; + + +(* Какбыслучайное число в диапазоне. + Return a random number in a range *) +PROCEDURE RandomIRange* (aFrom, aTo: INTEGER): INTEGER; + RETURN FLOOR(RandomR() * FLT(aTo - aFrom)) + aFrom +END RandomIRange; + + +(* Какбыслучайное число. Распределение Гаусса *) +PROCEDURE RandG* (mean, stddev: REAL): REAL; +VAR + U, S: REAL; + +BEGIN + REPEAT + U := 2.0 * RandomR() - 1.0; + S := Math.sqrr(U) + Math.sqrr(2.0 * RandomR() - 1.0) + UNTIL (1.0E-20 < S) & (S <= 1.0) + + RETURN Math.sqrt(-2.0 * Math.ln(S) / S) * U * stddev + mean +END RandG; + + +BEGIN + seed := 654321 END Rand. \ No newline at end of file diff --git a/programs/develop/oberon07/lib/Math/RandExt.ob07 b/programs/develop/oberon07/lib/Math/RandExt.ob07 index 1d35795b2b..4990a4f4c8 100644 --- a/programs/develop/oberon07/lib/Math/RandExt.ob07 +++ b/programs/develop/oberon07/lib/Math/RandExt.ob07 @@ -1,298 +1,298 @@ -(* ************************************************************ - Дополнительные алгоритмы генераторов какбыслучайных чисел. - Вадим Исаев, 2020 - - Additional generators of pseudorandom numbers. - Vadim Isaev, 2020 - ************************************************************ *) - -MODULE RandExt; - -IMPORT HOST, MathRound, MathBits; - -CONST - (* Для алгоритма Мерсена-Твистера *) - N = 624; - M = 397; - MATRIX_A = 9908B0DFH; (* constant vector a *) - UPPER_MASK = 80000000H; (* most significant w-r bits *) - LOWER_MASK = 7FFFFFFFH; (* least significant r bits *) - INT_MAX = 4294967295; - - -TYPE -(* структура служебных данных, для алгоритма mrg32k3a *) - random_t = RECORD - mrg32k3a_seed : REAL; - mrg32k3a_x : ARRAY 3 OF REAL; - mrg32k3a_y : ARRAY 3 OF REAL - END; - - (* Для алгоритма Мерсена-Твистера *) - MTKeyArray = ARRAY N OF INTEGER; - -VAR - (* Для алгоритма mrg32k3a *) - prndl: random_t; - (* Для алгоритма Мерсена-Твистера *) - mt : MTKeyArray; (* the array for the state vector *) - mti : INTEGER; (* mti == N+1 means mt[N] is not initialized *) - -(* --------------------------------------------------------------------------- - Генератор какбыслучайных чисел в диапазоне [a,b]. - Алгоритм 133б из книги "Агеев и др. - Бибилотека алгоритмов 101б-150б", - стр. 53. - Переделка из Algol на Oberon и доработка, Вадим Исаев, 2020 - - Generator pseudorandom numbers, algorithm 133b from - Comm ACM 5,10 (Oct 1962) 553. - Convert from Algol to Oberon Vadim Isaev, 2020. - - Входные параметры: - a - начальное вычисляемое значение, тип REAL; - b - конечное вычисляемое значение, тип REAL; - seed - начальное значение для генерации случайного числа. - Должно быть в диапазоне от 10 000 000 000 до 34 359 738 368 (2^35), - нечётное. - --------------------------------------------------------------------------- *) -PROCEDURE alg133b* (a, b: REAL; VAR seed: INTEGER): REAL; -CONST - m35 = 34359738368; - m36 = 68719476736; - m37 = 137438953472; - -VAR - x: INTEGER; -BEGIN - IF seed # 0 THEN - IF (seed MOD 2 = 0) THEN - seed := seed + 1 - END; - x:=seed; - seed:=0; - END; - - x:=5*x; - IF x>=m37 THEN - x:=x-m37 - END; - IF x>=m36 THEN - x:=x-m36 - END; - IF x>=m35 THEN - x:=x-m35 - END; - - RETURN FLT(x) / FLT(m35) * (b - a) + a -END alg133b; - -(* ---------------------------------------------------------- - Генератор почти равномерно распределённых - какбыслучайных чисел mrg32k3a - (Combined Multiple Recursive Generator) от 0 до 1. - Период повторения последовательности = 2^127 - - Generator pseudorandom numbers, - algorithm mrg32k3a. - - Переделка из FreePascal на Oberon, Вадим Исаев, 2020 - Convert from FreePascal to Oberon, Vadim Isaev, 2020 - ---------------------------------------------------------- *) -(* Инициализация генератора. - - Входные параметры: - seed - значение для инициализации. Любое. Если передать - ноль, то вместо ноля будет подставлено кол-во - процессорных тиков. *) -PROCEDURE mrg32k3a_init* (seed: REAL); -BEGIN - prndl.mrg32k3a_x[0] := 1.0; - prndl.mrg32k3a_x[1] := 1.0; - prndl.mrg32k3a_y[0] := 1.0; - prndl.mrg32k3a_y[1] := 1.0; - prndl.mrg32k3a_y[2] := 1.0; - - IF seed # 0.0 THEN - prndl.mrg32k3a_x[2] := seed; - ELSE - prndl.mrg32k3a_x[2] := FLT(HOST.GetTickCount()); - END; - -END mrg32k3a_init; - -(* Генератор какбыслучайных чисел от 0.0 до 1.0. *) -PROCEDURE mrg32k3a* (): REAL; - -CONST - (* random MRG32K3A algorithm constants *) - MRG32K3A_NORM = 2.328306549295728E-10; - MRG32K3A_M1 = 4294967087.0; - MRG32K3A_M2 = 4294944443.0; - MRG32K3A_A12 = 1403580.0; - MRG32K3A_A13 = 810728.0; - MRG32K3A_A21 = 527612.0; - MRG32K3A_A23 = 1370589.0; - RAND_BUFSIZE = 512; - -VAR - - xn, yn, result: REAL; - -BEGIN - (* Часть 1 *) - xn := MRG32K3A_A12 * prndl.mrg32k3a_x[1] - MRG32K3A_A13 * prndl.mrg32k3a_x[2]; - xn := xn - MathRound.trunc(xn / MRG32K3A_M1) * MRG32K3A_M1; - IF xn < 0.0 THEN - xn := xn + MRG32K3A_M1; - END; - - prndl.mrg32k3a_x[2] := prndl.mrg32k3a_x[1]; - prndl.mrg32k3a_x[1] := prndl.mrg32k3a_x[0]; - prndl.mrg32k3a_x[0] := xn; - - (* Часть 2 *) - yn := MRG32K3A_A21 * prndl.mrg32k3a_y[0] - MRG32K3A_A23 * prndl.mrg32k3a_y[2]; - yn := yn - MathRound.trunc(yn / MRG32K3A_M2) * MRG32K3A_M2; - IF yn < 0.0 THEN - yn := yn + MRG32K3A_M2; - END; - - prndl.mrg32k3a_y[2] := prndl.mrg32k3a_y[1]; - prndl.mrg32k3a_y[1] := prndl.mrg32k3a_y[0]; - prndl.mrg32k3a_y[0] := yn; - - (* Смешение частей *) - IF xn <= yn THEN - result := ((xn - yn + MRG32K3A_M1) * MRG32K3A_NORM) - ELSE - result := (xn - yn) * MRG32K3A_NORM; - END; - - RETURN result -END mrg32k3a; - - -(* ------------------------------------------------------------------- - Генератор какбыслучайных чисел, алгоритм Мерсена-Твистера (MT19937). - Переделка из Delphi в Oberon Вадим Исаев, 2020. - - Mersenne Twister Random Number Generator. - - A C-program for MT19937, with initialization improved 2002/1/26. - Coded by Takuji Nishimura and Makoto Matsumoto. - - Adapted for DMath by Jean Debord - Feb. 2007 - Adapted for Oberon-07 by Vadim Isaev - May 2020 - ------------------------------------------------------------ *) -(* Initializes MT generator with a seed *) -PROCEDURE InitMT(Seed : INTEGER); -VAR - i : INTEGER; -BEGIN - mt[0] := MathBits.iand(Seed, INT_MAX); - FOR i := 1 TO N-1 DO - mt[i] := (1812433253 * MathBits.ixor(mt[i-1], LSR(mt[i-1], 30)) + i); - (* See Knuth TAOCP Vol2. 3rd Ed. P.106 For multiplier. - In the previous versions, MSBs of the seed affect - only MSBs of the array mt[]. - 2002/01/09 modified by Makoto Matsumoto *) - mt[i] := MathBits.iand(mt[i], INT_MAX); - (* For >32 Bit machines *) - END; - mti := N; -END InitMT; - -(* Initialize MT generator with an array InitKey[0..(KeyLength - 1)] *) -PROCEDURE InitMTbyArray(InitKey : MTKeyArray; KeyLength : INTEGER); -VAR - i, j, k, k1 : INTEGER; -BEGIN - InitMT(19650218); - - i := 1; - j := 0; - - IF N > KeyLength THEN - k1 := N - ELSE - k1 := KeyLength; - END; - - FOR k := k1 TO 1 BY -1 DO - (* non linear *) - mt[i] := MathBits.ixor(mt[i], (MathBits.ixor(mt[i-1], LSR(mt[i-1], 30)) * 1664525)) + InitKey[j] + j; - mt[i] := MathBits.iand(mt[i], INT_MAX); (* for WORDSIZE > 32 machines *) - INC(i); - INC(j); - IF i >= N THEN - mt[0] := mt[N-1]; - i := 1; - END; - IF j >= KeyLength THEN - j := 0; - END; - END; - - FOR k := N-1 TO 1 BY -1 DO - (* non linear *) - mt[i] := MathBits.ixor(mt[i], (MathBits.ixor(mt[i-1], LSR(mt[i-1], 30)) * 1566083941)) - i; - mt[i] := MathBits.iand(mt[i], INT_MAX); (* for WORDSIZE > 32 machines *) - INC(i); - IF i >= N THEN - mt[0] := mt[N-1]; - i := 1; - END; - END; - - mt[0] := UPPER_MASK; (* MSB is 1; assuring non-zero initial array *) - -END InitMTbyArray; - -(* Generates a integer Random number on [-2^31 .. 2^31 - 1] interval *) -PROCEDURE IRanMT(): INTEGER; -VAR - mag01 : ARRAY 2 OF INTEGER; - y,k : INTEGER; -BEGIN - IF mti >= N THEN (* generate N words at one Time *) - (* If IRanMT() has not been called, a default initial seed is used *) - IF mti = N + 1 THEN - InitMT(5489); - END; - - FOR k := 0 TO (N-M)-1 DO - y := MathBits.ior(MathBits.iand(mt[k], UPPER_MASK), MathBits.iand(mt[k+1], LOWER_MASK)); - mt[k] := MathBits.ixor(MathBits.ixor(mt[k+M], LSR(y, 1)), mag01[MathBits.iand(y, 1H)]); - END; - - FOR k := (N-M) TO (N-2) DO - y := MathBits.ior(MathBits.iand(mt[k], UPPER_MASK), MathBits.iand(mt[k+1], LOWER_MASK)); - mt[k] := MathBits.ixor(mt[k - (N - M)], MathBits.ixor(LSR(y, 1), mag01[MathBits.iand(y, 1H)])); - END; - - y := MathBits.ior(MathBits.iand(mt[N-1], UPPER_MASK), MathBits.iand(mt[0], LOWER_MASK)); - mt[N-1] := MathBits.ixor(mt[M-1], MathBits.ixor(LSR(y, 1), mag01[MathBits.iand(y, 1H)])); - - mti := 0; - END; - - y := mt[mti]; - INC(mti); - - (* Tempering *) - y := MathBits.ixor(y, LSR(y, 11)); - y := MathBits.ixor(y, MathBits.iand(LSL(y, 7), 9D2C5680H)); - y := MathBits.ixor(y, MathBits.iand(LSL(y, 15), 4022730752)); - y := MathBits.ixor(y, LSR(y, 18)); - - RETURN y -END IRanMT; - -(* Generates a real Random number on [0..1] interval *) -PROCEDURE RRanMT(): REAL; -BEGIN - RETURN FLT(IRanMT())/FLT(INT_MAX) -END RRanMT; - - -END RandExt. +(* ************************************************************ + Дополнительные алгоритмы генераторов какбыслучайных чисел. + Вадим Исаев, 2020 + + Additional generators of pseudorandom numbers. + Vadim Isaev, 2020 + ************************************************************ *) + +MODULE RandExt; + +IMPORT HOST, MathRound, MathBits; + +CONST + (* Для алгоритма Мерсена-Твистера *) + N = 624; + M = 397; + MATRIX_A = 9908B0DFH; (* constant vector a *) + UPPER_MASK = 80000000H; (* most significant w-r bits *) + LOWER_MASK = 7FFFFFFFH; (* least significant r bits *) + INT_MAX = 4294967295; + + +TYPE +(* структура служебных данных, для алгоритма mrg32k3a *) + random_t = RECORD + mrg32k3a_seed : REAL; + mrg32k3a_x : ARRAY 3 OF REAL; + mrg32k3a_y : ARRAY 3 OF REAL + END; + + (* Для алгоритма Мерсена-Твистера *) + MTKeyArray = ARRAY N OF INTEGER; + +VAR + (* Для алгоритма mrg32k3a *) + prndl: random_t; + (* Для алгоритма Мерсена-Твистера *) + mt : MTKeyArray; (* the array for the state vector *) + mti : INTEGER; (* mti == N+1 means mt[N] is not initialized *) + +(* --------------------------------------------------------------------------- + Генератор какбыслучайных чисел в диапазоне [a,b]. + Алгоритм 133б из книги "Агеев и др. - Бибилотека алгоритмов 101б-150б", + стр. 53. + Переделка из Algol на Oberon и доработка, Вадим Исаев, 2020 + + Generator pseudorandom numbers, algorithm 133b from + Comm ACM 5,10 (Oct 1962) 553. + Convert from Algol to Oberon Vadim Isaev, 2020. + + Входные параметры: + a - начальное вычисляемое значение, тип REAL; + b - конечное вычисляемое значение, тип REAL; + seed - начальное значение для генерации случайного числа. + Должно быть в диапазоне от 10 000 000 000 до 34 359 738 368 (2^35), + нечётное. + --------------------------------------------------------------------------- *) +PROCEDURE alg133b* (a, b: REAL; VAR seed: INTEGER): REAL; +CONST + m35 = 34359738368; + m36 = 68719476736; + m37 = 137438953472; + +VAR + x: INTEGER; +BEGIN + IF seed # 0 THEN + IF (seed MOD 2 = 0) THEN + seed := seed + 1 + END; + x:=seed; + seed:=0; + END; + + x:=5*x; + IF x>=m37 THEN + x:=x-m37 + END; + IF x>=m36 THEN + x:=x-m36 + END; + IF x>=m35 THEN + x:=x-m35 + END; + + RETURN FLT(x) / FLT(m35) * (b - a) + a +END alg133b; + +(* ---------------------------------------------------------- + Генератор почти равномерно распределённых + какбыслучайных чисел mrg32k3a + (Combined Multiple Recursive Generator) от 0 до 1. + Период повторения последовательности = 2^127 + + Generator pseudorandom numbers, + algorithm mrg32k3a. + + Переделка из FreePascal на Oberon, Вадим Исаев, 2020 + Convert from FreePascal to Oberon, Vadim Isaev, 2020 + ---------------------------------------------------------- *) +(* Инициализация генератора. + + Входные параметры: + seed - значение для инициализации. Любое. Если передать + ноль, то вместо ноля будет подставлено кол-во + процессорных тиков. *) +PROCEDURE mrg32k3a_init* (seed: REAL); +BEGIN + prndl.mrg32k3a_x[0] := 1.0; + prndl.mrg32k3a_x[1] := 1.0; + prndl.mrg32k3a_y[0] := 1.0; + prndl.mrg32k3a_y[1] := 1.0; + prndl.mrg32k3a_y[2] := 1.0; + + IF seed # 0.0 THEN + prndl.mrg32k3a_x[2] := seed; + ELSE + prndl.mrg32k3a_x[2] := FLT(HOST.GetTickCount()); + END; + +END mrg32k3a_init; + +(* Генератор какбыслучайных чисел от 0.0 до 1.0. *) +PROCEDURE mrg32k3a* (): REAL; + +CONST + (* random MRG32K3A algorithm constants *) + MRG32K3A_NORM = 2.328306549295728E-10; + MRG32K3A_M1 = 4294967087.0; + MRG32K3A_M2 = 4294944443.0; + MRG32K3A_A12 = 1403580.0; + MRG32K3A_A13 = 810728.0; + MRG32K3A_A21 = 527612.0; + MRG32K3A_A23 = 1370589.0; + RAND_BUFSIZE = 512; + +VAR + + xn, yn, result: REAL; + +BEGIN + (* Часть 1 *) + xn := MRG32K3A_A12 * prndl.mrg32k3a_x[1] - MRG32K3A_A13 * prndl.mrg32k3a_x[2]; + xn := xn - MathRound.trunc(xn / MRG32K3A_M1) * MRG32K3A_M1; + IF xn < 0.0 THEN + xn := xn + MRG32K3A_M1; + END; + + prndl.mrg32k3a_x[2] := prndl.mrg32k3a_x[1]; + prndl.mrg32k3a_x[1] := prndl.mrg32k3a_x[0]; + prndl.mrg32k3a_x[0] := xn; + + (* Часть 2 *) + yn := MRG32K3A_A21 * prndl.mrg32k3a_y[0] - MRG32K3A_A23 * prndl.mrg32k3a_y[2]; + yn := yn - MathRound.trunc(yn / MRG32K3A_M2) * MRG32K3A_M2; + IF yn < 0.0 THEN + yn := yn + MRG32K3A_M2; + END; + + prndl.mrg32k3a_y[2] := prndl.mrg32k3a_y[1]; + prndl.mrg32k3a_y[1] := prndl.mrg32k3a_y[0]; + prndl.mrg32k3a_y[0] := yn; + + (* Смешение частей *) + IF xn <= yn THEN + result := ((xn - yn + MRG32K3A_M1) * MRG32K3A_NORM) + ELSE + result := (xn - yn) * MRG32K3A_NORM; + END; + + RETURN result +END mrg32k3a; + + +(* ------------------------------------------------------------------- + Генератор какбыслучайных чисел, алгоритм Мерсена-Твистера (MT19937). + Переделка из Delphi в Oberon Вадим Исаев, 2020. + + Mersenne Twister Random Number Generator. + + A C-program for MT19937, with initialization improved 2002/1/26. + Coded by Takuji Nishimura and Makoto Matsumoto. + + Adapted for DMath by Jean Debord - Feb. 2007 + Adapted for Oberon-07 by Vadim Isaev - May 2020 + ------------------------------------------------------------ *) +(* Initializes MT generator with a seed *) +PROCEDURE InitMT(Seed : INTEGER); +VAR + i : INTEGER; +BEGIN + mt[0] := MathBits.iand(Seed, INT_MAX); + FOR i := 1 TO N-1 DO + mt[i] := (1812433253 * MathBits.ixor(mt[i-1], LSR(mt[i-1], 30)) + i); + (* See Knuth TAOCP Vol2. 3rd Ed. P.106 For multiplier. + In the previous versions, MSBs of the seed affect + only MSBs of the array mt[]. + 2002/01/09 modified by Makoto Matsumoto *) + mt[i] := MathBits.iand(mt[i], INT_MAX); + (* For >32 Bit machines *) + END; + mti := N; +END InitMT; + +(* Initialize MT generator with an array InitKey[0..(KeyLength - 1)] *) +PROCEDURE InitMTbyArray(InitKey : MTKeyArray; KeyLength : INTEGER); +VAR + i, j, k, k1 : INTEGER; +BEGIN + InitMT(19650218); + + i := 1; + j := 0; + + IF N > KeyLength THEN + k1 := N + ELSE + k1 := KeyLength; + END; + + FOR k := k1 TO 1 BY -1 DO + (* non linear *) + mt[i] := MathBits.ixor(mt[i], (MathBits.ixor(mt[i-1], LSR(mt[i-1], 30)) * 1664525)) + InitKey[j] + j; + mt[i] := MathBits.iand(mt[i], INT_MAX); (* for WORDSIZE > 32 machines *) + INC(i); + INC(j); + IF i >= N THEN + mt[0] := mt[N-1]; + i := 1; + END; + IF j >= KeyLength THEN + j := 0; + END; + END; + + FOR k := N-1 TO 1 BY -1 DO + (* non linear *) + mt[i] := MathBits.ixor(mt[i], (MathBits.ixor(mt[i-1], LSR(mt[i-1], 30)) * 1566083941)) - i; + mt[i] := MathBits.iand(mt[i], INT_MAX); (* for WORDSIZE > 32 machines *) + INC(i); + IF i >= N THEN + mt[0] := mt[N-1]; + i := 1; + END; + END; + + mt[0] := UPPER_MASK; (* MSB is 1; assuring non-zero initial array *) + +END InitMTbyArray; + +(* Generates a integer Random number on [-2^31 .. 2^31 - 1] interval *) +PROCEDURE IRanMT(): INTEGER; +VAR + mag01 : ARRAY 2 OF INTEGER; + y,k : INTEGER; +BEGIN + IF mti >= N THEN (* generate N words at one Time *) + (* If IRanMT() has not been called, a default initial seed is used *) + IF mti = N + 1 THEN + InitMT(5489); + END; + + FOR k := 0 TO (N-M)-1 DO + y := MathBits.ior(MathBits.iand(mt[k], UPPER_MASK), MathBits.iand(mt[k+1], LOWER_MASK)); + mt[k] := MathBits.ixor(MathBits.ixor(mt[k+M], LSR(y, 1)), mag01[MathBits.iand(y, 1H)]); + END; + + FOR k := (N-M) TO (N-2) DO + y := MathBits.ior(MathBits.iand(mt[k], UPPER_MASK), MathBits.iand(mt[k+1], LOWER_MASK)); + mt[k] := MathBits.ixor(mt[k - (N - M)], MathBits.ixor(LSR(y, 1), mag01[MathBits.iand(y, 1H)])); + END; + + y := MathBits.ior(MathBits.iand(mt[N-1], UPPER_MASK), MathBits.iand(mt[0], LOWER_MASK)); + mt[N-1] := MathBits.ixor(mt[M-1], MathBits.ixor(LSR(y, 1), mag01[MathBits.iand(y, 1H)])); + + mti := 0; + END; + + y := mt[mti]; + INC(mti); + + (* Tempering *) + y := MathBits.ixor(y, LSR(y, 11)); + y := MathBits.ixor(y, MathBits.iand(LSL(y, 7), 9D2C5680H)); + y := MathBits.ixor(y, MathBits.iand(LSL(y, 15), 4022730752)); + y := MathBits.ixor(y, LSR(y, 18)); + + RETURN y +END IRanMT; + +(* Generates a real Random number on [0..1] interval *) +PROCEDURE RRanMT(): REAL; +BEGIN + RETURN FLT(IRanMT())/FLT(INT_MAX) +END RRanMT; + + +END RandExt. diff --git a/programs/develop/oberon07/source/AMD64.ob07 b/programs/develop/oberon07/source/AMD64.ob07 index 5c0dfab521..9242cb1937 100644 --- a/programs/develop/oberon07/source/AMD64.ob07 +++ b/programs/develop/oberon07/source/AMD64.ob07 @@ -1,7 +1,7 @@ (* BSD 2-Clause License - Copyright (c) 2018-2022, Anton Krotov + Copyright (c) 2018-2023, Anton Krotov All rights reserved. *) @@ -1152,14 +1152,13 @@ BEGIN movrm(reg1, reg1, 0) |IL.opPARAM: - n := param2; - IF n = 1 THEN + IF param2 = 1 THEN UnOp(reg1); push(reg1); drop ELSE - ASSERT(R.top + 1 <= n); - PushAll(n) + ASSERT(R.top + 1 <= param2); + PushAll(param2) END |IL.opJNZ1: @@ -1344,8 +1343,8 @@ BEGIN |IL.opNEW: PushAll(1); - n := param2 + 8; - ASSERT(UTILS.Align(n, 8)); + n := param2 + 16; + ASSERT(UTILS.Align(n, 16)); pushc(n); pushc(param1); CallRTL(IL._new) @@ -1787,11 +1786,6 @@ BEGIN X86._movrm(reg1, reg1, 0, param2 * 8, FALSE); X86._movrm(reg1, reg2, 0, param2 * 8, TRUE) - |IL.opCHKBYTE: - BinOp(reg1, reg2); - cmprc(reg1, 256); - jcc(jb, param1) - |IL.opCHKIDX: UnOp(reg1); cmprc(reg1, param2); @@ -1832,14 +1826,6 @@ BEGIN INCL(R.regs, reg1); ASSERT(REG.GetReg(R, reg1)) - |IL.opCHR: - UnOp(reg1); - andrc(reg1, 255) - - |IL.opWCHR: - UnOp(reg1); - andrc(reg1, 65535) - |IL.opEQP, IL.opNEP, IL.opEQIP, IL.opNEIP: UnOp(reg1); reg2 := GetAnyReg(); @@ -2385,6 +2371,7 @@ VAR BEGIN Xmm[0] := 0; + X86.align16(TRUE); tcount := CHL.Length(IL.codes.types); Win64RegPar[0] := rcx; diff --git a/programs/develop/oberon07/source/ARITH.ob07 b/programs/develop/oberon07/source/ARITH.ob07 index d572d8b830..c0fc195645 100644 --- a/programs/develop/oberon07/source/ARITH.ob07 +++ b/programs/develop/oberon07/source/ARITH.ob07 @@ -1,7 +1,7 @@ (* BSD 2-Clause License - Copyright (c) 2018-2021, Anton Krotov + Copyright (c) 2018-2022, Anton Krotov All rights reserved. *) @@ -217,7 +217,6 @@ END opFloat2; PROCEDURE fconv* (s: ARRAY OF CHAR; VAR v: VALUE; VAR error: INTEGER); VAR value: REAL; - frac: REAL; exp10: REAL; i, n, d: INTEGER; minus: BOOLEAN; @@ -225,32 +224,24 @@ VAR BEGIN error := 0; value := 0.0; - frac := 0.0; - exp10 := 1.0; minus := FALSE; n := 0; - i := 0; - WHILE (error = 0) & STRINGS.digit(s[i]) DO - IF opFloat2(value, 10.0, "*") & opFloat2(value, FLT(digit[ORD(s[i])]), "+") THEN + exp10 := 0.0; + WHILE (error = 0) & (STRINGS.digit(s[i]) OR (s[i] = ".")) DO + IF s[i] = "." THEN + exp10 := 1.0; INC(i) ELSE - error := 4 + IF opFloat2(value, 10.0, "*") & opFloat2(value, FLT(digit[ORD(s[i])]), "+") & opFloat2(exp10, 10.0, "*") THEN + INC(i) + ELSE + error := 4 + END END END; - INC(i); - - WHILE (error = 0) & STRINGS.digit(s[i]) DO - IF opFloat2(frac, 10.0, "*") & opFloat2(frac, FLT(digit[ORD(s[i])]), "+") THEN - exp10 := exp10 * 10.0; - INC(i) - ELSE - error := 4 - END - END; - - IF ~opFloat2(value, frac / exp10, "+") THEN + IF ~opFloat2(value, exp10, "/") THEN error := 4 END; diff --git a/programs/develop/oberon07/source/Compiler.ob07 b/programs/develop/oberon07/source/Compiler.ob07 index b849c52d20..7ea35d6e8c 100644 --- a/programs/develop/oberon07/source/Compiler.ob07 +++ b/programs/develop/oberon07/source/Compiler.ob07 @@ -1,7 +1,7 @@ (* BSD 2-Clause License - Copyright (c) 2018-2022, Anton Krotov + Copyright (c) 2018-2023, Anton Krotov All rights reserved. *) @@ -48,6 +48,7 @@ VAR BEGIN + options.lower := TRUE; out := ""; checking := options.checking; _end := FALSE; @@ -133,6 +134,9 @@ BEGIN ELSIF param = "-lower" THEN options.lower := TRUE + ELSIF param = "-upper" THEN + options.lower := FALSE + ELSIF param = "-pic" THEN options.pic := TRUE @@ -215,7 +219,7 @@ BEGIN C.Ln; C.String("Akron Oberon Compiler v"); C.Int(UTILS.vMajor); C.String("."); C.Int2(UTILS.vMinor); C.String(" ("); C.Int(UTILS.bit_depth); C.StringLn("-bit) " + UTILS.Date); - C.StringLn("Copyright (c) 2018-2022, Anton Krotov"); + C.StringLn("Copyright (c) 2018-2023, Anton Krotov"); IF inname = "" THEN C.Ln; @@ -243,7 +247,8 @@ BEGIN C.StringLn(" -stk set size of stack in Mbytes (Windows, Linux, KolibriOS)"); C.Ln; C.StringLn(" -nochk <'ptibcwra'> disable runtime checking (pointers, types, indexes,"); C.StringLn(" BYTE, CHR, WCHR)"); C.Ln; - C.StringLn(" -lower allow lower case for keywords"); C.Ln; + C.StringLn(" -lower allow lower case for keywords (default)"); C.Ln; + C.StringLn(" -upper only upper case for keywords"); C.Ln; C.StringLn(" -def define conditional compilation symbol"); C.Ln; C.StringLn(" -ver set version of program (KolibriOS DLL)"); C.Ln; C.StringLn(" -ram set size of RAM in bytes (MSP430) or Kbytes (STM32)"); C.Ln; diff --git a/programs/develop/oberon07/source/FILES.ob07 b/programs/develop/oberon07/source/FILES.ob07 index d1bbde9cbf..646def3e3d 100644 --- a/programs/develop/oberon07/source/FILES.ob07 +++ b/programs/develop/oberon07/source/FILES.ob07 @@ -1,13 +1,13 @@ (* BSD 2-Clause License - Copyright (c) 2018-2021, Anton Krotov + Copyright (c) 2018-2022, Anton Krotov All rights reserved. *) MODULE FILES; -IMPORT UTILS, C := COLLECTIONS, CONSOLE; +IMPORT UTILS, C := COLLECTIONS; TYPE diff --git a/programs/develop/oberon07/source/IL.ob07 b/programs/develop/oberon07/source/IL.ob07 index ba668813ed..f07160c454 100644 --- a/programs/develop/oberon07/source/IL.ob07 +++ b/programs/develop/oberon07/source/IL.ob07 @@ -1,7 +1,7 @@ (* BSD 2-Clause License - Copyright (c) 2018-2022, Anton Krotov + Copyright (c) 2018-2023, Anton Krotov All rights reserved. *) @@ -24,7 +24,7 @@ CONST opCOPYA* = 6; opCASET* = 7; opMULC* = 8; opMUL* = 9; opDIV* = 10; opMOD* = 11; opDIVL* = 12; opMODL* = 13; opDIVR* = 14; opMODR* = 15; opUMINUS* = 16; opADD* = 17; opSUB* = 18; opONERR* = 19; opSUBL* = 20; opADDC* = 21; opSUBR* = 22; - opSAVE* = 23; opSAVEC* = 24; opSAVE8* = 25; opSAVE8C* = 26; opCHKBYTE* = 27; opDROP* = 28; + opSAVE* = 23; opSAVEC* = 24; opSAVE8* = 25; opSAVE8C* = 26; (*opCHKBYTE* = 27;*) opDROP* = 28; opNOT* = 29; opEQ* = 30; opNE* = opEQ + 1; opLT* = opEQ + 2; opLE* = opEQ + 3; opGT* = opEQ + 4; opGE* = opEQ + 5 (* 35 *); @@ -72,7 +72,7 @@ CONST opPUSHT* = 169; opTYPEGR* = 170; opISREC* = 171; opCHKIDX* = 172; opPARAM* = 173; opCHKIDX2* = 174; opLEN* = 175; opROT* = 176; opSAVES* = 177; opSADR* = 178; opLENGTHW* = 179; - opCHR* = 180; opENDSW* = 181; opLEAVEF* = 182; opCLEANUP* = 183; opMOVE* = 184; + (*opCHR* = 180;*) opENDSW* = 181; opLEAVEF* = 182; opCLEANUP* = 183; opMOVE* = 184; opLSR* = 185; opLSR1* = 186; opLSR2* = 187; opMIN* = 188; opMINC* = 189; opMAX* = 190; opMAXC* = 191; opSYSVALIGN16* = 192; opEQB* = 193; opNEB* = 194; opINF* = 195; opWIN64ALIGN16* = 196; opVLOAD8* = 197; opGLOAD8* = 198; @@ -80,7 +80,7 @@ CONST opLOAD64* = 202; opLLOAD64* = 203; opVLOAD64* = 204; opGLOAD64* = 205; opSAVE64* = 206; opTYPEGD* = 207; opCALLI* = 208; opPUSHIP* = 209; opSAVEIP* = 210; opEQIP* = 211; opNEIP* = 212; - opSAVE16C* = 213; opWCHR* = 214; opHANDLER* = 215; + opSAVE16C* = 213; (*opWCHR* = 214;*) opHANDLER* = 215; opSYSVCALL* = 216; opSYSVCALLI* = 217; opSYSVCALLP* = 218; opFNAME* = 219; opFASTCALL* = 220; @@ -265,12 +265,22 @@ BEGIN END PutByte; +PROCEDURE AlignData (n: INTEGER); +BEGIN + WHILE CHL.Length(codes.data) MOD n # 0 DO + PutByte(0) + END +END AlignData; + + PROCEDURE putstr* (s: ARRAY OF CHAR): INTEGER; VAR i, n, res: INTEGER; BEGIN + IF TARGETS.WinLin THEN + AlignData(16) + END; res := CHL.Length(codes.data); - i := 0; n := LENGTH(s); WHILE i < n DO @@ -290,6 +300,9 @@ VAR BEGIN IF codes.charoffs[c] = -1 THEN + IF TARGETS.WinLin THEN + AlignData(16) + END; res := CHL.Length(codes.data); PutByte(c); PutByte(0); @@ -307,12 +320,12 @@ VAR i, n, res: INTEGER; BEGIN - res := CHL.Length(codes.data); - - IF ODD(res) THEN - PutByte(0); - INC(res) + IF TARGETS.WinLin THEN + AlignData(16) + ELSE + AlignData(2) END; + res := CHL.Length(codes.data); n := STRINGS.Utf8To16(s, codes.wstr); @@ -341,12 +354,12 @@ VAR BEGIN IF codes.wcharoffs[c] = -1 THEN - res := CHL.Length(codes.data); - - IF ODD(res) THEN - PutByte(0); - INC(res) + IF TARGETS.WinLin THEN + AlignData(16) + ELSE + AlignData(2) END; + res := CHL.Length(codes.data); IF TARGETS.LittleEndian THEN PutByte(c MOD 256); diff --git a/programs/develop/oberon07/source/MSP430.ob07 b/programs/develop/oberon07/source/MSP430.ob07 index abba309e77..acec51fe49 100644 --- a/programs/develop/oberon07/source/MSP430.ob07 +++ b/programs/develop/oberon07/source/MSP430.ob07 @@ -1,7 +1,7 @@ (* BSD 2-Clause License - Copyright (c) 2019-2021, Anton Krotov + Copyright (c) 2019-2022, Anton Krotov All rights reserved. *) @@ -984,11 +984,6 @@ BEGIN drop; Op2(opMOV + bw(param2 = 1), src_x(param1, SR), dst_x(0, reg2)) - |IL.opCHKBYTE: - BinOp(reg1, reg2); - Op2(opCMP, imm(256), reg1); - jcc(jb, param1) - |IL.opCHKIDX: UnOp(reg1); Op2(opCMP, imm(param2), reg1); @@ -1412,10 +1407,6 @@ BEGIN Test(ACC); jcc(jne, param1) - |IL.opCHR: - UnOp(reg1); - Op2(opAND, imm(255), reg1) - |IL.opABS: UnOp(reg1); Test(reg1); diff --git a/programs/develop/oberon07/source/PROG.ob07 b/programs/develop/oberon07/source/PROG.ob07 index 5147c1a783..c1bfd45775 100644 --- a/programs/develop/oberon07/source/PROG.ob07 +++ b/programs/develop/oberon07/source/PROG.ob07 @@ -1,7 +1,7 @@ (* BSD 2-Clause License - Copyright (c) 2018-2022, Anton Krotov + Copyright (c) 2018-2023, Anton Krotov All rights reserved. *) @@ -41,6 +41,7 @@ CONST sysPUT8* = 35; sysPUT16* = 36; stCOPY* = 37; stWCHR* = 38; sysWSADR* = 39; sysPUT32* = 40; (*sysNOP* = 41; sysEINT* = 42; sysDINT* = 43;*)sysGET8* = 44; sysGET16* = 45; sysGET32* = 46; + sysVAL* = 47; default32* = 2; _default32* = default32 + 1; stdcall* = 4; _stdcall* = stdcall + 1; @@ -239,13 +240,18 @@ END NewIdent; PROCEDURE getOffset* (varIdent: IDENT): INTEGER; VAR - size: INTEGER; + size, glob_align: INTEGER; BEGIN IF varIdent.offset = -1 THEN size := varIdent._type.size; IF varIdent.global THEN - IF UTILS.Align(program.bss, varIdent._type.align) THEN + IF TARGETS.WinLin THEN + glob_align := 16 + ELSE + glob_align := varIdent._type.align + END; + IF UTILS.Align(program.bss, glob_align) THEN IF UTILS.maxint - program.bss >= size THEN varIdent.offset := program.bss; INC(program.bss, size) @@ -1109,6 +1115,7 @@ BEGIN EnterProc(unit, "put8", idSYSPROC, sysPUT8); EnterProc(unit, "code", idSYSPROC, sysCODE); EnterProc(unit, "move", idSYSPROC, sysMOVE); + EnterProc(unit, "val", idSYSPROC, sysVAL); (* IF program.target.sys = mConst.Target_iMSP430 THEN EnterProc(unit, "nop", idSYSPROC, sysNOP); @@ -1256,7 +1263,11 @@ BEGIN IF TARGETS.RealSize # 0 THEN program.stTypes.tREAL := enterType(tREAL, TARGETS.RealSize, 0, NIL); - program.stTypes.tREAL.align := TARGETS.RealSize + IF TARGETS.OS = TARGETS.osLINUX32 THEN + program.stTypes.tREAL.align := 4 + ELSE + program.stTypes.tREAL.align := TARGETS.RealSize + END END; program.stTypes.tSTRING := enterType(tSTRING, TARGETS.WordSize, 0, NIL); diff --git a/programs/develop/oberon07/source/RVMxI.ob07 b/programs/develop/oberon07/source/RVMxI.ob07 index e2d0139910..53bb5a86bb 100644 --- a/programs/develop/oberon07/source/RVMxI.ob07 +++ b/programs/develop/oberon07/source/RVMxI.ob07 @@ -1,7 +1,7 @@ (* BSD 2-Clause License - Copyright (c) 2020-2021, Anton Krotov + Copyright (c) 2020-2022, Anton Krotov All rights reserved. *) @@ -790,14 +790,6 @@ BEGIN UnOp(r1); Emit(opLSRC, r1, param2 MOD (szWord * 8)) - |IL.opCHR: - UnOp(r1); - Emit(opANDC, r1, 255) - - |IL.opWCHR: - UnOp(r1); - Emit(opANDC, r1, 65535) - |IL.opABS: UnOp(r1); Emit(opCMPC, r1, 0); @@ -958,11 +950,6 @@ BEGIN END; drop - |IL.opCHKBYTE: - BinOp(r1, r2); - Emit(opCMPC, r1, 256); - Emit(opJBT, param1, 0) - |IL.opCHKIDX: UnOp(r1); Emit(opCMPC, r1, param2); diff --git a/programs/develop/oberon07/source/STATEMENTS.ob07 b/programs/develop/oberon07/source/STATEMENTS.ob07 index d3d940e281..de418d581e 100644 --- a/programs/develop/oberon07/source/STATEMENTS.ob07 +++ b/programs/develop/oberon07/source/STATEMENTS.ob07 @@ -402,12 +402,6 @@ BEGIN IL.AddCmd(IL.opSAVE8C, ARITH.Int(e.value)) END ELSE - IF chkBYTE IN Options.checking THEN - label := IL.NewLabel(); - IL.AddCmd2(IL.opCHKBYTE, label, 0); - IL.OnError(line, errBYTE); - IL.SetLabel(label) - END; IL.AddCmd0(IL.opSAVE8) END END @@ -1062,7 +1056,7 @@ BEGIN IF chkCHR IN Options.checking THEN CheckRange(256, pos.line, errCHR) ELSE - IL.AddCmd0(IL.opCHR) + IL.AddCmd(IL.opMODR, 256) END END @@ -1077,7 +1071,7 @@ BEGIN IF chkWCHR IN Options.checking THEN CheckRange(65536, pos.line, errWCHR) ELSE - IL.AddCmd0(IL.opWCHR) + IL.AddCmd(IL.opMODR, 65536) END END @@ -1392,6 +1386,8 @@ VAR field: PROG.FIELD; pos: PARS.POSITION; t, idx: PARS.EXPR; + sysVal: BOOLEAN; + n: INTEGER; PROCEDURE LoadAdr (e: PARS.EXPR); @@ -1444,7 +1440,6 @@ VAR _type: PROG._TYPE; BEGIN - IF chkIDX IN Options.checking THEN label := IL.NewLabel(); IL.AddCmd2(IL.opCHKIDX2, label, 0); @@ -1477,12 +1472,35 @@ VAR BEGIN qualident(parser, e); + sysVal := (e.obj = eSYSPROC) & (e.stproc = PROG.sysVAL); + IF sysVal THEN + PARS.checklex(parser, SCAN.lxLROUND); + PARS.Next(parser); + getpos(parser, pos); + designator(parser, e); + PARS.check(isVar(e), pos, 93); + IF PROG.isOpenArray(e._type) THEN + n := PROG.Dim(e._type); + WHILE n > 0 DO + IL.drop; + DEC(n) + END + END; + PARS.checklex(parser, SCAN.lxCOMMA); + PARS.Next(parser); + getpos(parser, pos); + qualident(parser, t); + PARS.check(t.obj = eTYPE, pos, 79); + e._type := t._type; + PARS.checklex(parser, SCAN.lxRROUND); + PARS.Next(parser) + END; IF e.obj IN {ePROC, eIMP} THEN PROG.UseProc(parser.unit, e.ident.proc) END; - IF isVar(e) THEN + IF isVar(e) & ~sysVal THEN LoadAdr(e) END; @@ -2599,6 +2617,9 @@ BEGIN NextPos(parser, pos); expression(parser, e1); + IF (e._type.typ = PROG.tBYTE) & (e1.obj # eCONST) & (e1._type.typ = PROG.tINTEGER) & (chkBYTE IN Options.checking) THEN + CheckRange(256, pos.line, errBYTE) + END; IL.setlast(endcall.prev(IL.COMMAND)); diff --git a/programs/develop/oberon07/source/TARGETS.ob07 b/programs/develop/oberon07/source/TARGETS.ob07 index a9006e944d..d33aed7ca3 100644 --- a/programs/develop/oberon07/source/TARGETS.ob07 +++ b/programs/develop/oberon07/source/TARGETS.ob07 @@ -1,7 +1,7 @@ (* BSD 2-Clause License - Copyright (c) 2019-2021, Anton Krotov + Copyright (c) 2019-2021, 2023, Anton Krotov All rights reserved. *) @@ -67,7 +67,7 @@ VAR target*, CPU*, BitDepth*, OS*, RealSize*, WordSize*, AdrSize*, InstrSize*: INTEGER; ComLinePar*, LibDir*, FileExt*: STRING; - Import*, Dispose*, RTL*, Dll*, LittleEndian*: BOOLEAN; + Import*, Dispose*, RTL*, Dll*, LittleEndian*, WinLin*: BOOLEAN; PROCEDURE Enter (idx, CPU, RealSize, OS: INTEGER; ComLinePar, LibDir, FileExt: STRING); @@ -110,6 +110,7 @@ BEGIN Dispose := ~(target IN noDISPOSE); RTL := ~(target IN noRTL); Dll := target IN {Linux32SO, Linux64SO, Win32DLL, Win64DLL, KolibriOSDLL}; + WinLin := OS IN {osWIN32, osLINUX32, osWIN64, osLINUX64}; WordSize := BitDepth DIV 8; AdrSize := WordSize END diff --git a/programs/develop/oberon07/source/THUMB.ob07 b/programs/develop/oberon07/source/THUMB.ob07 index 90bbf086de..55c230dcf3 100644 --- a/programs/develop/oberon07/source/THUMB.ob07 +++ b/programs/develop/oberon07/source/THUMB.ob07 @@ -1,7 +1,7 @@ (* BSD 2-Clause License - Copyright (c) 2019-2021, Anton Krotov + Copyright (c) 2019-2022, Anton Krotov All rights reserved. *) @@ -91,6 +91,10 @@ TYPE RELOCCODE = ARRAY 7 OF INTEGER; + MEM = RECORD + start, size, startReserve, endReserve: INTEGER + END; + VAR @@ -105,11 +109,9 @@ VAR StkCount: INTEGER; Target: RECORD - FlashAdr, - SRAMAdr, + flash, sram: MEM; IVTLen, - MinStack, - Reserved: INTEGER; + MinStkSize: INTEGER; InstrSet: SET; isNXP: BOOLEAN END; @@ -1151,14 +1153,13 @@ BEGIN PushAll(0) |IL.opPARAM: - n := param2; - IF n = 1 THEN + IF param2 = 1 THEN UnOp(r1); push(r1); drop ELSE - ASSERT(R.top + 1 <= n); - PushAll(n) + ASSERT(R.top + 1 <= param2); + PushAll(param2) END |IL.opCLEANUP: @@ -1587,14 +1588,6 @@ BEGIN Tst(r1); SetCC(jne, r1) - |IL.opCHR: - UnOp(r1); - Code(0B2C0H + r1 * 9) (* uxtb r1, r1 *) - - |IL.opWCHR: - UnOp(r1); - Code(0B280H + r1 * 9) (* uxth r1, r1 *) - |IL.opASR, IL.opROR, IL.opLSL, IL.opLSR: BinOp(r1, r2); Shift(opcode, r1, r2); @@ -1620,11 +1613,6 @@ BEGIN END END - |IL.opCHKBYTE: - BinOp(r1, r2); - CmpConst(r1, 256); - jcc(jb, param1) - |IL.opCHKIDX: UnOp(r1); CmpConst(r1, param2); @@ -2344,33 +2332,36 @@ BEGIN END epilog; -PROCEDURE SetTarget (FlashStart, SRAMStart: INTEGER; InstrSet: SET; isNXP: BOOLEAN); +PROCEDURE SetTarget (FlashStart, FlashSize, FlashReserve, SRAMStart, SRAMSize, SRAMReserve: INTEGER; InstrSet: SET; isNXP: BOOLEAN); BEGIN - Target.FlashAdr := FlashStart; - Target.SRAMAdr := SRAMStart; + Target.flash.start := FlashStart; + Target.flash.size := FlashSize; + (*Target.flash.startReserve := 0;*) + Target.flash.endReserve := FlashReserve; + + Target.sram.start := SRAMStart; + Target.sram.size := SRAMSize; + Target.sram.startReserve := 0; + Target.sram.endReserve := SRAMReserve; + Target.InstrSet := InstrSet; Target.isNXP := isNXP; - Target.IVTLen := 256; (* >= 192 *) - Target.Reserved := 0; - Target.MinStack := 512; + Target.IVTLen := 256; (* >= 192 *) + Target.MinStkSize := 256; END SetTarget; PROCEDURE CodeGen* (outname: ARRAY OF CHAR; target: INTEGER; options: PROG.OPTIONS); VAR opt: PROG.OPTIONS; - - ram, rom, i, j: INTEGER; - - DataAdr, BssAdr, DataSize, BssSize, CodeSize: INTEGER; + i, j, DataAdr, BssAdr, DataSize, BssSize, CodeSize: INTEGER; BEGIN - ram := MIN(MAX(options.ram, minRAM), maxRAM) * 1024; - rom := MIN(MAX(options.rom, minROM), maxROM) * 1024; - IF target = TARGETS.STM32CM3 THEN - SetTarget(08000000H, 20000000H, CortexM3, FALSE) + SetTarget(08000000H, MIN(MAX(options.rom, minROM), maxROM) * 1024, 0, + 20000000H, MIN(MAX(options.ram, minRAM), maxRAM) * 1024, 0, + CortexM3, FALSE) END; tcount := CHL.Length(IL.codes.types); @@ -2384,33 +2375,33 @@ BEGIN StkCount := 0; - DataAdr := Target.SRAMAdr + Target.Reserved; - DataSize := CHL.Length(IL.codes.data) + tcount * 4 + Target.Reserved; + DataAdr := Target.sram.start + Target.sram.startReserve; + DataSize := CHL.Length(IL.codes.data) + tcount * 4 + Target.sram.startReserve; WHILE DataSize MOD 4 # 0 DO CHL.PushByte(IL.codes.data, 0); INC(DataSize) END; - BssAdr := DataAdr + DataSize - Target.Reserved; + BssAdr := DataAdr + DataSize - Target.sram.startReserve; IL.set_bss(MAX(IL.codes.bss, MAX(IL.codes.dmin - CHL.Length(IL.codes.data), 4))); BssSize := IL.codes.bss; ASSERT(UTILS.Align(BssSize, 4)); - prolog(BssSize, tcount, ORD(opt.pic), Target.SRAMAdr + ram, Target.IVTLen); + prolog(BssSize, tcount, ORD(opt.pic), Target.sram.start + Target.sram.size - Target.sram.endReserve, Target.IVTLen); translate(ORD(opt.pic), tcount * 4); epilog; - fixup(Target.FlashAdr, DataAdr, BssAdr); + fixup(Target.flash.start, DataAdr, BssAdr); INC(DataSize, BssSize); CodeSize := CHL.Length(program.code); - IF CodeSize > rom THEN + IF CodeSize > Target.flash.size - Target.flash.endReserve THEN ERRORS.Error(203) END; - IF DataSize > ram - Target.MinStack THEN + IF DataSize > Target.sram.size - Target.MinStkSize - Target.sram.endReserve THEN ERRORS.Error(204) END; @@ -2426,15 +2417,17 @@ BEGIN WR.Create(outname); - HEX.Data2(program.code, 0, CodeSize, high(Target.FlashAdr)); + HEX.Data2(program.code, 0, CodeSize, high(Target.flash.start)); HEX.End; WR.Close; C.Dashes; - C.String( " rom: "); C.Int(CodeSize); C.String(" of "); C.Int(rom); C.String(" ("); C.Int(CodeSize * 100 DIV rom); C.StringLn("%)"); + C.String( " rom: "); C.Int(CodeSize); C.String(" of "); C.Int(Target.flash.size - Target.flash.endReserve); + C.String(" ("); C.Int(CodeSize * 100 DIV (Target.flash.size - Target.flash.endReserve)); C.StringLn("%)"); C.Ln; - C.String( " ram: "); C.Int(DataSize); C.String(" of "); C.Int(ram); C.String(" ("); C.Int(DataSize * 100 DIV ram); C.StringLn("%)") + C.String( " ram: "); C.Int(DataSize); C.String(" of "); C.Int(Target.sram.size - Target.sram.endReserve); + C.String(" ("); C.Int(DataSize * 100 DIV (Target.sram.size - Target.sram.endReserve)); C.StringLn("%)") END CodeGen; diff --git a/programs/develop/oberon07/source/UTILS.ob07 b/programs/develop/oberon07/source/UTILS.ob07 index 20b75a396a..f12a8addc9 100644 --- a/programs/develop/oberon07/source/UTILS.ob07 +++ b/programs/develop/oberon07/source/UTILS.ob07 @@ -1,7 +1,7 @@ (* BSD 2-Clause License - Copyright (c) 2018-2022, Anton Krotov + Copyright (c) 2018-2023, Anton Krotov All rights reserved. *) @@ -23,8 +23,8 @@ CONST max32* = 2147483647; vMajor* = 1; - vMinor* = 57; - Date* = "31-aug-2022"; + vMinor* = 63; + Date* = "21-jan-2023"; FILE_EXT* = ".ob07"; RTL_NAME* = "RTL"; diff --git a/programs/develop/oberon07/source/X86.ob07 b/programs/develop/oberon07/source/X86.ob07 index 5a28ba5918..45a40589af 100644 --- a/programs/develop/oberon07/source/X86.ob07 +++ b/programs/develop/oberon07/source/X86.ob07 @@ -1,7 +1,7 @@ (* BSD 2-Clause License - Copyright (c) 2018-2022, Anton Krotov + Copyright (c) 2018-2023, Anton Krotov All rights reserved. *) @@ -954,14 +954,13 @@ BEGIN jmp(param1) |IL.opPARAM: - n := param2; - IF n = 1 THEN + IF param2 = 1 THEN UnOp(reg1); push(reg1); drop ELSE - ASSERT(R.top + 1 <= n); - PushAll(n) + ASSERT(R.top + 1 <= param2); + PushAll(param2) END |IL.opCLEANUP: @@ -1438,11 +1437,6 @@ BEGIN pushc(param1); CallRTL(pic, IL._move) - |IL.opCHKBYTE: - BinOp(reg1, reg2); - cmprc(reg1, 256); - jcc(jb, param1) - |IL.opCHKIDX: UnOp(reg1); cmprc(reg1, param2); @@ -1557,14 +1551,6 @@ BEGIN CallRTL(pic, IL._lengthw); GetRegA - |IL.opCHR: - UnOp(reg1); - andrc(reg1, 255) - - |IL.opWCHR: - UnOp(reg1); - andrc(reg1, 65535) - |IL.opASR, IL.opROR, IL.opLSL, IL.opLSR: UnOp(reg1); IF reg1 # ecx THEN @@ -1828,8 +1814,17 @@ BEGIN |IL.opNEW: PushAll(1); - n := param2 + 8; - ASSERT(UTILS.Align(n, 32)); + CASE TARGETS.OS OF + |TARGETS.osWIN32: + n := param2 + 4; + ASSERT(UTILS.Align(n, 4)) + |TARGETS.osLINUX32: + n := param2 + 16; + ASSERT(UTILS.Align(n, 16)) + |TARGETS.osKOS: + n := param2 + 8; + ASSERT(UTILS.Align(n, 32)) + END; pushc(n); pushc(param1); CallRTL(pic, IL._new) @@ -2444,6 +2439,19 @@ BEGIN END epilog; +PROCEDURE align16* (bit64: BOOLEAN); +BEGIN + IF TARGETS.WinLin THEN + WHILE CHL.Length(IL.codes.data) MOD 16 # 0 DO + CHL.PushByte(IL.codes.data, 0) + END; + WHILE CHL.Length(IL.codes.types) MOD (4 - 2*ORD(bit64)) # 0 DO + CHL.PushInt(IL.codes.types, 0) + END + END +END align16; + + PROCEDURE CodeGen* (outname: ARRAY OF CHAR; target: INTEGER; options: PROG.OPTIONS); VAR dllret, dllinit, sofinit: INTEGER; @@ -2451,6 +2459,7 @@ VAR BEGIN FR[0] := 0; + align16(FALSE); tcount := CHL.Length(IL.codes.types); opt := options; @@ -2476,7 +2485,6 @@ BEGIN epilog(opt.pic, outname, target, opt.stack, opt.version, dllinit, dllret, sofinit); BIN.fixup(program); - IF TARGETS.OS = TARGETS.osWIN32 THEN PE32.write(program, outname, target = TARGETS.Win32C, target = TARGETS.Win32DLL, FALSE) ELSIF target = TARGETS.KolibriOS THEN @@ -2486,7 +2494,6 @@ BEGIN ELSIF TARGETS.OS = TARGETS.osLINUX32 THEN ELF.write(program, outname, sofinit, target = TARGETS.Linux32SO, FALSE) END - END CodeGen;