From c8a23ec3c65daba797f7a72e519f571a95c45faa Mon Sep 17 00:00:00 2001 From: Fernando Cacciola Date: Fri, 14 Nov 2008 19:19:40 +0000 Subject: [PATCH] Replaced the partial, outdated and manually created vcprojs with a batch script to create the mangled binaries using any existing port --- .gitattributes | 3 +- Maintenance/Third_party/GMP/README.txt | 87 ++++++++++++-- .../GMP/create_mangled_versions.bat | 113 ++++++++++++++++++ .../Third_party/GMP/mangled_gmp_VC.zip | Bin 10986 -> 0 bytes .../Third_party/GMP/mangled_mpfr_VC.zip | Bin 5084 -> 0 bytes 5 files changed, 191 insertions(+), 12 deletions(-) create mode 100644 Maintenance/Third_party/GMP/create_mangled_versions.bat delete mode 100644 Maintenance/Third_party/GMP/mangled_gmp_VC.zip delete mode 100644 Maintenance/Third_party/GMP/mangled_mpfr_VC.zip diff --git a/.gitattributes b/.gitattributes index e1713e650ce..1ecdf717736 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1933,8 +1933,7 @@ Maintenance/MacOSX_Installer/Resources/Welcome.rtf -text svneol=unset#applicatio Maintenance/MacOSX_Installer/Resources/cgal_very_small.gif -text svneol=unset#image/gif Maintenance/MacOSX_Installer/Resources/postflight -text Maintenance/MacOSX_Installer/Resources/postupgrade -text -Maintenance/Third_party/GMP/mangled_gmp_VC.zip -text svneol=unset#application/zip -Maintenance/Third_party/GMP/mangled_mpfr_VC.zip -text svneol=unset#application/zip +Maintenance/Third_party/GMP/create_mangled_versions.bat eol=crlf Maintenance/deb/etch/debian/README.Debian -text Maintenance/deb/etch/debian/changelog -text Maintenance/deb/etch/debian/compat -text diff --git a/Maintenance/Third_party/GMP/README.txt b/Maintenance/Third_party/GMP/README.txt index d31a7bd1dbe..433f65840fe 100644 --- a/Maintenance/Third_party/GMP/README.txt +++ b/Maintenance/Third_party/GMP/README.txt @@ -1,19 +1,86 @@ -This directory contains the visual studio project files used to generate the precompiled binaries for gmp and mpfr. +This README contains instructions to create compiled binaries for gmp and mpfr for Visual Studio +with the names expected by the auto-linking feature of CGAL (as those provided with the +Windows Installer) -To install it: +STEP 1. -1.Download gmp-4.2.2 and mpfr-2.3.1 from + Download the Brian Gladman's ports for gmp and mpfr for Visual Studio from: -2.Download the Gladman's ports to Visual Studio from + http://fp.gladman.plus.com/computing/gmp4win.htm -http://fp.gladman.plus.com/computing/gmp4win.htm + You would choose a version of gmp and mpfr according to the ports available. + +STEP 2. -and follow the instructions to properly unzip the archive, but do not build any libraries. + Download the correspoding versions of gmp and mpfr depending on the Gladman's port downloaded + +SETP 3. -3.Unzip "mangled_gmp_VC.zip" at the root directory of your gmp-4.2.2 installation. -4.Unzip "mangled_mpfr_VC.zip" at the rot directory of your mpfr-2.3.1 installation. + Follow the instructions supplied by Gladman's port and build one of the static versions + of the gmp and mpfr libs. + + Typically, in this step you would + + untar the gmp, mpfr and ports archives under a common root folder + launch gmp.sln + build the preliminary "gen_*" targets + build one of the static library targets, such as "gmp_lib_gc" + launch mpfr.sln + renamed "mparam_h.in" to "mparam.h" + build the target lib_mpfr. + + but the details may vary depending on the port downloaded. Make sure to follow + the port instructions and build ONE static version of gmp and mpfr. You can choose + the generic version (_gc) or one of the optimized (_pN) version but make sure to build only one. + + You would end up with a structure similar to the following: + + + gmp-4.2.4 + build.vc9 + lib_gmp_gc + Win32 + Debug + gmp.lib + gmp.pdb + Release + gmp.lib + gmp.pdb + mpfr-2.3.2 + buid.vc9 + lib_mpfr + Win32 + Debug + mpfr.lib + mpfr.pdb + Release + mpfr.lib + mpfr.pdb -5.To build the gmp libraries open /build.vc<8|9>/lib_gmp_gc/mangled_lib_gmp_gc.vcproj in Visual Studio and build it. -6.TO build the mpfr libs, *after* having built gmp, use /build.vc<8|9>/lib_mpfr/mangled_lib_mpfr.vcproj +SETP 4 + copy the batch script "create_mangled_versions.bat" into the base directory + containing gmp and mpfr. + + Run it passing the directory containing gmp then mpfr. For example: + + C:\>create_mangled_versions gmp-4.2.4 + C:\>create_mangled_versions mpfr-2.3.2 + + This script scans the given directory in search for gmp and mpfr binaries. + Each time one is found, it creates a copy of it using a "mangled" named that + conforms to the autolinking requirements. It constructs the mangled based based + on the relative downpath to the library found. For example, if it finds + + build.vc9\lib_gmp_gc\Win32\Debug\gmp.lib + + it creates a copy, in the same directory, named: + + gmp_vc90_mt_gd.lib + + All mangled binaries are also copied to a folder named "mangled_binaries" that + the script creates in the directory where it is run. + + + \ No newline at end of file diff --git a/Maintenance/Third_party/GMP/create_mangled_versions.bat b/Maintenance/Third_party/GMP/create_mangled_versions.bat new file mode 100644 index 00000000000..3b505c01e45 --- /dev/null +++ b/Maintenance/Third_party/GMP/create_mangled_versions.bat @@ -0,0 +1,113 @@ +@echo OFF + +set ROOT=%~dp0 + +if "%1"=="" goto :ERROR + +set BASEDIR=%1% + +cd %BASEDIR% + +if EXIST gmp.h ( + set GMP_OR_MPFR=gmp +) else ( + if EXIST mpfr.h set GMP_OR_MPFR=mpfr +) + +if NOT DEFINED GMP_OR_MPFR goto :ERROR + +if NOT EXIST mangled_binaries mkdir mangled_binaries + +if EXIST build.vc8 call :PROCESS_BUILD_FOLDER vc8 +if EXIST build.vc9 call :PROCESS_BUILD_FOLDER vc9 + +cd .. + +goto :EOF + +:PROCESS_BUILD_FOLDER +: %1 <- vc(8|9) + +cd build.%1 + +for /D %%i in (lib_%GMP_OR_MPFR%*) do ( + + call :PROCESS_LIB_FOLDER %%i %1 +) + +cd .. + +goto :EOF + +:PROCESS_LIB_FOLDER +: %1 <- lib_gmp|mpfr_* folder name +: %2 <- vc(8|9) + +cd %1 +if EXIST Win32 call :PROCESS_PALTFORM_FOLDER Win32 %2 +if EXIST x64 call :PROCESS_PALTFORM_FOLDER x64 %2 +cd .. + +goto :EOF + +:PROCESS_PALTFORM_FOLDER +: %1 <- (Win32|x64) +: %2 <- vc(8|9) + +cd %1 +if EXIST Debug call :PROCESS_VARIANT_FOLDER Debug %2 -gd +if EXIST Release call :PROCESS_VARIANT_FOLDER Release %2 +cd .. + +goto :EOF + +:PROCESS_VARIANT_FOLDER +: %1 <- (Debug|Release) +: %2 <- vc(8|9) +: %3 <- (-gd|) + +cd %1 +if EXIST %GMP_OR_MPFR%.lib call :COPY_MANGLED %2 lib %3 +if EXIST %GMP_OR_MPFR%.pdb call :COPY_MANGLED %2 pdb %3 +cd .. + +goto :EOF + + +:COPY_MANGLED +: %1 <- vc(8|9) +: %2 <- lib|pdb +: %3 <- (-gd|) + +set TOOLSET=%1% +set EXT=%2% +set VARIANT=%3% + +set MANGLED=%GMP_OR_MPFR%-%TOOLSET%-mt%VARIANT%.%EXT% + +echo Copying %GMP_OR_MPFR%.%EXT% as %MANGLED% in %cd% and %ROOT%\mangled_binaries + +copy /Y %GMP_OR_MPFR%.%EXT% %MANGLED% + +copy /-Y %MANGLED% %ROOT%\mangled_binaries + +goto :EOF + +:ERROR + +echo Usage: +echo. +echo create_mangled_versions folder_with_gmp_or_mpfr +echo. +echo This batch script scans the given directory searching for gmp or mpfr libs +echo copying each such lib with a special mangled name based on +echo the subdirectory path where the .lib was found. +echo. +echo For example, if it finds the file +echo. +echo gmp_4.2.4/build.vc9/lib_gmp_gc/Win32/Debug/gmp.lib +echo. +echo it creates a copy of it named +echo. +echo gmp_vc90_mt_gd.lib +echo. diff --git a/Maintenance/Third_party/GMP/mangled_gmp_VC.zip b/Maintenance/Third_party/GMP/mangled_gmp_VC.zip deleted file mode 100644 index 931320141bea4235053b0ad7ea69888b861a7c20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10986 zcmeI&c{J4D|2S~#80(BBTbj&R6S7X!WE(^%lr{S@_PrP)`x;rY57|mcR3k)Wrx;{O z_8CHokUhokHTt}N@6YFVKJV{2zdwKH{5VH|&fUe%+R4M)+R6TS3J1^$ra12iSIk$v zq`SgSK@rGKLm~N3Q#@=vo!lKAtpAPzEbi^=<+_sZ;Wb&y*=_CB(i}-Tp>gNp#s2mo zmiY66{%O3uL;TC_Ry0uO4f)--eJ4wC|-xV*#1=zz-_L*!zd5x#SD! z&bN>13_4uVDG3ZSRbI%O+q~Y^H0h9u?Q7|DbH?(>y1O$KM?2pjvumM`#NaE2B9teV z41b*r{@uPid*bF=w{*?7zzp-H(WecHTO0k`xB~NMHN-^qQnr#1FKFjXOZBzYYf4)U zt3N~iS?&kiZ+y0@>EySY)zv@HNS9>oPbm0^BYgkxokaRZ=>K+9is4fGGLoMVf7G(H zCe?gGrib@MQ^rHMM98(z6k9Lkj2FKw#WxUE2_L^btLdsfQ0* z4e6UXeW$9F@Aw3K9hqAg#dG;JzigYT>6Y&SQ(cj(T(GG^y`8w&nd*j!_nNYf@El_- zH|zajn*B`sfs%i}5T9^5?PWCa!lk^i^M@sI>%?^5>jaU+(OkmQ6q)s4*5u(+%GU?E ze|qIoD@$aj%U2g1DY)L=9ePW52a4xgw@@%*Vs6-s)Ohr{sCb~+@pR*1tgjrNge3WLqZAyW4-QsQ0IPFKRU* z02ZMJORB`H|J2W}8p-+iLRwYcAy`r~X<>Vl5lvrUEE#i+eM_8(IhV9E+T<-eVZC_3 zZ}c)DPPtK7x4<@|BKE!YtFIen0&^L5!s%8@ABUcIMOU@PiRIsS7N#&6{xVWbv?Z>kBjN&OQ1DDU(mH^mx!$fdJpo!$8cnn$@+3?;GcAy&y*8e>c^yuWn~m3E5`vcq*sf zNXAD!vxLxJUl)DNBa9gp!enRI8poLNU>rBi#(yI+GAvcVZ1thLzgA}sKO0!omaF!E z_T85#$~4M(m+V_Iw@97nd?CuOxO#GXzbYeF*8^!-vaq93P-xKiam%KU%ZwAp`#FNs z8Z-afq%K>O*6{rA+c#Gj+g0fAq@>+rTNKDIZA&T~_!ywJpCZLuxyB!%)#F2d@abE3 zWqQ*)F`@z$^&|dr52}`d65)tzAR-_mi^S5 zbvIlfCB86()SIU{+@Hs-De)^75)_7%+)OnLg_TgI6k;=lHKeiZtOY zwo88rYGOJN5p<8cu|z@nhrARGWgD>+6V*z^WTlo$cV1oqVzf!5c7(I5A=o@!H3h{k zM^LKr@r@=b+_;bC5MTnHaf`PQN$wK{gt$m%K92sW<}H9>pD3x8hJh!DN@#fX@sk_O>giHZt$GA-BrW&4 z36#Z66X6aGUru|Pn;KgYNDM3B^u8h6rZ3NgXnmps^zv7L5S(?{5{ggB<)qWb@*^x} zzXI78`|^j;$}zEmfjvQusKdYQ=Zz*xnTAnjZ33nDc^*N1H~gIoK`WYBY@JaTs1?6B zB}v=&o_>8fPtkKq+Cyc(`>vXN?!+)hwNKju1!}XQ1ievIAZMBvdo!Y7 z4A{z$zC5$JFkjXWMIfm%-q@%h%2Nmk5ELf99`?Y+38;R?W=g0&MLaN=ZG$$4Zd zcr~QW!g6Ix%Vgz@i>8>^lL$(m%~-bNTjdYaFdap{e2DYbvzLaVgRbNrbKwsS+=U_$+ z@i13xn5X}Hxu==A+xipKx1}!*7n-|rqFtCs4Y&Ke2#&l)Is{))0x9a!iu`byxoal+ z1Ph!#Vq83qmwyQPuSS_urX#Ph4k1F68ByAUiV+xoWbSH=4rJy!2bsdCrqhw;sB6ra z9!u-a+j3b=H_&)+s{253Za#w;>GZCYHf^Rpazn~X$%*znW3e3g>-h><=8DG{=^HJ? zS|L|FUxl~#B-<-9sJsf_LW_GQnwjPMTsxAn7zDP?DMfxON}wyKHN?>xP)9j|^>N$! z?bMq(Z*nw&9r7jk72Z`AJD#GjoD@Em*|LA5hu{4@i0LGD=qvlDx}-_SKc#)*$j4&;M#A>TTNzipE7o;R0=sn0 zgOiC(_sFlB8?))e>6bN^+!EI}z~jVgrb8&mq1{z`NwfIWEGK5%5N}gx^Tv$4&=rgb z4+igmbwHX}mJxhgeH6RyUJkL98J4^0YRq)C&&3fZ+$45=aMNQ|BZGzI>^qn)CJfCcV71C>A?UueI~q_w1V`~_8C}Hd^nO3M2E=@ zxf0{?k#VT^a58W@XjBDfgucNJ!?a4_Xxpi&f4{$7stp9-EavpGD`>R~k$P~WgW*t`p}@Nv1xPI3x6JnqgDOraQoxVC*Qcq$fPJDe z`=_1c=0f=1J*#A-6ThtU<1SrdI_= zOHDifAsZ<4dPm0?nFEL{JlORrj^)I`TJn=<-1pRo$>Bi_ZZ2LQAWJkIjwU_ z7BR?g(Mz4^qaH#6DL&o{ErIY?-*&Y{K8-Hxe3m`3 zXuUGs>pH2z9Yeb9Rgy&vIUl_vMx`bqLY*eAX*mD$>q(1i=u=R0)1xCjY!*xQo3vk2 zLtmn}w9n-=ad>pyE9QFmTV#rfM^VO){qBjWsp^SDZdqx+lhvmU$K8JBOg+`AQJQGD zyRgh%VJG>tO0R5a*Tk5Z`*dsj;C6j8TU}LUO|7xv&DeV+WvpK{z znN=qCcH_R&rXtt((>r|)UMDrGPzKXwp0OJne!nDDMLy-zHXLJ9=!IgyLa`i z$HTJMsEkoTMMb}Hr#b#7i_;=bu&INdcR8^fBD#~(a?IRvxK?6Vktr2S4!2?R-PXn% z>H&&WjJck7W0tpJxa)m65A-TOgMYR<4sLrD(e)#MHKuUiraZsa zgWAKYM7hc$Dm6yN&X#TzjwjNchOEfFL!#SaqZak#FM3qw=I)!?0C~bZ{U=2z2QsCR4kHhm{3EmE{qKY;TRG-qdX)WUouN`n&=P(5E3j zbp}Whe&^UOcw)0*4j%UesCxzgn3i7^1~++ z>ABbwS&IqS^^F!Ne3FTti!Dsw0~Dngr+3I=Q4 zLfu6JHB}NW<&xZb-~ozeOo$E0m>GQ;GBt_BRD4uXrGmFwA#OHXsE$@M89HVT%|;ZbEGYU`RlS*Z`zSfPjLSbCCS60% z^pIc!wXwl@&12L>)z|r=fV4PZ**3l&UFe$FVDtBM2zMMSt0ZDW%yk$e)nUIkm3g6` zp6wwaB~I92qN_QhnGmKQX5&OTNlx6l-&OC6Dg~`FNvt=&i?nj=v z?9S;Am*U50m|X8`pwXmYD?di}i-g=ih#Ie2CnBv(K`nJi65DCahJ2 zl))4mg92c;>ipb-?l@_CHi5z>)!$!p>e&-drAapwiwVs+$S~LUnIY6n*JDf<1dBB#NS=%?UI@{YWN9(A& zo#MCqCKtBXj#vi|^Jk}jqP(YA{2>HIDr_Pq`6Z21WEai#p+yW<%nwZzy9yk9xNg%Z5bS881+tsO7*ESW7Xp+dwY5xx)bncGsOFpX2ZP6BWa_{;!73Z`^wQi0eU)q-5*L%9X@wQu*jbpFs*WR;LbJTG04)n@bHzz z=ocwD#tYoY2ovh|!O9jD&2@732_6f5p)$?bBC|n*ocPPtF)>AEMd69W(H<$evohHp z>f|T;U1FqJE<#_ZUDtLY?t;>#V5Io!Sxd;&&f@J|N3llR+{wu?u7Tvq`Cy*Xy0zXz zQ>y{Tec!ihM-+ckBkq47NyUF7$!Gt^xPK=}#dCjS;=hq3JFZ$`x+}WzzmepBO!>bg z$rJz2kffgd($aKf7tV6?$#ySh*Lin+eH*j19eN$l2*369YG+3%aWjB>mVw71>C?=W zft1W<5nqa*ro3nUwl>wL7k4nowX@RZ;3YQTMWU>1GzaX2EW&(6Nz z;iw6^k}adZ-?~42p9nuCnC2{oHNI8tzKF8?A`Zp73|`K?s? zy32yyo}B6cmFLcov-LFN`I6s`%@9MOr*V6Dx3(=FG!=B&$1Z*kZ)u@d{uVoPU=#k*{BJ7i3z?4 z_x)7TR`0~7st;#z&Dgb6=dY<&w+3crvvvFrm9!fvKG#%nKjGiYL=1nOZ2>$r&3E?DOy3~XM<(IntA!V5sZMmxu^9O zJ#VMG9;7Qc)$v8Ss-*LVBXTD6_PuyR{@cUWb)C&pOzF?*&b$`2RT^>;n*#rI4-rX+ z(3iCSWI@D5@ntB%;x6P*+_T)sx{FRKRz!YeAF+F1SmhJry~ zmSEvtMKHhkQkdA_0!k`WCu2uSYzaQ(xN4+L=XfVV%mtSI>fA7eo++AYoz0{O`|5Q^ zI7ks!c-cqcW=K$4XS*g=Z=WvF~iQyfrf|ai>UV{)A=IBb#X5)CTt2=Q=_5$e=(yFM<9SqKlJ4xO8T5K za6tsA6r*13E65G)01zk+y`Z2j{g+?DjwMpzQ;X^`PLeHa{V!w#e}Vp`RbGsm3OIiN zo@^t*x>*3(p>Fh}BL>VZ0rtD0M?J;Q2uKxY1qS}eJTSpGNei&E)aQ{j?7?BWKr`og zdsG7_n-|A@S547Ml~h0=D>3SAENs~qUq2=H(kxyD2v4*k#*Tt_tg+z_%Sq08o65@A zM#rZFzMwf>4s6NLHZs8!0R^J)yHkWKpZFKYCC%~xCPrmT4YpwVUV-^s}9yt>O%^et*ntd~~!5fnZ2;^^l0v>kz+j!r6oNFIzg=2{}Nm}mOU3TjWQXv^Ropv z0LDsF?8E#-~E6w=F=eXxiAI4+ZPM(E#-_oYW^C$u5;)I$A+2d+q#xT(%|SWYwRtoIOuI zo=-#);~e0`WY7D;rNRqjEqCK;JM*EnFEEbReK5?A4lqS%26gJzU+~<5izH|IKCoVB zFOZomwMN5*j%_|?3dnw2;iFZ?H3!)rOXrjQ91GGGFF#p2`R!TQLtOWp0&eaobzZ*X>l1mc zo;V`XH`;kM`Bo=jkdKOe#kis8Lq#{Vvc3XD39u^McXNAMz_RSgqy5m8X+6(LDGmx! z;}%WQw1*d4%OGU+`E${m33+l)>{xswTPwV|()WAE1Ku1r5`=#cT?jjdNX$0i-I5 zq5Fb)qKkJeH-kLBq|b%_LxJgC(5jo=zdl-&8oU}2j~(K>`l;PYHVIHd#Tz7O8h*txgjuv-vV{_5Z*c;D(C9?2t$%Q{QO3UPVvl!W1#6VXkVL&#= z4g;1xjN%B9D5>O*=XVWT&v0?Y!z!@rE@zL)5*tJD$_yfpl6u>LbGacQ-&>?W_jNb& zPexM)?bdup`G?zkYg<@`GvYqj70pH9Ph(k9W-k70gWuYv6P6F>IcD!3rL0-+>>e7; z1pZFWY>%|cCexd3RlHNKqYfbm9+Xpy&*FB)JH$DBe6}lw_Q+(qudCcODR*ZU;sFRD z)3!ZVjxa!q=HBLAB&n`RHsPbQCCH~SPlRV80uDzot^BQ9%DV}+$WV-Qz?nmEV$ZKU zpVHJ)dTyp6X_>G%_ePnahDrj@t(W6w;OYs}=;@j z0A5O=qz0=koN^s>2(EC~4dIvxz-qIaZ?+TL9o_NnDem``EK8ARL1(&TGi-)A3|}e# zzRaJ$#C7BndH!sySoc$CjhT#sOxAP0v8N~HiwFtj=N4tGA6`hdi9nux)SRMReP;8X zj@$^QY5k2jiTJ{C1vAb+UjLY9s*)!!=dsTGN)sTjQuoJ=fz6K|Ez;VizzB70-HF<*vEnxt^s5nFTZj?Q>1tQBf2d8(58VfG%U-H$0{ zPrNhMx$54z?iQRQ+F`zdsg4}!W;G`UZyskpm7wi$*g4ZwS<4({%Wbub45FV2xb9qy z;J@W7!~f1sP`;|VxpiA^gt91l`)D>QU^(pF*>@0uq^sD}t+sKU512QiL8S4}HbP3O zfb4maNh{$u;9Jt{vUM9j;TcV(1@D>?)W4NH`)2a+ev#PX%dZnrVj-c9v{kRKSiiN7 z{dU&p+xshSZjQG-&R&~T>fK51Z~mn)Ha%2B7{Gpgd#=c>IV6962vciQmy|YJEL1Q# zy*@0}s641O`23!I zH0i59_i5$sHMUz3(`JPSUcqmU(m}nu&3E5S9ZoLB=k{JV(@T3Gn-wC=;_EsS;=9<| zl$@6rsO8gEa|%5iriv%)T!Ii0Xh0TWAQ0ULj8wM0LZ|ljv!cHwvDhXSa5%O_K|AqK zE?aOeBy+;$&ca9{y&Jm`w?bJaU<1i?>SaiQHgolmCOck8?y;*~ec(<;Gv}Eb_`h(I zThIX~O|pxSRs*a^3C4|ZAR{0Z0Eb~xbUwc>j^A<~5D=5Y8IVd4#cK6DClo2ErFIAL)q)dbT%$cd5D&OuWP3-=QvlacC~sahz(QDHSaD!&STM?) zrf4D&EW)}XR}S!KUWfK(XYoakvbNr*sKf-$)FhM>G1*rkD;+b;3@JuNvgg-MQ0%o2h+WVs&aj z%>WmH&;8_l0bPApN1|`}W#Z8;^P9`|kPC10Va3v#wBYY5pODlDScim<;_5MDMYjUL z$VB4)*f9vOA}AVU9NdVUSDg!AcveLS8w|7YfA@-qm5o*0`!*n2a&fz!qL*O0xDDtk z>6%1f(|jv%!x_E2zhz2XZq}$E}8aVc^@jw3M(c`gbbg!9^ zJ(wK^;HY4+cHjJ#R=K6}%e6!oS5L0SmkM3%B;U{*dE32!LFLC_gO=JsdJpHH_4O z1lIG`_pWaNstcH=m;NNJ;lm(7PKa9Aq0Mr7E+7iG65($W})Qs5} zfRliMO7Bi5&<|sDqj2@c{aL!W4~2s*=3ao!MnyV{Zvy24m>B(X zU)t!J69Pgyqt>nb=P~+m`rao1W~67P=iJUgQmX;~`2m!ioeeO4V7);sac-iXhXcWp zcm6dJtp@zU0n!4~z4#H8;zd6FnvIT&*nAuu&fogdWRhGEo3~!yFzRvY>v<_asfsm% zIX(MxkddU5(x~LR8`cFokb!xVKEv)emR3iHrzuxw_otr?P^`@@yL37;MCyq^ z8iecB<_E7N&TY!VJ}^0Yx2{op~v37jK-nZs8R{ zUPb71-DZE5$<88 z#cMw&V*~lF1{{8C|CzcQVpdD3Dq)u2?_2e?KkouZz*vo30H4PM3DPS(r$4-rxKN=9 z0AmL0?bnay&3cWJSkU;wNLvA{yc83GfysfUn%te*N^2D1dW$=k_Ebg=cFWZnU`pN| zuvHQh8jpw^*F1jWRmpZ3@}cjS2*v`^P(DB0?$kciJha{7;bj$IUHbB5>FcJDkd0sU zm-@48gASTkk{7luGSBTE976PUD5*Fo{`oyg;C)8m3(9}|&wso%`S-m4_TJ>5@#J}; zK=bdnE&qco$szvvJ<2~J_<;~N|0%>j66U{e>%Up+pV;K|9smjal^$7M|K8Srv)8}p pHU7uEf7sT4v)Df&$lLn<13t$g|569}Tb&Em)&}S9==rCBudKu>g0~^_q)=z0JQJjy~(|>2`fN)7foYfh$6F09Y5GUdeH)S!_?q;?3-B zPOXKwj2-vH?g@sV^mWc!MPEE8mLQ{a7^JIvH>r^1PYKxW;d(?pPZ-dr#OKDsq;EEH zJurVJgsV;5ySo)o@>pB?f>i3OgARI0J0D#7GDgN}f49d_mE153zxM9+Cn>W|%b?t@ zFB|V!H>XCCc?a6b_PCv0pSG-kL#=>WfwC0&dbQd6F5BV)a7F!=rUWSMc3 z@`S6rlG3w`J~Fv>ddaVI+3`_BgW|-P%VuZRpa8#;ad&`J(&M?)&u7!msVY!Q+C(j@(`^!z^djemQ$Hi+-J`}Cc8`$Pm zZQ4(Ka_Y+E{e8+kQ*7x=4XkbvhnM5L1@-pQC7Ze6gnJ2}Qf%LF@L-ixv)C*ur_F7e z+?PjU^gIu`?aB2Ih8@wBU5P5f&!(L&bqw()A9gp49bbv;Os7*kvDU(=yJ)z#;XoQ9 zzStq?r;G2WlE|H*ErTg;YIo7{+j*D&-c$fc4O7i z>B;Biue)w<{Zf6{C#9D{oF*=Rw6?a|^XP539i_n&g=}1A&itKgv94^tu5lIKH!*KE zrKtt?Z^t>^W|VQvvyhk@gTE3JvLo^vw>pTfRH^VaE`l1|y%7qxUNJ4^)pWj3T3xD1 z3jZR4R8?kRRpA%-m4$VnwKDIOrF%1ToPp=Oo?#o0R(6(Yk&0PH+>WMduE9GPb$7mTjWZbSmBE!99dBQ=Cjrdf^D$69Rsy>#rpsBliggaG<>A};r-Pr5O zqrz$SCeemn#nw6(^Yk|hXAzxaidMmrXX+h>%p}@K*06^<5-UC{9)2GtgVvrj(Pkrs zr?#~$3ONLH`VF(Oq5O5li+q`SK)K>k z@+GJEmht9FqedzE^qth9T&Kd3;9!eL@h=;T znQofxx@M1#*ZRpEtV3t;ASsRMwvd&p&Bt0p`iHKfd>W9E?DZuYVR>yWIBWL+ z1X5Lz!7x&1uS_@>ADMtM8mGUJxI^anm_B}kM|DY_9nO5MiYLM$^=Qa@Xg^1GkvRZJ5qN>6O&=FUAQZd?=( zn7~yonYgvO#F1XRX+6)>4<^03iXNiiZ|-iB{c9&jean3!#)Gy~iYgn1mujl3)76?F zG1ch6t_=ZNgDlY95DtijhawXBy-)YYza( zSi#!6gYfVj#4MnCp6ac8)Zn>13%Jy8A@2E0YevJR>LgFE|Vy`D^AoiY2`{X87ER1YYrnE7LvteDViS(KbKix>jScH6~uhr_cd zbcRRWib1>LEE|Z%q7$h#bDDvLMoikM#oY)>PYYGiA*;6+(9Y?H3^RgsfXkZ1JP=thlYTzG+3QGa47!x&Ne4@$4wqBw(Q{sD{ z7iRBX2h#GtFpkS-4m}Pya|y~CGpK+KEYhWcQ@kC}#^L9n;x0resEzhh$iitR9(22V z{2_>9YDcX|f8!CgJe0+^O_qtXdEgTd1<@ui1wqc>c zTGXVhLggAN2{%Pbu`aAJ4sOo++QiX+^f#sTidCGWYt=1*0UTAV#l>r?>!%}+ukYW@-GlC(JrvPy0XS!KR20g99&xcR7s zYBo>N+dT6>`ZIMPTF_gTL|ruWRf0gWU;?M?2jK{3#@#`8A}dX;Ou8Y|O-?+-FCsI1 zU(A{m{;)oDmB`6GAlze7uda^@#wbGYWEZIT|Q5& z?kRC0&2v`C(Ach1;E4{WB(-{H5Fu5s2n}Ty1#Dz;wqC}VyJ$OKX;kWj>wY-xe|Ybd zy6D~LRm3MVaP|XdBC8jRE-KaIigF&!vCYG307R@|#K1CX>ZaozxDQS(o2^(5#g!fw zb2SAyA9R+=_f$-kiUd?vbr!f=y*`cJpNo#0>?e~QJ0*t3Mt_Y-pVTcGpBPo-maPfv zTbseiC~(Kn>zD8N*FIXkhYi}gyW9HvA5U&I%~joJl!s=kW@i^#Bo&eT8`UL-F0+n| zpBUbS)sXwg@0E+bmdymNoUeoxbLF?#SeuSG*W1o7IJ$~hs||QJS)Dg(HB6xJirBp{ zN89?4O{HUAloP~pXa-Ix{j~+@u7%Bo`{SaY47TS7tIlS4Zr?S6z|js@_?B>i@25o- z_ih2-NN3dY=R~CV9T83ZH$nieB>0*s9}Z1n=fxRlA&7F!SG zuU2=W7iw~C`-Pi&=Mix1jaKD@n|{a%vdc4U)*rspeH8ENn)HK_5mT8tzp%kA$Cs=f z?^Vf@OF=vfp;@5H{peUyR}I3fn~HELoF4- z6fe*B-V1Mr?U0q%6H@W6I)2iTgkev4oDJA?|#D8pbEw01IV z706Wr|7uGr!hveiwNP>A`O0LkQOD1W;H}4qoH+y!v0}WDXY}pS2Of{9ZRRs-a1acS;%1>_qo%H- zp|em{(;2$<7S}Y#`_wz5NDY3++7HlQF||}4B74k>4c21_A<5>>8?Loz#KaI$R!ES9 zUqx!I>f_k2Sb&56^i~wS25+F2*Q`#D`Nu1t1h(wIPmBCd{0PBKIwagywPlFuv0Se=VToxhOc#a2X=SOr1nBVB7;u6LF=~M&Ovhl}gaR1rZpg!I@-diw(sOLx~3FnuPdj zF*UvfL+GDC?*E1Xd?wj|go0fF8XZx~_c3)