From 7afedb344ab2ee795743a1e928d08866fb1b5531 Mon Sep 17 00:00:00 2001 From: zvezdochiot Date: Tue, 7 Apr 2020 16:58:32 +0300 Subject: [PATCH] 1.4.2pl: clean repo --- .gitignore | 5 +- gpl.txt => LICENSE | 0 Makefile.unix => Makefile | 0 README.md | 93 +------- lossyWAV.cbp | 142 ------------ lossyWAV.depend | 460 -------------------------------------- lossyWAV.ico | Bin 1662 -> 0 bytes lossyWAV.layout | 170 -------------- lossyWAV.rc | 49 ---- lossywav.rb | 14 -- waf | 170 -------------- wscript | 344 ---------------------------- 12 files changed, 5 insertions(+), 1442 deletions(-) rename gpl.txt => LICENSE (100%) rename Makefile.unix => Makefile (100%) delete mode 100644 lossyWAV.cbp delete mode 100644 lossyWAV.depend delete mode 100644 lossyWAV.ico delete mode 100644 lossyWAV.layout delete mode 100644 lossyWAV.rc delete mode 100644 lossywav.rb delete mode 100755 waf delete mode 100644 wscript diff --git a/.gitignore b/.gitignore index 1746e32..c7a9342 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ -bin -obj +*.o +lossywav +liblossywav.* diff --git a/gpl.txt b/LICENSE similarity index 100% rename from gpl.txt rename to LICENSE diff --git a/Makefile.unix b/Makefile similarity index 100% rename from Makefile.unix rename to Makefile diff --git a/README.md b/README.md index 5bb673e..5abbe40 100644 --- a/README.md +++ b/README.md @@ -19,105 +19,16 @@ defined. **Tested platforms**: GNU/Linux, OSX, FreeBSD, NetBSD, OpenBSD(needs latest eg++). -# How to Build and Install - -## Mac OSX - -Homebrew users can install lossywav with a simple command: - - brew install --HEAD https://raw.githubusercontent.com/MoSal/lossywav-for-posix/master/lossywav.rb +# How to Build ## General Building lossywav should be as simple as: ``` -./waf configure [OPTIONS] -./waf build [OPTIONS] -./waf install [OPTIONS] -``` - -A typical example would be: -``` -./waf configure --prefix=/usr --enable-fftw3 -./waf build -# As root -./waf install --destdir=/ -``` - -**Note:** If there is no `python` in `PATH`. You can invoke `waf` with whatever python -executable you have. Both *Python 2* and *Python 3* are supported. For example: - - python2.7 waf configure - ---- - -The output of `./waf -h` including all OPTIONS: - -``` -waf [commands] [options] - -Main commands (example: ./waf build -j4) - build : executes the build - clean : cleans the project - configure: configures the project - dist : makes a tarball for redistributing the sources - distcheck: checks if the project compiles (tarball from 'dist') - distclean: removes the build directory - install : installs the targets on the system - list : lists the targets to execute - step : executes tasks in a step-by-step fashion, for debugging - uninstall: removes the targets installed - -Options: - --version show program's version number and exit - -h, --help show this help message and exit - -c COLORS, --color=COLORS - whether to use colors (yes/no/auto) [default: auto] - -j JOBS, --jobs=JOBS amount of parallel jobs (2) - -k, --keep continue despite errors (-kk to try harder) - -v, --verbose verbosity level -v -vv or -vvv [default: 0] - --zones=ZONES debugging zones (task_gen, deps, tasks, etc) - - Configuration options: - -o OUT, --out=OUT build dir for the project - -t TOP, --top=TOP src dir for the project - --prefix=PREFIX installation prefix [default: '/usr/local/'] - --bindir=BINDIR bindir - --libdir=LIBDIR libdir - --check-cxx-compiler=CHECK_CXX_COMPILER - list of C++ compilers to try [g++ clang++ icpc] - --enable-compiler-warnings - Enable compiler warnings. (default: False) - --werror Consider warnings fatal. (default: False) - --disable-compile-optimizations - Don't check/set compile optimization flags. (default: False) - --disable-link-optimizations - Don't check/set link optimization flags. (default: False) - --disable-lto Don't check/set lto flags. (default: False) - --enable-debug Set debug flags. (default: False) - --enable-fftw3 Compile and link against libfftw3. (default: False) - --fftw3-cxxflags=FFTW3_CXXFLAGS - Skip pkg-config and set fftw3 cxxflags explicitly (default: None) - --fftw3-libs=FFTW3_LIBS - Skip pkg-config and set fftw3 libs explicitly (default: None) - - Build and installation options: - -p, --progress -p: progress bar; -pp: ide output - --targets=TARGETS task generators, e.g. "target1,target2" - - Step options: - --files=FILES files to process, by regexp, e.g. "*/main.c,*/test/main.o" - - Installation and uninstallation options: - --destdir=DESTDIR installation root [default: ''] - -f, --force force file installation - --distcheck-args=ARGS - arguments to pass to distcheck +make ``` -A simple `Makefile.unix` is also available as a last resort alternative. - # Credits * All lossyWAV authors and contributors. * HydrogenAudio community. diff --git a/lossyWAV.cbp b/lossyWAV.cbp deleted file mode 100644 index 7c6bbdf..0000000 --- a/lossyWAV.cbp +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - diff --git a/lossyWAV.depend b/lossyWAV.depend deleted file mode 100644 index f4d530c..0000000 --- a/lossyWAV.depend +++ /dev/null @@ -1,460 +0,0 @@ -# depslib dependency file v1.0 -1363092734 source:e:\userdata\cpp\lossywav\lossywav.cpp - "units/nCore.h" - "units/fftw_interface.h" - "units/nFFT.h" - "units/nFillFFT.h" - "units/nFloat16.h" - "units/nInitialise.h" - "units/nMaths.h" - "units/nOutput.h" - "units/nProcess.h" - "units/nParameter.h" - "units/nRandom.h" - "units/nRemoveBits.h" - "units/nSGNS.h" - "units/nShiftBlocks.h" - "units/nSpreading.h" - "units/nWav.h" - "units/nNoiseCalc.h" - "units/nMasking.h" - -1364243192 e:\userdata\cpp\lossywav\units\ncore.h - - - - "..\version.h" - "nSupport.h" - "nComplex.h" - - -1358323364 e:\userdata\cpp\lossywav\units\nsupport.h - - - - - - -1361527640 e:\userdata\cpp\lossywav\units\ninitialise.h - -1361528034 e:\userdata\cpp\lossywav\units\nwav.h - -1361528034 e:\userdata\cpp\lossywav\units\nshiftblocks.h - -1361527796 e:\userdata\cpp\lossywav\units\nprocess.h - -1361527795 e:\userdata\cpp\lossywav\units\nparameter.h - - -1362728649 e:\userdata\cpp\lossywav\units\nspreading.h - -1361527896 e:\userdata\cpp\lossywav\units\fftw_interface.h - "nCore.h" - -1358323362 e:\userdata\cpp\lossywav\units\nfft.h - "nCore.h" - -1361526722 e:\userdata\cpp\lossywav\units\nfillfft.h - -1362062704 e:\userdata\cpp\lossywav\units\nmaths.h - - "nCore.h" - -1363337310 e:\userdata\cpp\lossywav\units\nsgns.h - - - - "nCore.h" - "nMaths.h" - "fftw_interface.h" - "nFFT.h" - "nMasking.h" - -1361528034 e:\userdata\cpp\lossywav\units\noutput.h - -1355493324 source:e:\userdata\cpp\lossywav\units\fftw_interface.cpp - "FFTW_interface.h" - -1361530595 source:e:\userdata\cpp\lossywav\units\ncore.cpp - - - - - - "nCore.h" - "nMaths.h" - -1361519468 source:e:\userdata\cpp\lossywav\units\nfft.cpp - "math.h" - "nMaths.h" - "nFFT.h" - "nCore.h" - -1347021240 e:\userdata\cpp\lossywav\units\nfft_pas.h - -1361519468 source:e:\userdata\cpp\lossywav\units\nfillfft.cpp - "nCore.h" - "nMaths.h" - "nFFT.h" - "nFloat16.h" - "nFillFFT.h" - -1364242796 source:e:\userdata\cpp\lossywav\units\ninitialise.cpp - "math.h" - "nCore.h" - "nSpreading.h" - "nParameter.h" - "nInitialise.h" - "nSGNS.h" - "nOutput.h" - "nProcess.h" - "nFillFFT.h" - "nRemoveBits.h" - -1364208570 e:\userdata\cpp\lossywav\units\nremovebits.h - "nCore.h" - -1360309314 source:e:\userdata\cpp\lossywav\units\nmaths.cpp - - "nMaths.h" - "nRandom.h" - -1363592918 source:e:\userdata\cpp\lossywav\units\noutput.cpp - - - - "nOutput.h" - "nCore.h" - "nMaths.h" - "nSpreading.h" - "fftw_interface.h" - "nSGNS.h" - "nParameter.h" - -1364333408 source:e:\userdata\cpp\lossywav\units\nparameter.cpp - - "nCore.h" - "nParameter.h" - "nMaths.h" - "nOutput.h" - -1364242750 source:e:\userdata\cpp\lossywav\units\nprocess.cpp - "nProcess.h" - "nCore.h" - "nSGNS.h" - "nMaths.h" - "nSpreading.h" - "fftw_interface.h" - "nFFT.h" - "nFillFFT.h" - "nRemoveBits.h" - "nOutput.h" - -1364313703 source:e:\userdata\cpp\lossywav\units\nremovebits.cpp - "nFloat16.h" - "nMaths.h" - "nRemoveBits.h" - "nSGNS.h" - -1364243192 source:e:\userdata\cpp\lossywav\units\nsgns.cpp - "nCore.h" - "nFillFFT.h" - "nSGNS.h" - -1360234962 source:e:\userdata\cpp\lossywav\units\nshiftblocks.cpp - "nShiftBlocks.h" - "nCore.h" - "nMaths.h" - -1364242750 source:e:\userdata\cpp\lossywav\units\nspreading.cpp - - "nCore.h" - "nMaths.h" - "nSpreading.h" - "nMasking.h" - -1361519468 source:e:\userdata\cpp\lossywav\units\nwav.cpp - - - - - - "nWav.h" - "nCore.h" - "nParameter.h" - "nMaths.h" - -1351844626 source:e:\userdata\cpp\lossywav\units\nfft_debug.cpp - "windows.h" - "nCore.h" - "nMaths.h" - "fftw_interface.h" - "nFFT.h" - "nRandom.h" - "pthread.h" - -1348861440 e:\userdata\cpp\lossywav\units\nfft_debug.h - -1360224170 source:e:\userdata\cpp\lossywav\units\nrandom.cpp - "nMaths.h" - "nRandom.h" - -1360225146 e:\userdata\cpp\lossywav\units\nrandom.h - "nCore.h" - -1361527796 e:\userdata\cpp\lossywav\units\ncomplex.h - -1364242957 e:\userdata\cpp\lossywav\version.h - -1355493324 e:\userdata\cpp\lossywav\units\nversion.h - -1360744980 source:e:\userdata\cpp\lossywav\lossywav.rc - -1364333581 source:e:\userdata\cpp\lossywav\units\nnoisecalc.cpp - "windows.h" - "nCore.h" - "nMaths.h" - "fftw_interface.h" - "nFFT.h" - "nFillFFT.h" - "nFloat16.h" - "nRandom.h" - "pthread.h" - -1361527796 e:\userdata\cpp\lossywav\units\nnoisecalc.h - -1361527796 e:\userdata\cpp\lossywav\units\nfloat16.h - "nCore.h" - -1353922402 e:\userdata\cpp\lossywav\units\nieee_float.h - -1360224712 source:e:\userdata\cpp\lossywav\units\nfloat16.cpp - "nFloat16.h" - -1362381840 source:e:\userdata\cpp\lossywav\units\nmasking.cpp - "nMasking.h" - "nMaths.h" - -1362382348 e:\userdata\cpp\lossywav\units\nmasking.h - -1473865974 source:e:\userdata\code\cpp\lossywav\lossywav.cpp - "units/nCore.h" - "units/fftw_interface.h" - "units/nFFT.h" - "units/nFillFFT.h" - "units/nInitialise.h" - "units/nMaths.h" - "units/nOutput.h" - "units/nProcess.h" - "units/nParameter.h" - "units/nRemoveBits.h" - "units/nSGNS.h" - "units/nShiftBlocks.h" - "units/nSpreading.h" - "units/nWav.h" - -1473928176 e:\userdata\code\cpp\lossywav\units\ncore.h - - - - "..\version.h" - "nSupport.h" - "nComplex.h" - - -1473928098 e:\userdata\code\cpp\lossywav\version.h - -1473865974 e:\userdata\code\cpp\lossywav\units\nsupport.h - - - - - - -1457957311 e:\userdata\code\cpp\lossywav\units\ncomplex.h - -1473865974 e:\userdata\code\cpp\lossywav\units\fftw_interface.h - "nCore.h" - -1473865974 e:\userdata\code\cpp\lossywav\units\nfft.h - "nCore.h" - -1473865974 e:\userdata\code\cpp\lossywav\units\nfillfft.h - -1382088071 e:\userdata\code\cpp\lossywav\units\nfloat16.h - "nCore.h" - -1473865974 e:\userdata\code\cpp\lossywav\units\ninitialise.h - -1473865974 e:\userdata\code\cpp\lossywav\units\nmaths.h - - - "nCore.h" - -1473865974 e:\userdata\code\cpp\lossywav\units\noutput.h - -1473865974 e:\userdata\code\cpp\lossywav\units\nprocess.h - "nCore.h" - -1473865973 e:\userdata\code\cpp\lossywav\units\nparameter.h - -1371624268 e:\userdata\code\cpp\lossywav\units\nrandom.h - "nCore.h" - -1473865974 e:\userdata\code\cpp\lossywav\units\nremovebits.h - "nCore.h" - "nMaths.h" - "nSGNS.h" - -1473865974 e:\userdata\code\cpp\lossywav\units\nsgns.h - - - - "nCore.h" - "nMaths.h" - "fftw_interface.h" - "nFillFFT.h" - "nFFT.h" - -1371627202 e:\userdata\code\cpp\lossywav\units\nmasking.h - "nCore.h" - -1473865974 e:\userdata\code\cpp\lossywav\units\nshiftblocks.h - -1473865974 e:\userdata\code\cpp\lossywav\units\nspreading.h - "nCore.h" - -1473865974 e:\userdata\code\cpp\lossywav\units\nwav.h - -1361531398 e:\userdata\code\cpp\lossywav\units\nnoisecalc.h - -1473928098 source:e:\userdata\code\cpp\lossywav\lossywav.rc - -1473865974 source:e:\userdata\code\cpp\lossywav\units\fftw_interface.cpp - "FFTW_interface.h" - -1473928122 source:e:\userdata\code\cpp\lossywav\units\ncore.cpp - - - - - - "nCore.h" - "nMaths.h" - -1457957311 source:e:\userdata\code\cpp\lossywav\units\nfft.cpp - "math.h" - "nMaths.h" - "nFFT.h" - "nCore.h" - -1473865974 source:e:\userdata\code\cpp\lossywav\units\nfillfft.cpp - "nCore.h" - "nMaths.h" - "nFFT.h" - "nFillFFT.h" - -1382088071 source:e:\userdata\code\cpp\lossywav\units\nfloat16.cpp - "nFloat16.h" - -1371627868 source:e:\userdata\code\cpp\lossywav\units\nmasking.cpp - "nMasking.h" - "nMaths.h" - -1383836342 source:e:\userdata\code\cpp\lossywav\units\nmaths.cpp - "nMaths.h" - -1473928098 source:e:\userdata\code\cpp\lossywav\units\noutput.cpp - - - - "nOutput.h" - "nCore.h" - "nMaths.h" - "nSpreading.h" - "fftw_interface.h" - "nSGNS.h" - "nParameter.h" - -1473865974 source:e:\userdata\code\cpp\lossywav\units\nparameter.cpp - - "nCore.h" - - "nParameter.h" - "nMaths.h" - "nOutput.h" - -1473865974 source:e:\userdata\code\cpp\lossywav\units\nprocess.cpp - "nSGNS.h" - "nMaths.h" - "nSpreading.h" - "fftw_interface.h" - "nFFT.h" - "nFillFFT.h" - "nRemoveBits.h" - "nOutput.h" - "nProcess.h" - -1371623566 source:e:\userdata\code\cpp\lossywav\units\nrandom.cpp - "nMaths.h" - "nRandom.h" - -1473865974 source:e:\userdata\code\cpp\lossywav\units\nsgns.cpp - "nSGNS.h" - "nParameter.h" - -1473865974 source:e:\userdata\code\cpp\lossywav\units\nshiftblocks.cpp - "nShiftBlocks.h" - "nCore.h" - "nMaths.h" - -1473865974 source:e:\userdata\code\cpp\lossywav\units\nspreading.cpp - - "nMaths.h" - "nSpreading.h" - -1473865973 source:e:\userdata\code\cpp\lossywav\units\nwav.cpp - - - - - - "nWav.h" - "nCore.h" - "nParameter.h" - "nMaths.h" - "nOutput.h" - -1473928098 source:e:\userdata\code\cpp\lossywav\units\ninitialise.cpp - "math.h" - "nCore.h" - "nSpreading.h" - "nParameter.h" - "nInitialise.h" - "nSGNS.h" - "nFillFFT.h" - -1370847477 source:e:\userdata\code\cpp\lossywav\units\nnoisecalc.cpp - "windows.h" - "nCore.h" - "nMaths.h" - "fftw_interface.h" - "nFFT.h" - "nFillFFT.h" - "nFloat16.h" - "nRandom.h" - "pthread.h" - -1473865974 source:e:\userdata\code\cpp\lossywav\units\nremovebits.cpp - "nRemoveBits.h" - -1366489638 source:e:\userdata\code\cpp\lossywav\units\ng711.c - "nG711.h" - -1371624268 e:\userdata\code\cpp\lossywav\units\ng711.h - "nCore.h" - -1382087147 source:e:\userdata\code\cpp\lossywav\units\ng711.cpp - "nG711.h" - "nCore.h" - diff --git a/lossyWAV.ico b/lossyWAV.ico deleted file mode 100644 index bf2b16401aa59e3e0a778ed58b96935169152119..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1662 zcmeH{t!^VR6op-BRh(nb|BOL{3KQi85-BfG5WXcmpY#*aGpQpzE+3Bfj{SJF4|hD58l`EJm=(+FtB~c_y)@bHg9M@@oQ_yp{|{-b&>?#S|ZfgJD+ia zW$-x>LHxJDe*?7MAB=~o>r(3Wg^On>e7wHMD_^Q`Iu-k07uL4O)wn`0u3(U5a{tiO21G(G^4(8nfy52!44yMhfr0O4hUX%2o<&(9zpb(^Oxd8{;l|XggB*KKQvZ%_zodOYG8;E zHxjdy-lb-0h!8gttB|ItF@{x$8;Mm&u`-yk3UMQ`3K#xS6%fbMHxke0(BS&`m7Y2U zQYJ&n5F=0&ed_d`>-p|1bh>eRd=|Wqq&r5y3jB({^jCBi+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/lossyWAV.rc b/lossyWAV.rc deleted file mode 100644 index cef9bc3..0000000 --- a/lossyWAV.rc +++ /dev/null @@ -1,49 +0,0 @@ -/**=========================================================================== - - lossyWAV: Added noise WAV bit reduction method by David Robinson; - Noise shaping coefficients by Sebastian Gesemann; - - Copyright (C) 2007-2016 Nick Currie, Copyleft. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - Contact: lossywav hotmail co uk - -===========================================================================**/ -1 VERSIONINFO -FILEVERSION 1,4,2,0 -PRODUCTVERSION 1,4,2,0 -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "080904E4" - BEGIN - VALUE "CompanyName", "Home Developer" - VALUE "FileDescription", "lossyWAV: Added noise linear PCM bitdepth reduction method by Dr. D.J.M. Robinson, implemented by Nick Currie using an adaptive noise shaping method by S.Gesemann." - VALUE "FileVersion", "1.4.2" - VALUE "InternalName", "lossyWAV" - VALUE "LegalCopyright", "Nick Currie" - VALUE "OriginalFilename", "lossyWAV.exe" - VALUE "ProductName", "lossyWAV" - VALUE "ProductVersion", "1.4.2" - END - END - - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x809, 1252 - END -END - -id ICON "lossyWAV.ico" diff --git a/lossywav.rb b/lossywav.rb deleted file mode 100644 index a231b5a..0000000 --- a/lossywav.rb +++ /dev/null @@ -1,14 +0,0 @@ -class Lossywav < Formula - desc "POSIX port of lossyWAV - a near lossless audio processor." - homepage "https://github.com/MoSal/lossywav-for-posix" - head "https://github.com/MoSal/lossywav-for-posix.git" - - depends_on "pkg-config" => :build - depends_on "fftw" - - def install - system "./waf", "configure", "--prefix=#{prefix}", "--enable-fftw3" - system "./waf", "build" - system "./waf", "install" - end -end diff --git a/waf b/waf deleted file mode 100755 index b004a3a..0000000 --- a/waf +++ /dev/null @@ -1,170 +0,0 @@ -#!/usr/bin/env python -# encoding: ISO8859-1 -# Thomas Nagy, 2005-2016 -# -""" -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING -IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. -""" - -import os, sys, inspect - -VERSION="1.9.5" -REVISION="e9e36ebc81cc860d8a25c4c34f0b27ec" -GIT="443985720f09c8e97c05cc0db2d70e2e84934e47" -INSTALL='' -C1='#*' -C2='#(' -C3='#&' -cwd = os.getcwd() -join = os.path.join - - -WAF='waf' -def b(x): - return x -if sys.hexversion>0x300000f: - WAF='waf3' - def b(x): - return x.encode() - -def err(m): - print(('\033[91mError: %s\033[0m' % m)) - sys.exit(1) - -def unpack_wafdir(dir, src): - f = open(src,'rb') - c = 'corrupt archive (%d)' - while 1: - line = f.readline() - if not line: err('run waf-light from a folder containing waflib') - if line == b('#==>\n'): - txt = f.readline() - if not txt: err(c % 1) - if f.readline() != b('#<==\n'): err(c % 2) - break - if not txt: err(c % 3) - txt = txt[1:-1].replace(b(C1), b('\n')).replace(b(C2), b('\r')).replace(b(C3), b('\x00')) - - import shutil, tarfile - try: shutil.rmtree(dir) - except OSError: pass - try: - for x in ('Tools', 'extras'): - os.makedirs(join(dir, 'waflib', x)) - except OSError: - err("Cannot unpack waf lib into %s\nMove waf in a writable directory" % dir) - - os.chdir(dir) - tmp = 't.bz2' - t = open(tmp,'wb') - try: t.write(txt) - finally: t.close() - - try: - t = tarfile.open(tmp) - except: - try: - os.system('bunzip2 t.bz2') - t = tarfile.open('t') - tmp = 't' - except: - os.chdir(cwd) - try: shutil.rmtree(dir) - except OSError: pass - err("Waf cannot be unpacked, check that bzip2 support is present") - - try: - for x in t: t.extract(x) - finally: - t.close() - - for x in ('Tools', 'extras'): - os.chmod(join('waflib',x), 493) - - if sys.hexversion<0x300000f: - sys.path = [join(dir, 'waflib')] + sys.path - import fixpy2 - fixpy2.fixdir(dir) - - os.remove(tmp) - os.chdir(cwd) - - try: dir = unicode(dir, 'mbcs') - except: pass - try: - from ctypes import windll - windll.kernel32.SetFileAttributesW(dir, 2) - except: - pass - -def test(dir): - try: - os.stat(join(dir, 'waflib')) - return os.path.abspath(dir) - except OSError: - pass - -def find_lib(): - src = os.path.abspath(inspect.getfile(inspect.getmodule(err))) - base, name = os.path.split(src) - - #devs use $WAFDIR - w=test(os.environ.get('WAFDIR', '')) - if w: return w - - #waf-light - if name.endswith('waf-light'): - w = test(base) - if w: return w - err('waf-light requires waflib -> export WAFDIR=/folder') - - dirname = '%s-%s-%s' % (WAF, VERSION, REVISION) - for i in (INSTALL,'/usr','/usr/local','/opt'): - w = test(i + '/lib/' + dirname) - if w: return w - - #waf-local - dir = join(base, (sys.platform != 'win32' and '.' or '') + dirname) - w = test(dir) - if w: return w - - #unpack - unpack_wafdir(dir, src) - return dir - -wafdir = find_lib() -sys.path.insert(0, wafdir) - -if __name__ == '__main__': - - from waflib import Scripting - Scripting.waf_entry_point(cwd, VERSION, wafdir) - -#==> -#BZh91AY&SYHi0#&$#( #&E(a|{#&#&#&#&#&#&#&#&#&#&#&#&#&#&#&#&#&#&#&#&}^ghFtsc}`l֚>;Ҏe-R]Yfo}\Zݧ]sC}7݌zV=Onvg@^f٤txgfϏwrP}4Ϯv]N#(z>#&#&#&#&>΀>:#&` #&=f#&SJf#&m֚iM#&M;#& ΁Рl+#*UD%!/wk%%#&$#&T+M#({x9PCξGdxWH! {uwݽ;{>^lQ]i{wT^}_Y紗l|7v[>I&=[ fo{ۚX#&{/{ɽͻHMNTv#*znn7w{77N4:oH#*m&PJp:W 7yyp#(9}˝wyOw8=c΁#*o8gnR#(;lV ;u:ܻi{sN{{^Om}+"av}[g|e9E=}=lrͯw͛m_]w_s^=g}'۷i8yM]qk#&;wor}==+@*%5B+]\s{nWbw3vy5]J{P]A ;#&gwP#&载yK뻹vKefoH(]i ˠ뜥tBL4q}#(Ⱦ%ksGw7@{{e[F>ۑ7ɶlsǤ:zy=7u}d̂ah>mxu/z0LG7D>#&@uUaUG=sN#(}_^n/{i{=e}!}˟AO4Pz+NT;px=4wp(@#&m͵@gA}:#&*vv'@#&Ս=k;s9ݜpvʈ(ݶvVˉicujjK2yxW>24x{0Q,;-}ތk^]ϻMvm]}}[opD#&M#&&i2#&#&L%O2mPdA#&=L~!#A0IhD##*i2##FCHdba2#&ш B M4I&ja =a56I#&hzOP#&#&#&#&$JH"i)iT=OQ@Pa#&z @#&#(#& @#&#&@4dҞhMSҘ4 @#&#&#&$Dh&L)=J~&SCzQ5O4mFA#&#&ZrR?۵#:~zwSK0'ƫ]&(dV+ "QQN{w"−WnXX)S@OR\8z|gi!jҶm[T &oRyw0۷{Y)O3WsWobÈxXWvN$ IV6Ik[FH(pT!Ǖ-")6+P b#*#(#&,")!THȩTDA@2d0͍34 dCM3Q&Ke(Ҋmbd FMSQ4Fi,#Dٌ#(d(#Qc@bʛF)6KEhJYiJmDi (͌kF h)@5#%#(ҤE#()l&!L ؓFbde4 RRjdmldԵ2Y12J64J()F*$6SXF,)#(3DAMh`DdZBB)b VJ!2b`hb)ԕ(5 *EB,EJSBi21,LLTiѤAI4,Y)6+%lBDK ʒaƲhea`dbbhDFJE,PHL% d,Y5Q&Q$MI$J1efьMl,IJ3a(Ie"X#,c!dM2HآT̂1Qf@%ҤRe5L*(df"j&YK#RdM)Q0YHD20LcA4$3% #&&T֘MHR R#*$$dٲ6XAI#%,ilFfJ2iL1)*Q%jY)2Bɉ2)Y4Y#H(EI1$MFɱCCH!Вk4mHK&Q(,IdE(KHMSfŢ&A))"BmLE# la 2*,QX#( 2S)cdD4%FR&KZѱ$eS#E2 փd%,Ѧ)22,ZalXRR044]#($%J#-mTbdɖTCd(ih6lQZd2lT&fJk%!hJ,J#hX,)iL3d,YV4B+eHU+0͌Rō4ȕ%R#(ȍћKZJe6ƵTm&5%Tm6MM!TPT*űaFlQRR !DjV#lTXŤ,ILBBe2fā4)"ڦ1Lm5Sjb1jT,IjED-%&I#(e ,ԲLDD2I b F!j-BP)*0UiɤH"h*AYddCDIFf)hԘ m3MH`"&0 -BIPhF$, S+0e %$%F!ʠř‰#*CfL61Eh,4!FKE#(!Qȍ4hRЙ+AeI,C)jњ#(CEK,1mF#!@,XJ4 -ScPmli,f40ҌLڳiHFTJ`cF١4Y)bb%%$$mFMFQIJ,-آAYed bѐR%ѰlZM&Yj#*DZJ` B)CZ-,F""-"mV+0ML2J%%ZmJ,))+Z%)CY,Z%2 ʋ LRQ#a#(FIA0b%)6&"EQY5)4QA2-EERejPQiMRMF*S["Ƥ")Tٛ3Z"RhIim F(kE3Y-ړ#)DY6ҥ62Ʀ%$(6($[bԘ%Rm64J(eK"eL&$bѢʒmHbIV+E-3Vэk6fkb,!mFheTDl*(I$I2ɭfc?Wv5O}/i_wwCT9l™U4K/0?L1U-1mqewȢ0h'`ƒãr%K*MM~,Hg?sE2 k&o^a"zΠ6a!؛nģ,<(H5d"Kμ^;q\.飮T*3iYiˆI("*wu7v&{+z7*4kf;rK^{v^͑sIAbLnzvw{JH[0YB u@R(,_O.T\mبФRvodcJVImgh#{c^l}V A0z!F,Ӷ$ PKP-E#*i)#*(H,H)'h"Ҩ{x#*H4 RSM𰇶\M& ^Tˢ[PE(ō]b5FFosdz3U,AU&O˒c$Qd-Xˣ#K bpQR"Q#*hJhe#*C΍;1O<#*J)$-`⡄0Ab0[uA&#(zk2LYFQݥ^tŋlae{l 1ȣG9 l$xxTtk!蔃ª,sߋʻ >IٵmŽM#*ڂ)r:&S4E&i]j:AHZ<2]V?:hwYK7KbbRhm0U@hjdm#(]~:]a{wy׳}ncN(F9=0åيR7aSΠ]'eiy%wмwظ󮦋!bk47ͱZkw>#(Da2x{tA`e#(w}^Y )c܄hՀ=vFwg{.X`r5Qyߓzte(MrouʕHSIS5ح",xAdvv5_P[F(A#&l#*<Db+mfy!0 ZnRsgki%mE[@V adȢZPBNڀq֔ J<|S)R]UuXo<]HYv REFڛ0 LE2ZyFZq9e*m~P-#*jO41(ܠ©[E %VSm˾/vÎ G|gvz*Hq~0N޸#(#(Vwb))#J_L$LCPqgWt<Ѿч_epfu)#*H@&M9~q#~Y-Ŧ>m{$FG_E1zԆ~nƗ칑4#Obd[*UrRr$ 孫V`6M0ϲZW2#ybN#(#N코!3=PrAaJ[{T|vy#v/C(^jLsz3^;CYޣ3鶜X55Ie?-}Sw wv`ץA5~3Uuwz`h5OZ#(3ug]J2YT Fu>MN| \=!UBGA_iXRyk٠AɒDS\"bdaI®ş=+&^;$0 v 1dmw1{()})?o㣟=tg >6-2tOk3"oi㔝gGJbI]*&KG5Sݵ|(dX#*$#3TYL(P[oeU!3a-厈g6ޗ3[6_LEmٯTfH{=YΑ!맇~.6NqI)L"(wv:Ώ+?٭]AM ;H,)rQXEdt/;lq"ܒ+⇍4/FY]LrtȏDYڽȠUJ(->#(Q;(a&'3F=ަpdiKl;]Nws1bzV>u;=긖Īs c#(0M0y~C}P*#(2,W~^F*w_ϫMBSTLJ#*ڼȢ3{U t9"ACSpx3oO&fQWLTX.p<lպ-_WtS$.J^Ҫ^;L6yӷVc?=>ȾH1U8lljcs.a껧Y:ձpwW+H-c^h_b2$ӏF[2Pb,{0ei?O|j^goQLmܶ:qxvWx!.tގ=|Pҫ[ˮ k/3r b<6:NDJe]Jzюu!CT'!">SN1rcMS,sEWĘX/Nq:#(.uOWɶ)֥;b#*36Dyْ4#(̴6jaNj7xm#(Id2[K!Ô~\qfkk84M}m~澷9{>qMi0qMszX;8׃FEVn%k*J+iGk2EF,VmJKlqvr5/Ly5"TCbrg!~H"18]V|"?WBtVڭ5/#&?1Z#* #(yL &4¤C ekyB0}u}#C@uݘ˓5zb'kF3#913#Y1㬒 WTEg=zsO(`Ft`y~ϔK=CҌ)>/EA›c0'LZo@lXo3)wOO)8*/AA23}_m&ɺbF`L!@Ŋ v^i"-P0(5v| Ɖ_G_hכ#*46&xbi[~hq1Cg?kJ&!ctGU& TF~e2Y:ŢKT FfJPDo+@ɘP!rSN"Wru^},Q kLFoxY~_kFRï'$uyNk}3l\1!Q~4.m;± ((UW)#*r%;f=yxWXA<9g^* ;큤2*HouDvR6o|kABC5 J> dX(˅C8T_;P#5@3x-JhF U#&S|Smhc6U(c3hsxAW7;j訿%%*lb# Q5#(T:*]+ٵQu¼:!Lw=丹T{uϞگUq3s;J=|iΤ>/l3Ȗl1`yHp~nڻ Nwx?-9zE#KbFJYz7^.o#*P7򛻼.8mSZC| &" #&Ta蚊~'1x/ 9VYo:#k. G$D< jj=#*\emؙD@JOmvg -'mϹrmvt1i0q#ssKިYګk^XYC-뭠NPi.$#a|sLshqmr0kpk0Nj54'3>әkcu%   .:?WJj4AX8g:+g2Cm|yZΧ:V&8KBBR,P#(""0= 啀z#ABV*AÃ"CwvGĹ&0jb|dž{-bSzwWd+ Mp=%6 AԉaJiQG\Z%6u.VEɀRoQO#^DsrU#(BZ[x m9ponZF$L!v?&݄di@8%)\yh !FϷf=b")uǕQTפT6kgϻgj_.:Gw $13~B8nS`{:uI7i"]0`4Ggʙv[y~:-J ?Q#(|JK`=gW]:FMDF s~` f!"@V;_';8W>3Am=ͦP }7aE(Q1Vj䝈51sLA*隲yqWG@wrƤ²jͯjGBSc8%^dGskg.[`PE (yF;4ϵ~8Jk47Ԕ4&67{2K#&JՈW C}вx=2p@;N" P?.B-~ȃ m+m{Ty~GrzgEw9#&dd{##pϖi?el#(#-Mw쿇}33,5R\Ȝsa?KX#*Ppk6y=ӦAYϣǩV'G! gjkmy{bl=i) shGo-BRmWS^J/N_Lb.`ϳ2{a m2Ifbx^?7)tUK%I$gw#(ӕuC=-|H_{$L1ןz%m/faBӏ{G07Ĭuު?3ltXjIWy6#o.rТܧ&i~.?%mL+32/#*Dt߹s <+;Ɂ00MÇ+mhaLg1alEF0P<(MèBbb/ ϵډt^O479#(z8p0EQr\?jӻY8#ߙ7G׋᧧fy>=&9 Jhvz#&ܾ{˃YT<nh?E|s&nFXi7 ͯR#&bM;k?yM۴-n)@\3*Qc E2@!kwiB%?_"0L~m)(c_ֲժ`weI5}{j6hkJi]#u-Qt҈g ~5A!3o5!wFl]TT&5b-#UIwkD1:yQbD@7;M߶<$߂SؓԎpatp?`͎%zȝ!Ӿ>UFtv_BWpm&a3/Xn6c,vrD4l;|.=uC{;;=9ތ@gR&8XJ??4d#*{f8r[cWSUG2(#Kb-:M(c\?5s<}0J`}_yfn̲4n_+(Ц;5L1#( 0 :/P,~=+#Qo+iVc aүc6W(Fl>\m?-WKoJ*x<(#(m4D~L"ֵh馼2ARt8Fu#&yJ\&f7|ƯM#*8ji!o´ϽX[_Y#Q#*ͅ&ݮ<]5>}MF~z}352YT61.`"2hL`âF@!RtC! j#(/発Uifq~#(14;! ѡƂhgN ucM1MtW&u3#D#&m了h]hvь+`0hc3#&ZJ!3E Xd10aBǗwo?M] Hlpʼn1{9>*+Y$"_c_Ҿsm ^,6hɂv yOzg˥5j#(X@ghنavt@'WbS J|jjwXO-jDBѬ)'zy KIm[#*#cJKA ֵ0ky8#(r&FduTcEN#(`/"ѵHGp>ZϨ:A"AOUcY1}RU@Zbҩ{SNyN6G;u#ZC$#(Ioo+wr9˳[67eG~>&Rp;M%+EӅ'駺[#(!Wvk4 KsF?rcOmAxHďoi*`ԁ(=#@~s7];٩u1BZ)Ip#*YF%i1Hݓ[T^_ # (,D0 95Edvr*iM#Pȳ I٥)#( um6-dQ(#&c0#*~ud+jn1H,Ph`wOX=v{h׼/wP j55aCO& C]ovs *_-QJx^'7[~ޜqƼLJG#(<POnѝᜡmW9oXԤJ&n8i™g/'x51zOUBnK-MegȨz0yco9Q܁`ڜNt Nṯq8b4v0J*f7 %&D*SPMܳo#*" jm}#*6^S,lE5ck:VN.,q[Ӎ˩$hg0ڤ1TiyL O2HLٕۉ"m-3#&kI6aHNȺޱ*Rm/]f69rtƖ8Tݮc}#&cKdۭF043.rʴԈA_n[8>Ol4',`>C *Q"~x6A"BLl:w̏@슬b*v:+ 8zbyKvn>"! cs$z,@QVREmQ͵ҴD>pbDc%D"H(dC o m{?wM ?#&v?zBe#&rPtn5T7*JsB\|&R׋T8fNJ4g4|-#z~y9fة,"RzsmA.k~[[7?r?c6_SYv|ZzdL)qh167˥n۔5ʙXPHNl}pZ#wo7Jsa/Ia3#&$po4$698'NNG/^,(k>Jx[uk?WݫUZ#(o4XDaFաsƢ$yN q7W$Vw|A*n'.z#(&#*JEKFu)$OzXG(qقSJH$p7T4J@]S92eA/Sn![䪼zޮ2~>O0:ݵT%ZLa#&A@f|s#&]A_VJIh}̯M #Gjŋ?K b<5x*3Tc58:-oa,zPCۑл6kG1̫Z&|qG?X|ƪ^K]>^]#&#*n.ȃdZEgj4,'K^#*8ZV(_~+쏭d2M{)ɆlFwDg*O]*/{`mzCq*ޣMmS#*+gj yH[zDsfw,96p.Qt-'tuH@UT"e.DJ|~V'>q-Ucb]v=z~6G7vT'PGiן0e Je0\`nDZcKjC}>]^푣qݧ,$}2 8)\c0(kqXnY^\2A$tQ^*y QHXrf"4 R:=}-l9Om-iK\",H#(BǑ?G|D2뼒uA@%.}<.WT󫕼iYEQ{| vv]1$O{B#*k^ p%(de"C$Yt  s#*9Ȑ(&vñ>=]NQzi!ׇ2Ey)t禚7߶|,˛0X.] ,Ž2,|:kѶd:Q]<Ë6<enCLy] G#&s|n ӝܼ唧Uo=6xSTQbrxƷrϣl=k(YrtQJVWp~P_S^prGߟFhSGKej:CTSIvy2E-mD믒FT#(]/aMKNgWUYHٔFzg2Cw\ڒÏ8ON+#A7*1ɞ7.7?X룙]jBd<~^51v =tD=F:WW~fmM՘S?WuK#a>zz?%¿_` 1x_I׮Zo<9p_SK#*OM-uBU #(˾/XEnӿsHWyetWrګQ:}Nw78#(^(P#* owkDrgn _ 9\WIN WQ /J#*;nC׀F+O˯6#*=7*t{R>N A(A(JQ#*XR).EDY\ /~Od>*DQQZoe_@_wy:W?ns<\syfs/zaOX*'gGǕ>I 7K҃KoOp8;#*CG PܒH./G%s#W_c0˹(kNc{~Bw|zy^w!bl:?^&,+=]C[v5E^~v#&qfLz]EGoTEwsJߕ9lls$3faHWR( q5@#*1T'PBMСR> #Viq )&A6k #&i]H]#&$NG9XZ;Ʊ#( 9亝֍d: Tnzͻ$#(8ӱv:, 9 b!M_vܵxym>[Ӟ1S#*4S)iK"#(l8CmN$9g#&8T(D2Ø^QuQS89~g~&_Fl~)鋞IQz׃VXtoLlY#("._W^_{8IU45w^fAm݂t c}KE\3x/`Gl^$PBJ!!VGxEiqW>f iga p{ +<= w7atz(OFg9U nt#&Sg' !QD ]t"|cehηn_Ң8t~#(ˢtDLXlf;zMm仯imK\ǰg?Kiawk\hy_gTWg㲃R~?rbF6$#Dz |;;4GGJffޠAaR4! m7&d?pNo_'=g(g0ol(Azw R=y6do$#& 燳Ɗ#/-k,F""~y|J>)ypQ<8T;HW_:X {P!Sp$9Q5"[&CFЃ2zs(*YUZT:%9*HRr~%! Dw(n[(pDGN0CTNlxPZQ*Wk}P];я.sd?#&܌]/%z7^+w$S?w}t4E{zm6C-5:;8lj@lQeb`lfm@ާzUh]wb'Pbu:#(!⛫r;`3*6G aPXc26H672#(P( m#&L\a&8$<0E#&C_G9/h6w h&1}29~)rAF;&W0MZtaLX(2FLƠ sF<]20mFު*(٤q6 L6ӈ89p)xUQe8ּo3Í#ffq.1,5*2LS*4#(c#( ֌njPcրwCHʹ0UCy4HؼRdA8[0J3#&8gPcUwh.AH^-j}z5#<9N-"`j0t[;#(+`*d1!3+Xq~눬 n#sl),F] ƹݙY"Jwl #*1G.qAQy>qʼnUd[ap̅0.'`)T=zD^Jؚ!DDT9"(#-/'ҽf/1quib5[+2$^ N?C*o]1ƪ3/.&vIOgPR:Dn#*䠛yőb e]Y7/+8,p<;$W($x/LG~n,9]|Tdd^Je?hu" ;#*qh#%K[^[ߪ94OB`=K9}H>ې;Ҕ3%iIΕ)$Ӽ~zw]y4oE*Æ2CS#*1pe3鯧טkp-ynݙzcӷCnJjm Ɏ@E^Fr5/ إi{.iF|v3/huh Q~Ac`I`OvgPeR˂#* `8#&@ueZ %L[hj)+1ZP0g#(ж%}U_h_'QW9uWCW@h}%3Px`3Oȥ%[YpF^(AF1M1dvEj@%ӏ8>},y},nb%Gm9O+kxCUB$*dQ+ SۭD:n3^Dp]}E>2_wT;QhzGv0kս4ۖr}Hqt>#K>BQ72I8xLjoL3Z˲(q=ν咒zjPYG`qa! =8f4#(̟ЗRv,{[O:"G:LA痏 }-\ h1'Ꮌnths2xܲ#?#l+`z$ 3`קk}̤!+`<M[rrWo rTx~lQGW}]R7120Gz偁ݿ#(zFV9ֵ@/4;^4mG.hwnGi5w|?Mck+@sqn x㞠B\T9,Q\rgѐ'$R \d,!D+Noj#@Dy }g1/59$ef#VЛi~y<.,y|v.]f"EMͺ;a:35QU+1G%p/omL2 }٧mzH|G=j^6jpDIaM%gR}#(9׮ Zr 3 n l!M`x{.+ATwKdQ|.y#*2WN#(j,YrCo.޽"c;{LgF;獅yPٿcFg6v>nѿQǃѹ#(m}CcɅcbP#(i Pɮ/g{GE~!/Kcjь-cmlmM9Ļi))\TTSGO $/}u#;LγהawD" y"YǟMJƧ9,$OJiZ?`Ujoۤ䴍"GNvY C›zǾ@{3L#& ]Huс8nS5?∙łxS0գRHľ~[J{du"T)_>Y5"SU#*;@4*$9tcRi#&H#(Nxƛ\5_LZ^cֲJ JFR^\hw7uT#(*L6Eeq+?m3WmE2xfpEjd2t6)P7;ǹw>V#(>GY#MOKϒod~r3[6l#ʪ5/]LDՔKf.GK8GxNv׬M̪ܛx5Ʈ]ƺ=Ը`)Bj}٫Ia< "T"3kW#*78gsn~΢BYʰpyf5h}]m%I v3dM!}S\*xr DCTzheZE iOXbmvd#(dqṂRm-u^oN;k3qyP#Oz-uKW>YӞ17ؼ9K-#*6{ѧ{A7[y6#*:g͚HĖ9M3J]U-dD' Q~6M*97M+l?][޲՚h|3#P#fTBoԭV}DBŠhOŢzHPJ)!3Ԋѡ^HRßeJ6ta}KQj.P5Eu:` x %V:tk^x]zg$~j^0_RK#(iX} xR bpC=9w}{phvYI tɵCh/V 4~WTE[_#&vVBpfXVA~ qvn[S#(2'pggiZ]EMtPltmV3pW1:J.o7B tk@1yo"6f sNp,h#*3՞ Ƅ'Mrtq@g }1IOlOE_DUup/ \/G/j9*[[s|'|TSE'^HD#*On}7 mX^9 G찊KF;ܩwjW\zX迺l`ߩ#(zTK@l{XӡkzxKр兵-sUK>|C6{1?h^NSWX@}o|auƪ?^TYokDJh[>[kiΏ1m5m_)#*(i#*(!U11DX2RX. Ź|9RLqXՄji{eż)]==,{o';v$;rztv6{W+a^lU'S:q\quxqestң~d_X:(R=rz]2Ap;m`K&چ6kZGG69a5'kxZ#*'55,$Ųo&R%ZB hj ku#a Eu>]:LH|xck%>'+ʕtG;|h~k)1Q pDHSub PaȮJ)j#*%:ZweO 8@ @./OGI6FRq-<MhfX:!zy2#&*IE#X]QR{)=%jZr|y(eY=#)q#(C .[d-="s;u:>mNl<Z3IݾIoJ<Zu/M䶈U3D {6Z"Ť)DvEbf.uNeQ3U_\`-#(=rbhs8սluMd#*t\nzB)r*g&#(P_Fo!1GE C8ftvO} 1aGI.Q񯧋Zue8sK]5W@y鶷L%WvKmiY*&G3Q3Fab]He%JCUT<}EN ˂<(PUÃw0iY+sG0d_ΣYڠ0J#&j#(-RWHH(r9GH*%/^ˋtu5&zX{V]]]G9HB4,>L#EcTE!ؔcnD:*Sv\7M\Rג猶=*{J C Ȟβ+z-Nxq)=6Ў\S˵Zj5Y ";Drrwź|}9liT5p]_Er4-]&BĐ_ =]/9#(iH!:fDS=,j0&u?׋%|ppMH0(7MS*;Y1;*,#*_CzQR#(1{֜8kBJVSP-yqk:c+W K<{DD7/Q:Fqh= 6#(|*^3#*ȨR(CٶQ cl=UG5jRR3wttp?cɹu#Ź@/)?W[O yj?͢62l:-\aBYБp8sLOmig{oaXYOr`FpBNć`𦔴vtn^;t9s];I_1v: ;._qcEp)ixc5^HodؖqO䂭V#*fMK4{Cq^90Bh]:7Ya~݋n8oƊNSu.vҧƼQ>4Rj #&1kP.J: J2#(Ut`_~ ʪ*p"qslude|0ќ<MWT~y#&'l)*[=|vDg̞:c^ .B#*O>}=^uڴT:)͡(Õlס;Y)8"{k_-BG#*en'4/[iQÞ+JC3W?c&foKL3R' 3$#*7(1@2r_H#(͘8|.zbͅVj#(@ /?/cۘJxUOܝ>J[WvҀ#*|d'? ~`{yGR`QOnL)z=Vw0>tK%&DTBHMui_Q)&ڐP3טx08-#* | H͎)me\ 5c!lm#*ZJW葬}:?J'L1iگgVlfwI[ ;/HbF>P>#(!XQ1Z{cŅ"_=mCu;-6 **FP-c&Hm(PiV#*v?ͮcZꃲmt|[c{,r1#*#*b86Ѥ tVG6=wGa_`mTv #(PaxR]\F!â)ba{HjAGqzPM0;H/C댘I?jQ P~r&\0QsBcJ#*|` kB@ *2( `u>Uz~U\J %Dh,@#*߄8A~mA4P#(Q[mj[G2T>H3ըC>8٥9 aZ"{iQ{b=p*!#v趨: yDTkvD12^dS,Ұ隂hp/ep &A ?A%#&oEuk(~fm7ݰŶ;OT:XXӓ!0Y|su-څ+_J N8߹Ӻ=5f]"L+*,"J̀RvfVcI4ǖDxf@HN@r;Ƭtp>-M2p<:E  5v\lp<$%ADh d;G.ѦGd{7öռv6>I=#*PfTؿ[sWx25( 'V@vB@j` :\vE>pqVfN'g~>ŚiS`뮳O'[x'0&tS(cf#*qQ?La|sqɅ#&Cv0HcQ硺bk4@n! `(Pٮ5L#&og+ Jj**;@$y$XSDIMȯ AcLMQ$&@7d1G+\wAARV>)9* ĂEF/kqK ]#*#* 3W$ŵ,4)[L'5 {u8xb:⚇Ay͖ 09N%n)|=7NG~qaq/8!ՒrNn+^hOXJm-/EwrO&W?Hs\xvѕv2&/pe0T:(pK`[d#!C;D y"γFuS e,R]]s}L4KF8sXBo ~g#&ژA CQKzcѶ(E(y(*nׂ@Q1BBJ2<AQ@#(-Fpl76cV9P]tNag #&B,دDŽȻcv!%/pIǯH۲|uGA5e#*b\U#Ih)/1pJ. C.4 ӸCAHi{;6E#(HW4dV:M!V땄-0pW̡3bnM8!:5}i491A{-gUאz#&E6 ,LݼO 빞_˒p|"ңDxƑ5#(#*{?=tk~N:Mmrj@In6_4ɗP#&܁habtfXvrBƿ^'7Fa&wahqb{H58]JMZQi"c#*m9k9XnٞW2NS,1ϥ$̍i@`I9Ԭ@#*\>Cı){!\IKB1׿kʗoߞU\gXR>OwMtzA:!SkR]\b G<zR"/#\`{m:2h* QBgX9P,dwh?? =M=bA8@??@q}ɺ,''#*)nx)2AKPiayFM|vGiINq})Nv:`[jBSb,7\wzX|/˙6ȏ4{s/CaI %NE0ulC"34Ϳe_߱?;z%PC~aw1KͯH3 y{0d_Գ:&xè11÷s/D Q}]ߔgȨABPi)onIȖvC'=$ǽ>|HGw&a6u5ӆr#&I6(?rY5d1snwyվ׍"o4UɪAI0vjw5r-%U:W,C0e^OMJu\F\#(2' $xD2X5bCef4U\ Q;M#qNIca8#DU(FTk+X֖[IVZ @`a=ɘOM-5(/"rPöt<#&ihHa:~x$ߧ͢ʕw C'Nη&D}ɹ>Pi>^>YY65b(Mi. y%3W c"k"bw#(=h9%,$*RZT)(nhSZO'L%m#(; #&:5"hQP#(cnVm/qbZġU@"Cs'1qwNTE*nF(Y6!ђ|Wbʙ㞺6ᅣbEB"l :plٺ粻!zs@E+vΫ~,YDzO! (!%-w㳆bN$4z7ĢN0@ÚS RÍEz4`::U=HkTB06bn׫ua!E;Qx[3#&:uSQDEM^$0QHP4bƀ*R Jɹ5](\m(Nr#&9r(ݽ-#(9 `r^4{1{X)qƒg6О_*D@  pXd]#*gu!*QZu\Ad-s|'O) 0 25qafǜPoF`$#&pPK\ef4P^4nXhRn_wΌP#*_* Gwo(D488y `P!^ L EwHK>;Ӫ'Z[xxo/ĶŔH+N#(<((Ɍ!P\4=#3 rl̍ơ~7e)&4h[d f/f0Z P)$ \4ethbӥf粻/d,{5h\}ic]Pkxn>CO &ψL" 7342<.LSki}6N:wb4ۤ^X6v-p|\rI}^2XKg}g% f(ՑH`CҖn&IWm=5R,X\'lI3z.H6@58ÁP(!#(߷I0WxϕRZсCL>w@ڇ&NUF?5=rlINu18u+xXz#*U#-8?N ́:֒|͛z-<kIk"*; ZF}]#(@#*)qk!;zv##ȃc\M#(Zhq;u33 h:lk<\뾆-#14ZOMuRi2bfm|-zjP$IJhrBCɹRT։HhXO.dՆ5u{^NttҎłj0OIPao*<N\|:IPMoŵ~ ~ u}ɖl$3#&O\o0csY$$B#$P ijZX:TL "*ʎG1V Y,!.)W0EH~3ѹ{bb& !q_Y?Wg tָ\U""7,NUKAbըr2swDVW59-cG_*϶f#&m -::s/N6fVql-$bZyA~?~}JPAN;7|0#(!E`8YsyNj[G:k9Û#*BO"#&PKb7(ZJ_WqO3&p( B}lc o7V֧aˮX=wh&y ]HWK#&c i#*JP\Tnݟ-賅ޟ_RmBӯ;vQz"vԓ"Ҥ@s'&@-:=h@Ն4nd.#*#(}еo$Xf`vʿr#&PBCHۛc=3UHZ^0xn)km6팬t[PjŐ$'b\4Lzg-x?c OMn1"PA1t+F86rwo;\6o8]mځ#(f$媸='n:iNV1I=۰Y>JW!M"5HNl^z5bI~d9 =d`?FO&#&xu R#*YuPpL9ꅊ*8Yqd#(?Lg|ʽn;qx2;)G.(~8c#&b3ك _z#& cz;!sEymO[Շ'#&wmDw:xzx(t2!ݜ.Э2hgflR7dG9tNJxkF͡ܡdxpEP$ Hs@Õ>ɰ0gP`@o_On< Ҟ2%P'p͙\)W=O:IU%@T2!;XH/S3ɯ m(m:;*X{οd?lS["-_4*(ڮggƳpt}:^{XY#Lrl=ogŮ^G?k=$.k'pNT?(hQ|Vӟg͘.cJ%$zl)#8^(w>]Vq-,X>aӳ0^jqm)cnVq1UTmǪxzۯR.?QZL5gɻ!@ ,jO0b-`Ha|q\2K%0%jŻFTi84B8%኱ާ3Gv-o:od&9h}j0AƠ+M_PWM:t?~>1_#*'UOMNJ~Ic3+h';w9YxNǼ3N%1?SÆOa9gF#*^7W=MUUvz7<ڱ{qEYoxJtz~h곈b#&!qqg#ҝr9šd6;A8i&/KcG[6> '']{~x,8Pi:Q$.]xI]+V$ZaX=W<#1NTfX|AcG4`nTs_SGD ‡?Uӊ]qxe,giR~fw,98mV"Aj!AH"%G=*3e#5ko)Eus7b+2 rVݜwj [.~]'xEI6n?d?z%BxN"Ds6.X3L7,ߗ>n #(`^,w۱Ph#*g(.Q,1tӅX#(Xz K[~y# L<#*u<_Le~i]سᮆ4A IDt Y1#(q-9r=ӕGZ8`?sa>C(utV\(ęjO8=;Q)ѕ#HruGK-iӬ]E ,ozZve#&48"ލ6X"70,)^3~u_Z(AKHq98 mgݚ19oUi(õ%s^ D| 9-)j>:o:C>'+<݁½5jqz#(VKdq2 ZT4`[}>(|QQqaƎvx@2W#&ޡa;Y9?o|.ȷ%s$-#(0~JOsڥ'QŜPPF>N &Dx(0#(Em)#*Mݹv_)>MnO$B-SVK`\0(^Umr$BQ:`#(xJ—r?|*(a0'D#&Ԉ{=rY:UD*N@vtP/YPAaM(=悱g~oK~qvyg!юӸwO6_F0VB =͎_<+ЮԗkBV3 1elqCqCWW6M?dKoȲ,7 tK@‡Rk-a#(tU6qtя;ޭ:.A4oglQZ(ԗI#&cR_r#*k!;ڵ}Z% 'zf=yrZ#(5~\!|}Uvn^"GpKQ\<Ü@[ߖC(iKQSJ(R-DAKQT `S70$*GCK~Ai^#&]Q֎@s̸@ FPnXRXLk lg}K`疫4TqDn= B1DXH&r"H#(5SxfF+mtX}#&&1A?#*2#ڮweqN8jPT3Y(9A TexJJr!JuRH>/]~;_IG8ǔ@` #&X{rؕ⚀4R~v3 (n*/=6n'9;NWM7RS\b#*`(S]6;B8koeΡ)Z)#*4&=#*SmLz>:Q8=T>KngT+J*#p}Z#&tuڔM5oB@ΊJ%EeMd#*d܈YA}9PpM3lahpYUJ|x}M(zߙݔx@M"x^w25Vr$CAmP'@}QޚYw:]#*%(͔l4>8@?"HJ"U/yٸ9;Z#(O~i41PRI-R4ymgQEοUJ& WyS3T>N7(:TU`l,!x {M^h cakX 7#º&SW*~k1mcwM#*{^VܬEPLutм3W˥cQ!g>o;|:LG&wΑs㙎뾪~saᆮDt;~>XQngع1+&Eryo:iS>[ZV2ro\ z,4!R&m$0x5)gloೆmN4.9 +\x#?5~Nns<#0<≙>}ǺdNTˢ2OvN/WsКhvlcX)1mnK ?wH6*  N4#&W&AU=6V^s je/2!]|yE"R.ژғZ=:&՛#* ~_|H$,8it"z{wN;Bbz?%O˻9B:I Z2Yl鍈l]#(^]\7WniZ^ Bl+H)~uUހA:A;KU.E$X]y1((֖9A撇=Qb7!k- |eX%*JmAə!#('ˁS*S}v@it;LB#(6s8JoҟX nohдBxٴ=|Eք9QzJD#WTsu@8&#&ۮ7DE#(ljw[j`WHZS<=4d&@i">վ7l/u#= K Ö΃¢#; ;פbahkV.ƣ3ꮼNP#*Cx\:J_ԣLuL.pR@px @1 YG5V~G0Nr֦o*xfͺ&:Lww];e8\E/+if4 ҫ}ϭi)#(q)= UF:v,65k{.i{E"/1ˤ)ؒDh#(ᓷ,ZEզǸ5ytA@y󥯹O6Ům k8c"?`ukw:][y#(~+Ȗ/1]/Ծk~@S炞,hE;QTਡqg(#(_5q%N$}@&!IeMF|-h£͘i!Uzgsm8.ju[ G#(W$N,A6S:#(.6x^"j!g *B'v)fR6n[)U.H(ILΆD$Uj>V!j#(R#&{fʡnQ?'V>xֳumۖXQ7 ՑЃG__|,=Ԯ>"]2w!^#(Y!E2##jZzEF<jqWB|@xzY#(4K +yAQcGH(*yeEb*>LG3[ #*2vv#qqza#&Bn=r#(8(N2ǁLpMxj R@)b#(G6YsO;]&p8z#&I(Ǻ!y,J92q#&Y:K -8U::XTWTҝO:Cb (#(n7 6#*lD3=(JjU4>iV_;cTB02]fC#&`WEbEo$5kt6q0}W3X_}uBJXa Դg(m+M!VVxi |WtQT\ByWt|fO~@(OdX 1HA,~@(O+:#(EfH #&?5Als?Og]nvfXmɢ?P(8_OW[ bPxn`vJg9$IUWT#*.\>Q7TV^}0peɁ0bxk\ڨf Y9a 57#aX2JuA1hRQv eAP7ʐ{V2~h 0s9/#VDqwkx#(; 0핦:`DY#&^ׅᮒ}X^^<C(#*;ʆ5*!5d;l b+O?wObvVD~h֎wwﶇ#&I HE Of_MB6ȐCNneVŐ!Ԓ=\L-kEiRjE* !) 4^)ir#&$#*#$~'%+ @|%W8,)R(OjE|O"B*X4nW9F:"G#(oKm6fs[f};Yg22@b;CմJ3|@q[R2|Ɠor@g7x!Jc;J*]xߦu:݆x34vo6Թr;,zc VK-!!)^]*l6يhDܝtcQ{0ATṬQ]%d5AJTgyLIa#ARA *" 2,r)BLi3v XrOl¤y5f}axǠ Ǚc ])ĺ1j3#"c]?r`<`#߻Ít묗FJLi661K#(_:[MB2FdODq]swGf3&W M!'̒HI3umRbkY 5j˫-{޵YɸiaGo5F_߆q&o{VXѣVC[m2ˇ#(AeA$T#&>܄P`#&&** @JG7ߏ#Õ~;~[UCZ"#*$o^yw)/_v׉}p~t KC!˺ЖbBBAwMDՕW}&8p'<̵.Qruv[[٬$ rQI}d:ۍc94;jp*ǀЈU+FRSYۢe{eQ>\4sғV{);c)"~Ʈ}rab&<',t>#&N( {kDH7箝#(ڔird #ToX|}6:a4RO+*0VJˁ_}r?߬6i~߉ӳU*JRDS5hSF[5][d#*fkt)@%(1?nϡAv:}H!}pWX! c,O%QKFA;@dnl;, #&8n6M|#&@]`) ?-{TbEr#&>!{Y[ͻG>n)(/\B--zRϝ#*K X}x1~<>f_)=9#(×0rE,Xs}-1;zNT[?(^#(ǐw+N*Q8##(ZL&KF y8;Z0FǑ3%hGxޏkO`{ɵ PQHCuЧõT=% 4@-KJHĀ8{#*nП*8Op 9]- ĬcCv_}- BjC֦J$qTm UG6"z8"}gR)#(am#(;9/Q<&Ιܫk,F\sEݘ"zw#\k=U%`Cm:?/M" 2_c<+¿5Cj7E= :Nn$87#z C$%DZRvJ!fDD|r$O!3#;vbN _犉gcZ*bR{=db'dEQ*B:yvhsx-1_Bi{"#ӹ9$Y"#* ;3ơ#*(1Av6UIVnJAs=r0R{a=ï[Ȗ+UJ/sx?c=!i#(`{F#(/ՅT(SVPژd6aTcgemR£&9RM#j:;y֦#*q@)i4a6JUl8®`Q]Əy*{c;lkA!+T( HBJ~p4Ce:N'o99ۥ?,N ׋Wlhn:?HS0JP(PZ8}Ug(x^~kLbl#dš+51.?:1+3I@0% !wI#!,1|  ME6H DB^$@$ "STu(&GD7sM@CF5ٗ261;dRdH6*}kԞaSq%2$`D#K7/= nڼmkz٪ϧl 7)FjMkxm[T a%Qw#(Sl-B,P;C}Y_?wMTTQAX)0?%UHuu|(#*I˳즓y2Kda0Ra Xy#(l 90V#(۫ZAMR<eLS7p>(>Ll#G,R:G,qqBt~9*֤oM0E>`P:>?HM׻b<γ Paѳ% ~( !kG!'Wj%Ɣl+}Xhs`A,PRQܞA*`٥0$͢?OW#(A},VdW,B{OVF7f"%A)Uh=g?3UrRΆ?L}ڎ _lR>#( T&I}([ʅ5Ĝ=BDIsHb bK :{(|{3?@<%ZE)`\\v~fDqsW$#&3Boap;#&v'R Y.L-t1Sbvh=#*sa$H (d5S8|v5x`fuWKSrvY8(#&|c}^ۋ8(7QĤQyD*#*WI&p~@ 1$R~'dYm>(mFDؼZyw4r#(%Zn~mM{@0LA"#(?YN"{lQ^N{wIICp#s0r lo;UϾ).‰~g~Dͳ>#*Q&5@ZIr ,}[OT#& ^R6Ȁ#&x>(ψ;Թ>$h01=}KU٨)Cm B XQ߲bRiOC ɍ<s^b\5+Hi%Iuu2F8#&Q7#]zt&xh:өɝ{F<]Z3JcI)E>K&\'֛0K$mk#(#(EG6giXܩllY..#w/W#(yێ1I`Nbк;l=yw!t!/C'Ӄ[jj @Ab3FRlԕ8N:rhkdS#*KƒS#*-yw#(`a\0(G`{}C~^R*љ^[Ue9]-WD}U aI,dGz&ol~qY2FQ?p_=t>=7[qLʅQ\oQF&%)!&ۓ"P Df#&ȈȶY@6G}dS!rͤ#(辗krߥ4)H~:j-QO;ƃ?n;}~l`ѺT<\~]46D9* O)LGj58x2 *#&z Ìcd$DiX4ui;*' D3/!wec鹍nj[;u+FQ~r S0$4z/l̘)ˁznP92_&1:GrmҢPKzn#&\p+96-{D>vۯitl+&ԁ!M6qʉIeQ3#*4>)NWԱj$Mr"8Ir0]Im+`F7GEBC/~#c#*8(ĊH(37>f!^_Ko<gyQ( ގ~#&<>+[8"dOͯ{nN-#(xUUáu007fo?=gAǓ`q aNܟ]Qi )0#OиMIRa$VL$#&x*<(,rYﰺ#(,_w*$وT]-v?7j#wcخ#((I Ddb'Q#( fYpx "JjTjl,&mSc`0#(:saݐ'~hSY 2qNQV!2j\tОeP !pz.I߈i%j8VNWjƧH;?G'&0f0j`,Mb j3Fj @E(q݄}C73#*fXWy^<wK漆 `3љуj#&dxv\5n |rѰ'iT#*>=~'ӛ$)ћK֟#&Y3R*5]ZvJ$w)$#*FJ(1 (܅0:#*C.3S&P韰`D%#i+Wq#=)YK]f|U#($8$HvTA*۳؋xOʀn - Gr?SKßӡV"#ˁ;{K>A[!ir,f?Y#(N&a/H"d$p{1[j__wD/g;?LWjpNv9xZS۳n 9՚Y$==p68vfqpeA:CA wlЛQ yɌKNCzvcC3ˊjx1Z73`= I58İ]PUSFWC.(@ޅҀNDŽ{6w1$Cf,B{;naw16R* N1L:11#o#(:AŭMM K]CH\] Ȟg#&#(9۱&C<=b;ą#&g#&9 J6"feڐ& >aDIP{=7ǥ:x94#(nl1:<r׻t=BY72.(Cd J#*5ofV]s@8iQ]j7 TzMIޚݥ›bnIjxnJj!$8>DkK^"96oF::({9đrScG9_яd#*QCJ0G@oqx3UVܦZ]n<=k&?z5'!$5Gd6:!pT(j4D5{/e;]x}QLd$'/R4-'23=;aEs_Y[yqfL6Ȫə$= y[lׯ[Cb՗9bj $v(\:aԽzwxSg n9/a14{%3ND)#*#h ߎ3[%>3#(`&əT2DȘB9[̭n>yvj88 z:#(2v선@Lݻ-癌l[ywwvL-y}wAX˸-"MR5(#Pb,%/4kfcXwX"#(gl#*2fp&!ae" !D9ΓGy`T@g m̺~P#(#*7F2U9br @3'^ۧU#&=m#9#(kCG$$;49cT}Tj͓th6m) mIM MmhM1 & 4vcc.\XuJ($2fdqD{QpM$#( .Pg?;;q8cM8x߁#*SXk Lpl=Fe 11hfBAGcћ@U>ۅ֙0T6a^tU4ԨVI]0".Z5'oy)`E(b/=W7 tEY1#(?Z614,H*ifҍ痎{H&)aW#(rX4QRB7p1򋝴m$6%8g0kd5]lu.2["%5X&2#(s|>I5ޙkr"a#p*™qpAeGp;v#&cDxE$K%iTI"@wdl/#( zIp~=sP}wv.^EЂxao\<#2+ Tc=o⽏f#(r|1ZZ_A7#(}yA- IC߰15^z.$14,f HL@UPvުgMā*%%N#&|%`!`ʃ@ |y)/!Ib`)V?=nSQ*9D#&}EH MS3E H?#*:GyҒ27"`4ud2H)"zR-DUTTK(%/(IȁsyW}l.T#&4=P'kl!{^5y"i$4nNt@UCP~`#&c% ch" ! Pth1RmSps1#&EM!b H pPP2#*IeC=k$6^&/<6FQ3i20qɬLbl7CWWa1}15ESQf :xI"q:malQU\[E"Dh0#&!,Qu2<@&fet2wZNUUz q ?E:d8 |bmT{Քm+W-KIfH$Q*P#&悀ȁUQfj-XNj #&<$q%ܦQz$CLuJ? ++mrIlNXk#*i4`vH#&uQMFa0EwoܯSoR]ݤ}xG:;J'uEh *ω`Ԉl_LHkWK#&`$T=.Tа`{_)Ȟ/?˓W&I#*4y`=1c-`㐛PxF%#&Ӊv ^3%R*Ic +#Fae|6}<ELX"qxWd##&`H3?8p=` %+#*GkVk+*Kz0r0;r%sRSU0I!]`\=I2EBH"Q*KMԐ62SK#*K`~V*1!L#(c\DK_X&J=#(R #(0Gl~qa?Wg8#&ڵX;׶It u<{,u9(=ێ`8UHRwO0Z! ;N.րQSdNk*/ RQIjs;QЂjO:L| YKх_1N#&3hX6tc!a+OUpH>.]f乭Hz{NlTa#TS$.hwtQO7 dX"",h2JIlV-615+b5XiQLZ澽[>r#({$DH"22"H#*A h;P?#(V0"LXÝU2`<42Q$̌hX2 @tU US,snVHDC8$Iqa xQhCZV `%IdŘd)J*WM(#&tvVT kH[*G`Ɉ2`z_s#*S`.6BP`wGӎ22 !sTi)͹W-vieQQECP "/J2DﳎJ@XAdQBo|>nM4l_BzDCxu v) 烰B#(z'׮ 9HDFHY_/`J`1U a4DS*#*)Q(:f/}YϟHRBk} _`@?LPB[nj^1pʏZu?)'sH!C/kJ]U;ӭq#*s Cd)CU8/G5=$RrR`a @8Mt " 4i4K0M>'.:Ȏ#!l/<v _)R`vaizOfuٷ7u<#*CO·=>#* 0~`JFW|{O:xLm#6jj5c4@ ߋA? #&SN>^ k'#p>! 0_y Qa~ԡ_yͮoXsɭN@[}Gpv>" ͺg=#*T1"; r묔_@2߅&J͠/_vozG̢gәo} 0#|sFFo0qzGt]Ou7یU u=$Lh8Ę>SW"=1>'ؕ?k#&B7RR꼶la2lUPb7R7'ۯv#&JGnV>FK՞$!]xg͐}#s#3i}>5NZh}<6r/@_";|5r=r|=5}F~p|sb9ȉ`=ϣ%ՙvpF]mzPto9rײ-{t=Aݜ(NU(,b1d;;׭p:bc^=ĶB˳B?BLK"d9^fwP/m7ʼnɄ2PC$>Tԍ^}z$tnIu#&3cdF 5 }:(@dSO}];WU 0$b֭Sv ")HTd"lvNYhICEF!VFh+" i*hd!u7q"8.#efٯ.PTHּUkhj[QR0$DIcNw\J60r@,Y2Zs[m}#*fA~R,6&I|@0 ЉTA#&x!훧0;h7L2M`~d N[/&)FyS’LYXf%sJL5<vZ`#&\8dI@E}D#&m хZ~L}7\˻*?lD,:.Kdxcy,._QodhKLv[}AB${u%tseKUaնITUPjB]R|G ĺ[ɲxf5HAsB#*^'_0ƵL2©>aϡ~0@1#(xUG٣:a J'qImbPH(DY9SuW_+UL曗+}8D#(q.L.jJx_ha#(Z Rqܜ=+n'!nRA#*>smP>g.c? l/50NI(\9bd7kar҂ªӷfd#&#t [iw#(^|I3@Cau1 @b~F0HbPI*gD:pf{F>aDO+vp4憲lh`v:NGUS! Xj/Zڥu5CO}8pM;8%fIvhlN1W"JŘ #_CCf=mz"?֒x{O}3#(,uֲ6;#;rlSI6b10eE"P@} TkMʪ!8-5ֈ@ƫK.yK5ck*6J!czƵ,A ɔ`V֩PXS`#(H^_hT9&x[Ɩpg,,9#*f^ /lДV|-m 3~@$/ou8ƄĚ0!="96koL"[}R󵼷f sSk.L`\ڊFeVQTQJ 2#*%ut*8Ed90; 92o[A !&7CWq)#&XMX4! }xe$3fXNl4JTTA %#*a,VMP{Ԑ"'rGOo;T3G87shI5|lm{j *s(#BdM:QH^`O80<’EZ-Qc)f!F%XfC\@3>>`CaHF$I Md9bIPSK#*Y*\#&7\#(ʅH("!98"uqn8E%ɬ%@ot,o!ڊ́#8= כ=j٦T wy89Db~ˁEiTO}M&MLf\VV-k>N=ő!$Td간4O#*zOY )Rѵn$6jZQZصZZ*QE$ #*Y2Ca9tD}g;#&ږQ#&>ey9VxG!HBH%2e,ڙILblZL?C35i ҥ ؔ)5#_GnPɭ&,L#*dfĤ)LQȡH)&K(#(Q0Z*ThE03ɃZbbLh2f`A ]O kc#*0vfM]`vVk0Pnx05`pԖFG# 3Y!s.:ٔl6ӻT?ׄ`Hdq5V.h#(}OAnmFvUr0YE6/UyUJ~kָ70_;I֒S_0ۗ#(6 T0рk0s1"WuAI$I!V,bi`"HgIE*C #(-3ןbYa+b%}1i 1h_/cQx"E#뇴m#,'jONҟ/CCxB)w`w d8>!l7.2z[D鋳R=Y>?_>nh#&~(FVƠO-4\]fJfQ(}FpDLF#n[~wrCq:J8  \e4O]y#s{B*k#(34OU#* AweKlȵIbeQ,FġCN;1. `o)~>41A[p#(VׁWf:d.IG7VK9hxG[DlMvNWN` 0F,oWNrݰvWuBHD{j}">t&|##x֤pfa!Z2:H35z}#xfwÙ!sp#(Y!ѣSL /*fTCJXf6al32v3#*mjfٻj­~W!-SqZ]o}a 3?W[NH6]Ykff5f:mcXjf|nwXuirY8fqz;F1^Ѷ l:H-4$].i9Ck,nO4Y9#*{R[&*_5Ќ]NRW>G]*-Ήl$jILc'v`#HV:!_iM\y'[2ui&>x@clAu3zXY?9C1$WɾƟvOTGF1`6FS¢+&I!O}Aj!v79ӊI\l{"yFgWWN $=4(t;mVfQ8o Ď,t"vF9ckDB^&8:.UEP[aQή&GmNa#(6s1wl؍>؊guDJU,!lShE#(;34#i0&er)d+z|AnX9}LZl9$2BBeYUǁEn4W2GyeSj7`4$cdfq0V^d*qutS%Q+qr#~#(f6Cڨ#(V -/qWSS@MvOX 5Asq#& d*mT싇Z3bBgE9#Q`#("u62v\ig:0;N@Xlhyz壜g).ZL :JM 0u5ژMWv0撎nf#(#*mwLj͑v$7W1ý.`WNk't8LENAtފepxܧ9V)$8#(V1 [~[j龸 h X٫ Nuhqf]`V2[Ȉy-2D=uknd«LnݑŽMI[֒%'yRD" u{uQueqPK0LʘzkgfXH=A_xtSኌ+4'Tʼnm)mMتV ۍ}%]N 驺|8-WW6|*8/Y s9YN>^XlYp咳Q0;3ZɒxD#[0}f'D^eKGB)1A&jr46i.8Tq2Φ-V,aΔxǕ7Ll&1qK!gbCۜ[s+UiXrb#&uBNV'4Z 7]F8%^A췉tΗ'KO(PSBCd0L fʢHFqHCt0(`Nx5⢇2gdlY =L; E"Rc)48/68j`#{)ԮŒˌB?mr~16az10' LrU~$#(#(*24ejIiw e AҚݛcHAINz;Q#XM)3\ˍ=ud$YQ#(CGiSP}L+S>~(x $!lQFkcM24mbWFx^'7{ O+EOKu)޸!.*톮Oi:DMDK"6a$ PIH:pAy:xLZ\A҃9*e tZPS#D~`hH{K-0bL>QLLǝ qPV[Ƶvr֮UҗLX36i1fR@l@#&0.!1e"khs|a:vfi]pJLmչ3+wsFiC{͚pÉXO(Q#(iAaV8+h#\}!x}9Q Aӳ^gyG붛׷k#(hi7joEb(e7&6 jbfbz&v0cn#*Zse:1]q t+ۦǷE=xW`jA S1c'GiT6q0fg %;9| hZ9Yr&Osvz<+A srج{"ju,v4!~PHKTC U *M4ʼn.#&js,4n)S F"b\LȣT $ (7fN2jhb+@A#*" p״,zCΟBA&}4E`+tPzZ?*񣭰KGXN*yTДFjy"dFH׊1UmdZj@!zrCՌw|SܹXX#|'(z,j']SuZ7̦0XȡogM8k;fLRdu$+.f<1ȻgFӺll8<9zU/dآ0_?"-$"1a9DzٺREZ`0#(@)Z6G_%i)Ĵ##*4,h`E,4$Y.#*Rёe7RXau?U; "2#(bTT ct^sn]]u—Mnd6Wi5rRhteiue![V4 !#&e?ߞ*D]vWEle5k$ț+bԊf]+K)iZS*2F;UhٛZЕM}~kḋ8[B- CpLK$:4N#&0S%)U@ꂪH+;c`85P'ʯSIJ]H^ \$ bRI(wަ'zDfy9S~P#(ZD*V9Sdd'Mj 'B) $tջ]|rsu#5pe}5z.z4uڛ fx^ qxPFiY@1#` ؉%ٝlK`p}5#(C f$#FFeiq;OΪ6bR94/_ #&*#&#&^G̅r="mVQ#& FW1/İeAT B#*"DDQmfRzDI$5j%dɦhf*LiJV3Z_6Cf$QSE븣im'[vn݊*b0Lʭ2KSJԕb#(MnBƣI6AV6KkmHe׺KF$Ե< KM3*jjeogkmho:%-S+՚ uFLKm xD"\0441ݷ|r#(/q+N[M7Bva#(5(|8Ke}OZKE\9.f5oeZ#*{LԴ4ԥ5R~]~_j{+e*Ͳ#&Yt)i*BUtܱjնXt*&tM#*&*DSDն,ill,fd}JQIjSmZmY6Қ)R| 1ZfؖbiJ!Fl43E4[[("ild)U&RmŒ6&՛M*BRJL&&(1$"FR0-ZVLi4MJ[e%mWUVZm%IdV͚)V[jWW5EŭK`W5$ @"(bI(4,vnj&%#( ol#(`=3PTጢhxdn*l""wm <1'#(/oˮ$>x8y_Ef;#&G#&CtuǦɸ#(~|cnͭpų@j RTߙJ7iCRbu=S^Aocх\7Q$"*1FIY֚,Y|/ `Rsq'KX'PXX j5G;ְ-qP:E->ݸ̧!Yei_?lXّ`(BCߒU#(ؘxX^[}PsC|w3%hon>"Rf_UC`0~hIV?~g#(HFtM*C{dR>cpnh5i!]C:92ľ̂4d~wLI3PiUE"@#&#&5T`w]W!puoQ#*CHPkt#(V\^U C;%<в+ H%(1[(*q8vgI;&)MVեh|Lt-{=Y]#(>n5#( PhȢs[kUĜ#*PPR)؏o-Jeb4i^tUGLʣBQnY0*nF1UX$xt흽57YAI9h呐`۶B3 l LY^d28mV\M۞v0Xa>W!)VU&F#(t#&67[tt8\z4wP3mޚZ3=#&`!=nTht=#F)0)#҂ yMn^#*]>v#*LZRp^ܢjSYR#*# H#&!c#&S}mn Y=.z#(7q鱽0çP-I!?i@0a/WL¼p5ƚo^shWڏxBb!bk}!¸*ݠWIrB,⼟sχ߇̞ tmֲm@C)՟$4ž,bA`[ǜBI)/'؅: #M)L7#*Phi!bEd47 9F @tǫhu36Xv3H$#*Pe^z#ffVӃ&zj#_Zh#*'ʊ Нѫ{<$l~Q#*"v!E6d9%ÈpeU=syb'D}#&C&$!ND{LBx̱=  q1!X5m;jm-, TT2Gr6, dE8D[om3%t`Q`fD( :LNÚs>l:R&)y$S=iF@N)ԏ8rH#*H!"4$gilq>䖩[#*EpҼǼv|I*GM=~{B`X%rXz#*']ĶPe{;J:Fp͝fPJh#&!kq0vP:a9G+0Ӵz ħHoR)4oo q4m6 ky"4IK#&Ic!Ekf Ŧ%0/ 6wXu`1V,s|pad#(Ix(@m{uCD)[ pBB<*icYb4g^IzՋyzFi-A Y4l IRۍ#( c LMj$kQZ mfJ!"lpFFp-&GFZZlQe\ir#(*°&P޲, XZpY,E,Vͨfعj+$ƼOFGo=DFq&u Z7IK2.i4%#MeGi tE'к-Rc*UBIi9$6t`S$dWh?v t"2#*8#]E-R`M,}||Zڦf$ZɬƼvUC41%щdxVNH4#* D,B)" ?+ZwVɩ5mm&Kc#(.j۩X[nniM{Yvk_*UH:ϥ?#*p,:30",:"OoWOBjh(fxA"AVaAhZS ܹ#&a:f \ohKo/3@MP>sk( T@UM#xI#*rFmGS6Y湶kVj65IkXl+H`cAefAD6%IKhEbaI5#&`Ε-bHhPtH,8jV?W.Hu4CI#(4CʎZI6$OHrC#&aP3 bL,0-#&/}EArf#&Ȁ.|Gh?jpѱalR@#(A%ǟiN{> YX9J5;ͩ҅#*w-=x9xe\D(|4P#&E}\bnp%Pãh:Bì)iR)(JTƶPmMv5YOi]FF&hm^w#&` dm7(PXV{_CT(R tfCĥ4d;.Tjt_Xq"spyE^Xv F1Vy/I&&42 ZV60#&G{1T#(Ȓl#ܻ :I$I&br(x[x牏PSPKa.@0H!!J`ݰ6fl9n#3:Mlp(̓>5ծBHgXF:f3\]I#Qv|cJQLh%PF$R\g{)Jeӏd~w i!(8!ǦX5F`reL?IԻ؇LKM383QO:zAښf~yRW aAqlE#(RRRlkR֚֌fM*-,fU6chc4I*ͩbUSk)MY6,EZQͩZ$V*IZ ڋ3?GL"46!5qU: bQPD UQEV#(£ԵZ_l;ޠ(J"-@X@"')' P(̓ʁY4*ƪaP6}Lp'stAp(]R!YUO."@j#*⽡=I ?z$ H@(OȂ^ԷHW g^W1leN{۳U ()NκdzIJxj™1ە\HiRD^F |tÔLk.A]GH;;HVB$Ɍ չ'2X@0cY' Z`!6&yZ#(!LaH~qY}бC)G-+>Sk#(4Gj)r}:.j6J㌢u1%z$`cnGF+F@5%"᠑ahiH,xcը|(d($EQ 'VW-q I?X/&p#&heSVYrbiK)-|:ysȸPQLb}R6a8aXf8#(W e`$&7,&! 2a)s$6.o.XDGVEK9slD1d:01@tg .3Mh#&#&u;!Gw랥Ib\r5pmɕM#(F\е"N<DIPgP.4߅͵QLVã  9(XQ#*J4#(K!) N#(#*zQ<(.^7Ԩ:>%}<;zTHȲ8!MjZi=iS. hj٨.*dX6'{#& \צh'U:<=#UҤVJ&2 59y Eh#*˞:M̒)V w֫^E dKiyۈ-P$D6B mT璎m]F2@gBѱʀyMItmQUQ!?p1Ձ[0 >VXb֡CwhSnm봬c.p@A1K(ɶ5EMoM19Z6AN4VFcAsPG,ǥ SfFl9qi%SyF֠($8 p!~ՠF#(!oX"UA %{Ųـ` C(}7!"B:׀aH`ާnGG԰y#/96Oov=lq4ObIҪ(CI<"LQF+fZ6KIcT+mi2ws-@D>#((7~=prQso60<>!h뵚l"NF^q#*SyGK91:2 w`C^Q8^yZmjpYYya91Fz+70;$HPpA-t&L}/:hZ$f+.zsm#$/͸ڎ=v:ES=?9|aOzp6;}+s;;gpb*qװ}x'c#*RH`hī2iW\iG'1v׼ N4֯nHuYa) y~#(#(YM]a;II3uq9g' ˁ]~P5dj؎lHBEA$tCCk4d˶`s_('-qsNJ`,,f%)df*E_(GKٚ#&!nX g|Kw\(iٺ,,PM ,h `mv)R90#&$`#xQE@L#&4#*FN-I==;z8:fYV_dPJ-j֭#(zfO|x3|o.r=U6n蘁Qe@FO΅ZNղ'L8t(2Q@8F.lÉ}4ǎ"#J7hl Y;#(#(b@țL%QTT(3j6#&m b]ei[EIK3VVjcFL\Ku|hf`#&", na!A92"uL̎#*H[&dR5ix|n9`t#(Fm CEli @c0K"~>*gdkA#&I"U4k<ݠym#&#\7S4F٠Ÿ#(_qAN d8g}1zh{+qQ@a-bʤ2$=ٻȥ>6ݥ{m.4CL2׽=@fU#&+ZZ`hEg^bjb#(Yޥ$ՆZ%@5D l/#AAH #* j#*F엷 ]m@"v6Fs#( ȡhv~c)sus^F4'H"Q& X!'zٜSZD?qzMIkuL䭥~ĉz#*4KMY8tjıh/d5/ #*!zA@ti]4#(/}ix70{F׬'CKm"3 hDF$#h`:$IKIS#Ҩ"#*PmdTjPN#*#(4 A42ҙFƣ]wQ^O<6*E0%9%4 JihswdiăCc2b#*DFILkMƐi ~p!d~lJ R)$6]*%tYjUΒ^wgn&5+݉b]`dٙ#*bĨPTL 3B#b)%zI^6ʙLhRR,3LZf$إ2L5rimQMW*;u^5&EJ+&j2+#*م.JK̗s7#*"!Zx9YVAnGcuۤ&RTEZ8L4j+,+4=m|ba-`i@Sr0\3 Pɸ.R1iK0K#* $SW]"m\#Nl̲Z[o8FMĤ\-"1Z̑(k@JJlVR+EflM`[K"LIiZDSE$["0D4]Qoչ#*-c'8ͪq5Uds٘k$2E2=346#E=N%CЩ\5p#*tPAͭ%~Y[u©XS2jw6&̶vᤴ1 -b6ު*x3#k] 6ib@Čŀ#~yYi#( o^bIsU+F#*"21FrŒ]fZy,a3lRujbbdhCSSYp-/Ѿ3|"nh*#(Ab RI,xi+pVo)$NX$!DPZQ!A#(-T6ҤT 0#&`1A)#*"ИƒE!iBIq(`:O0鏭5#&X~K2ΥUԈnv#T9>iaYaq1W4Ɖ^[p֒}.\XbjDzs4<5ݶo=)doowIٜ+=:՜E]k513QK*5qfJp/oiCmc5uf#/!TF^mlޔW\mL#eGh,C#8ZX XAqm$^O $ܬp?4nۙ߿z6nd߳6Qђp'ҞνSqB`Vٵ]sV;8)LvTU2 m$CcO߫2WK@(.7ö!2\wkh J#*LCa<.>`p0>KoM+a**QYQ Kq 6@#"hI*hؗ/jexT(1Leo2HЃyf#(eԂ'3˿^4M$Px^2Йݩ.56ao߾8 &,i$w n.?8kXѤLf7?)$2&43iftpIgde8#(XGg9\Lh&!Ɏ:mʷOf8U;!@[!̟]%f^ђDŽЦ>*+"O, q< g9)Zg핍yJYMB##(1.gUX,>Xt ܬ7^WSj'-OC+YN[*Hos's.a')Y*-6*_y]*DH@?Q &PA y@B,(!$,(^@k_N_N0G@P#&3#&^;.c):?rf#&L#*(B"I5g-t^5䶭BF3[6[VbaC!-\PvHEkfIQUͱ|}bv']H\מ];1I&B`L]Y±cvL)P+bmJTHAXk166#*DXPkbiy I#*ODYB C?Ҡ)#(1#*"0% o_)P=>;[AϸCxϫ2iŗrLØ$ьctrӦr:eU:1BB#& (@Cu=c{scVHT1?#(x!OBIst~#&r`iHL=T%!xrj"#!oƃ8>R̠v2s44@np\d1QWZά#Қd[ohD%Xi}GpqAUv lEn#Z<ػ")X " T"\Z Q/+Uȯ-\g\W$;?IױT79lĊ9pOP#*/?ܰ#&ǿ:U(T*A1#&P{!Qj =|υx!7*B-P%He0I 6~Mi" wydeʮؔ幗"RMBiMQUڛdTwz_Yk3F<mmzfä!dQ*Hc$#*Liq i $킣g:=,#*&!Ml)he^^p* &Ԕ$M@uԲcwZWky%~%>!Y* Q Kݫr)m$ctɒ#YbQILL-힔i(zkm$J)R,#&P- F DnܹPD,R#&`Rqhzk#&؁hWtAdYj6TVҭ ^#&c_A5f#mZdQP!#&w#(j#&H>:bA V-֨.\0ڂ85ZT]hz"$(#*fHԒMyR:ރilqB!f~//Pr c<`p$[hjȊUJ:^NzOoTi:`vOh40cD4x@!nD#("cp!79x殒UʽL#ò9USKNBG[K1L~",lS:~F/M BѦ@`F P`nbg.9ץ˗$jK阴aVxm-1*}IarOd}xGN$uy`Lthڎ4? y1>vkA+?c'nEۿւ\ht7WRQ%&qϧΚ, d dv]qLG[f(`VS46 ޵L^Md;ţcpC\"hx)*QtD}CDaXA$N#*m] ˓GC&#* DP)#* >YU(#*Ʉ"g78YDC\C:J-RPm1ǒ'@Q AX;ؽǝ> ":RZBٛ!ٹP6[[F(W]@LƵUEUY h~B>ظaQ$G1iz䑜[3Wjtި^_[۔("/=ko -#*h@o~8^6w.{z/D#* &ׇ8 mPki"$FJHEe mfuw-35Y.%(ω7M-3фrF|CzoN&z7lH;X/ YLv6iA2c}I-kkm)Nhe(҄ F$yN_~L°U>@C`m1 #*Z*")ԧZCޏ #&wH$R;6#_A׉☌6:wF<:}X}:_mh#*G\x#::,{N@;-Va+.h24bϚM"+ȠQCbx N"Xr^uQʏ&\m֔}Z)I攚eJu?""J%IU\w?vJ5mSAbŐd @#&:^4}r\V&|>gQ KU N${b_F?O^y&əDTiR($A66&!&DXH~2t3&̝, d3}>g^\8N3lq]fΌg)5,k7yAPTUJxΟ$(Bͱ(!<)EV`ĻZy1ދdqdٜ)!mcz\/NAAz `U޽ǵCFFvu-CGMTV^0M-l6huiy/@`H~L\8$55[_ dSJRi#&I ak-9:[ե[hlC,B3PL# 6(1@)(@i%#(*%+l h@#Xl0H f(`!Q}H7#(_zm`֣h]2U2 NAF$ Dg#(|@>Mʌ"{ID#*#&=9fZ0eV%!fA;+z!G^+kj-O+4 l108RmKH'p#TqV4ò23N XդT`hdC\ fPj!BEf0GWf15I@0MqAy5гS!Cj أ#(d!ȨzC#(g7$#*aH j˻Kӷʝtmq= LA13"^ AUCd5$K#*"!hiakR=AuFBp<f٪Ep?; Xz3`F4>Jbb!-[=큫TJ#(.XXP#*g0ԥ6mrr2&:&[YDp*.&1`ѰEQ$@Dv0$i-#b#* Ĺ 6(P#*,IQAdT01A+u4b`&)_qU!QPuF2TA61f=^#N-_:KIAbi,T]H!)C`$ngT#*#(@;BDՂnX#*S#((TQ%wZ#(jJMmM3LT5@"O\=u))׸M O`aX#*CHRѲ촐nkRivEKxYjEEuutomu҇wG֥wQj5 J3s0lG](77bYJY@:#*tx9w:P##(;fC?FаYj b]䱮ٯYœB,I㺹IY$C*U:AKܧfx_8p m'(MAҠe"$Iea.Z2.IY{N]hF?F#/edPb<ʲ~qO{jh'NuLUqI;{׋F1dľ}V߯BБ`q0<(0PDDN1rw`pNCmbb5XtX%Akeic@ Tȶ["3&!B l#&QtToU_wHʪ4\:$@4a8kM#uV˛Ԛg02L6WAXY(L2Jj-'5zsmMhؚFk76Q!j5xY5mgwr4k&ҸQmӻzUnx aA6-k+=u6OPx{#F4e$B+DAw"-^?Ĉi#w^͵\>҃{R/!Od~#*9}ȇ"he$SCl @ $^1Q416F)(;;KwPiuH$`܃`14P "B(U`~m׭ꠡI7mx*ؑT^DP AT8|/jA#&` xu[ T+#&|x tRO+҃xDR3cvҰzG,Jԉʇ1{"P RH61idi4hVE)II3%mZ-ڱSieSQX")B(${  fd#*F'&0Q'م.CmG2pp1DN:Lb(U@1ěCeldE d(UF LaۚUTL$C$k+`25d!q("b#*ąLHDlaVC#( M%sI /z.yhE+P$ ;;_ffqvc™:6XX㤴щIoe"P/J!$P91gR[VcH!PJzأiUQ,zzu!)d%w<]^YvTٙB2Vk #&H]JKL?8W(PBLa&Ҥݥ#&hQ'rТkLoM+stNbqOMT#(zcY4HدszwMW~=WRGtͺ]rv%oQ8إνOY+'\B4trPtbq銦NdA0|S!"!n `;5.Ociz_2̢DGh&Pܩoy0%n0t[Ox>K7Vۦ6)0{zl(#&6٣ҽ fbE[Cf!#xE29⦫y ;HvQIC-K(Fj԰qĥ+-?tSPĠ^ۄl5sq:fU)X:2GS4t{&tخ͸凯La~~7f2C6M`#({Wupox˞ou,y۞e]j=q^e2Q2dTS9﷌>ˤ/6p P|ڵBeFz09`K/[KV%-S*T!Rz"Yウ]+ER^##*˸<pTM` #CE.'s'2[:zhT:>F?&|9ipŢ.XHSE8-7K \6$ R SH>FE.)[# ]u"#&oΜyiuS^p˺佘j:ӫpӔ ^z`qC#ږ !FyzDˡ4Dt\z";Ɲ؍_0&J&&5v=KqQ^ӕwҽ\:]^o^6ޕPlkw[Ӯ,jzmxmtƫxܵF\֥t"{tyrm&aAPdTDE#*y&XHR#(e!dQb8|ԎeWdDbv HyJbfo@%qA5MҭI*lLc!(rYfO$iG;o[5+hBM 6.j<1,bXj&cc8cZh;Yf#54QHj*=5k s)reoLA$1A]fE@#(i:ˆ&ڃVpDV$eѽ\$c)C7ZpHhD wͅ#&#(DifL"2#&#&cu)HsaMW4)ZKlx˩E\17 7@+\ФI&䰍l.m͠,FD0x/(V4=↉hc89C%c!nJB2#(n%48LLa|jѷŷ%Wonv,M˧Ƃ Ek:C[5F#*c*5R0$˷e>V6#~FzTnn[* gIS`t *,8ێ]7BRi;#hhZZ~Ε<~^ rsfo.1b=/(6Z\\gÌn7m7tɄFqݻ4eU9lE:'h{@N(Rhx%?>awƎO/ABءN-U{U+mٶKuS)kE]7ח ER #([T;yͯ{{*Ʃ"6QSI(,"el&Ս%bM͕4fT,I((CH4LѲl4hZF#(DLj#[keyLt_\Kplt]~AL$&#(4'G}6)'][AN.5(E5!E#(#(jrVe,`H5cl&NΞv1o^kW L7rp.+Rcc#*8ddVKԺ={OS>NP9 a7\J.B-zIJd#k"Gs7܌RdX{h[Ѐ4#L @0H#(SkՐm#*h a&B#Uf@#&|ws\4#JU#*I䰐UG[a<߻ Hu{~?d{w@3%D6gzȐ/~IR X6驪QZiOY#:H=a?5#IT48ڶ c[q0&k#*8~dH|SDifj6&T64)!D p⺫^6C-Ii7bC]})8OHȵ]4yOP0"w,4}wWXDA%.aAU07H$ȧ0:Ѓۄ|qB I=N&;*vPk`P)n*Qə`>) #(zOwEAI"" ~eC,W?pG/d !&g޾[1\~C6O]+qviр 1 uq8'Ssk?< Ea쪇an; 0S~6;#(MaU=sknddp<:$g,!`zRb%%zBH4fw/*A"g%):{qk9S<* 4Pč QZ0)@Ș8$MO7UbX2$JIr7{:C9 eB 9'1Yr#&G 0ݦ+u)c:"#& &fX".5J2jV }n 2#(zery06CŰN,%D#(hr(icAÞH؃f+GXoFm$%1:^-QЗDHbˑs]AR$[#*d㶶ȐVNX@lk3Zci.6#&NQO?8lK97qPI*sK!2)hiqѹD Pg+m񓅮9'{鉄4+pIzo*3X|pLztPnlRC`Y7YPa`㜌ҀlsLJ%RWy^-@1PdJiilh8v&I#&B*HG&O*|\SqG|B#9.ABi3w(Zdob5dlbA?E /Ē,oQs)*µ2FpF^Fa4*Z #*ׂ8yHjr*w]iD9<7x|/d}clkK"|][\"0&!=pAӑAYRm"K"H@nBrU[kS%RA.5$[!"#*m^#*UվؚaUXeSQxnѼ0ɑؖ#r;iiƄa xW5Mxwمjns7 +ɠwMŠVn8ɀB٭U82fPIΆz8.%tzTٳtsHk`S$= yy,l#&jjR9NLpN#&u~:NQX70~!6q;&4w0^4(qC w9v;n#(|)U T IHv"lM6 *`N#*>dx#(!Ha#AFH"P5SOv热S89ijC"۵:嘁s1EF#kSfWX"1`l"⸺ÂEEca02J/e4Q3,TTD XAm(#(D#dCZUq FQeAE; ڇa3bh) ]& @ѯsPHF!AɠMȻ0]gcB#v](94#*ܨT`nc[#&S(5xȦ)ǑPA'v;$0xJBxo1SD`TZz9wmyQ$jcucc%#‰4iTA#(EF!FgI;cIg}K_f}Ҏ)Flwb?oŴ?0_XoD禽$NY$`wYz~Z5L&\}YS2m2nN(!#(PAOly*%j޼BU䚍f=X#(#*=̊R1X려~&l3|#((ɝ+!gxQ|\5ZmE%iFjK앒ڍ5F^J"ZTR *I,H ucEP$.#&H#&2#(9gsk# bB$Ȓ^ݽS5V ?B0`")"jg<,{Fsh3ww/Ҙي1_#&( ]B#(L &Gd %šגOX>Xb%J$uÀ0.:K?#(|aGbb<Ǿ 0MeeTQ1C(+kf P6kJ6%QZWBڡ7D<`b+7雠ni%dٛ_"7OFBv:)D:;>ۈ&PSB{9j$sX1,|ݭq4\*`o=#T F0㎑Hq֒a$,%`e,DL\hhnewWӳ.vj%.)n ":h+m; =>HI6`ڬKPچfeͩ7d5ٙ͑pTtlſMb V]i2`ȯDZ;lPih@4&$C/i];z#&*gA.B-#(7㐥@9>p|@zBF: #&#&Gk8&ymI :$K@9MH^C^XI˝bab>}wQhN"K3B&GGfKV@0E#*v#&Jut7?ѧۦlٲWV($0.ܼm?CGCk[*#(ƅ>16PrQ@E|5F1<먨E$Xiwد9/]ӆE6Bъ1+ɺlmEa b7-ԛbL"e)TzґMaCa>[v}QAGjY$4} Sҩ]A"Ȭ1F#*K1:Y*LXe-6}zIQQ4JSMRB0/"TD섥A1!HsHNt"N`j&7u͑MTM-EM1lѧ<ړV BQ:@D"*4z;I|0ubI<&A}Ӯ"!d]b|:E#&ށ*e$a$4横,,@$9BA=(3$1Pm`BY?#(OM`SR0?6J>"b(sO`#&A$بh7#*$HB)Qjj4-S_#(`U.kmi0#&#&p1u(V583 ,=tڌz#(5@{|FypbܵF#l%#`9P$rԇHq(sR93ہ1/]c夎hG`!,A~}ͭu~]4jiFF)(*#mSh߶VDQm%2m4-@GæM",aF&,(&|:V!`٨Tw.rvR#&UjZ-h-JFڛ,EXթG9ݽ%$#(91jjЀ38_F3PZ1fR fu_x+AX-<bDcRHFw09HaYDX#(W vE*kl5Z7mwvWyuMɭW%Ef̪뛶:Ȳ݌6ZM%LMo;y*pR$0J5lHE5&YW+][˫EsOϿ/G}# ok#&pW"Aa+a@?b!TCdO>#*f%_Ow;Hfg[-%>9 zZ.6k31#&p쳻WK 'Pv퉎{#* Cno#&n#&?L^ؿZAgExI$ Wc1g`@#&2ﰳWұcUӋ—X&,z`iNf$&L`I<UxrP8.= vMjqvk#(%'"0#(J!#^ݭ1h$qƆH$ ah!&"ԫM"e;Bd44S)`Xfi憛vSfZM3Z2i5$AvHf^$l,rF kޱi⑳Ή%C0!N솃/D̈́@l\TYD̬Ů^v#&]#( ۉ&QZHuo RdZ#(֩˓XWPJ#(SڐYrxByIV`Lm6&>4ĈzC>xKRNE<)YpG 1#*-%J)tĮ˱*1Xfj* :'#1Ł 5!&Hcn!C8)K;EF wEX@ʤ#&Pc$A4#P;'AkP0b[AQKC0M.Vwb1#&#&NZAߑgEhQ!#&RF\JCPU2ũ-Ji,0HBE#*P\@">! MVPd]y@a.ԤQg?xu5 B$P'kmUd' #M<Y=**I#&Yk y$wmKe#(C3+EНM+*K|k#&0aۈ/%*g.d‡9C2heM*<7щ&Ǹ'ʋ#*vago~.BHEk-}oofˆY[$&'T`}zZ@si6mSJo1H,HU$D$!f`^jRP.Ê0Hl!T/FS|d#&bDu;)UQ /yֽᏴdgAD}vꈹI"=OYv ?#*!?#(JȂ ؎ӯBseZVW#(nn4M^_m"z_Jքwy@wc-h{nh#( ρIB:; #&#&D>2P_Z'I6O! '_-m65* b?vl5_]O.qʎh=jw{#&XYxIߑϼc-?d/bKчpjG92,ZNkb,_ ۊ#*^yu{*¥Đ>#& xQY]N*pAp9SCttYXrbKks sמYI[$\0\0z;Mr/ cݧJ)Ŋ}=%#&j[~DS)„CLW -#<== -#-----BEGIN PGP SIGNATURE-----\n\niQIcBAABCgAGBQJX+p6MAAoJEEm0xnwFJ3qqfPEP/AlS1gEGD5E+ICQY59HmgObQ\n7ow1FhLcxSTufrm1AIbHSzzSUXTDXKhpmU+Em4tRQUQOvLjb/5GMRQiFfMZzscgD\ngANKCTU+ziONmJVCpcrkfPCfuXwsSo/feD83sltxQzZeINqBMuty53j0UuDvEzFe\nGG3n23m15P8mDT+aW2/AdwL36M70ikabQp33TteNzfZA1dbjqTeqIMiFpRgqy85t\nQ/K1ZnfI8m9DTwFxPO+UQXzY5mo3kW5unCipP7uzbQcEEP9xnJOIFDnumLJocsWt\n+PyXNn5qf4QfvxiAyc1pkMCKv/Ln2xr9Jn0n1xKO1kQRw+o+Ia2+yoNMXpwOLKe1\nbyGB/KM9G0O2xF5Ouk6yf3y7SGGy5i4HH5Yx8cDTpMYl8o5OFL1azgZl8RFf5nnY\nd0tGvCc7LHdYSTuRk+K79MW6HK+Ysu9v95MyiBH385/bbKDpLtbnVPPFyAUtvTEE\nUs5nGkTv3RtqU/R9HUe+i88P7HQDlEL8miE9FCD3BCs397h9gSlyW+lmH3lv6dCb\nSEMz+UxxoUKOGtdTqXCgQRMvrnkS6iOd9p6adc4a5BkNbkTtlIi+0tIRhr9AdyYb\njQF7YXgx72B3OLGtuECMPBoE/LoJHgxDcJ224Wt5sZVfg9rnY3taYBZDhxR0sc9U\neSaImCJESAGBu3Ym9vvB\n=LPS3\n-----END PGP SIGNATURE-----\n diff --git a/wscript b/wscript deleted file mode 100644 index 210425f..0000000 --- a/wscript +++ /dev/null @@ -1,344 +0,0 @@ -#! /usr/bin/env python - -# waf imports -from waflib.Configure import conf - -def options(opt): - opt.load('compiler_cxx') - - ins_gr = opt.get_option_group('Installation and uninstallation options') - bld_gr = opt.get_option_group('Build and installation options') - conf_gr = opt.get_option_group('Configuration options') - - def_enable_compiler_warnings = False - conf_gr.add_option( - '--enable-compiler-warnings', - dest = 'ENABLE_COMPILER_WARNINGS', - default = def_enable_compiler_warnings, - action= "store_true", - help = "Enable compiler warnings. (default: %s)" % def_enable_compiler_warnings - ) - - def_werror = False - conf_gr.add_option( - '--werror', - dest = 'WERROR', - default = def_werror, - action= "store_true", - help = "Consider warnings fatal. (default: %s)" % def_werror - ) - - def_disable_compile_opt = False - conf_gr.add_option( - '--disable-compile-optimizations', - dest = 'DISABLE_CXXFLAGS_OPT', - default = def_disable_compile_opt, - action= "store_true", - help = "Don't check/set compile optimization flags. (default: %s)" % def_disable_compile_opt - ) - - def_disable_link_opt = False - conf_gr.add_option( - '--disable-link-optimizations', - dest = 'DISABLE_LINK_OPT', - default = def_disable_link_opt, - action= "store_true", - help = "Don't check/set link optimization flags. (default: %s)" % def_disable_link_opt - ) - - def_disable_lto = False - conf_gr.add_option( - '--disable-lto', - dest = 'DISABLE_LTO', - default = def_disable_lto, - action= "store_true", - help = "Don't check/set lto flags. (default: %s)" % def_disable_lto - ) - - def_enable_debug = False - conf_gr.add_option( - '--enable-debug', - dest = 'ENABLE_DEBUG', - default = def_enable_debug, - action= "store_true", - help = "Set debug flags. (default: %s)" % def_enable_debug - ) - - def_enable_fftw3 = False - conf_gr.add_option( - '--enable-fftw3', - dest = 'ENABLE_FFTW3', - default = def_enable_fftw3, - action= "store_true", - help = "Compile and link against libfftw3. (default: %s)" % def_enable_fftw3 - ) - - def_fftw3_cxxflags = None # Use pkg-config or env - conf_gr.add_option( - '--fftw3-cxxflags', - dest = 'FFTW3_CXXFLAGS', - default = def_fftw3_cxxflags, - action= "store", - help = "Skip pkg-config and set fftw3 cxxflags explicitly (default: %s)" % def_fftw3_cxxflags - ) - - def_fftw3_libs = None # Use pkg-config or env - conf_gr.add_option( - '--fftw3-libs', - dest = 'FFTW3_LIBS', - default = def_fftw3_libs, - action= "store", - help = "Skip pkg-config and set fftw3 libs explicitly (default: %s)" % def_fftw3_libs - ) - -#------------------------------------------------------------------------------ - -@conf -def check_api(conf): - if conf.env['DEST_OS'] != 'win32': - print('Checking API support:') - conf.check_cxx(function_name='std::chrono::steady_clock::now', header_name="chrono") - conf.check_cxx(function_name='setpriority', header_name="sys/resource.h") - conf.check_cxx(function_name='stat', header_name="sys/stat.h") - conf.check_cxx(function_name='chmod', header_name="sys/stat.h") - conf.check_cxx(function_name='nanosleep', header_name="ctime") - conf.check_cxx(function_name='sincos', header_name="math.h", mandatory=False) - -@conf -def check_flags(conf): - # Load this before checking flags - conf.load('compiler_cxx') - - # Set warning flags 1st so -Werror catches all warnings - if conf.options.ENABLE_COMPILER_WARNINGS: - check_warning_cxxflags(conf) - - check_required_flags(conf) - - if conf.options.ENABLE_DEBUG: - check_debug_cxxflags(conf) - else: - if not conf.options.DISABLE_CXXFLAGS_OPT: - check_opt_cxxflags(conf) - if not conf.options.DISABLE_LTO: - check_lto_flags(conf) - - if not conf.options.DISABLE_LINK_OPT: - check_link_flags(conf) - -@conf -def check_required_flags(conf): - conf.check_cxx(cxxflags = '-std=c++11', uselib_store='LOSSYWAV_REQUIRED', mandatory=False) - conf.check_cxx(cxxflags = '-O2', uselib_store='LOSSYWAV_REQUIRED', mandatory=False) - conf.check_cxx(cxxflags = '-pipe', uselib_store='LOSSYWAV_REQUIRED', mandatory=False) - - conf.check_cxx(cxxflags = '-fPIE', uselib_store='LOSSYWAV_REQUIRED', mandatory=False) - conf.check_cxx(linkflags = '-pie', uselib_store='LOSSYWAV_REQUIRED', mandatory=False) - - if conf.env['CXXFLAGS_LOSSYWAV_REQUIRED']: - conf.env.append_value('CXXFLAGS', conf.env['CXXFLAGS_LOSSYWAV_REQUIRED']) - -@conf -def check_warning_cxxflags(conf): - print('Checking for warning CXXFLAGS support:') - - warn_flags = [ - ['-Wall'], - ['-Wextra'], - ['-Wmissing-format-attribute'], - ] - - for w in warn_flags: - conf.check_cxx(cxxflags = w, uselib_store='LOSSYWAV_WARNING', mandatory=False) - - # Set -Werror if requested - if conf.options.WERROR: - conf.check_cxx(cxxflags = ['-Werror'], uselib_store='LOSSYWAV_WARNING', mandatory=False) - else: - conf.check_cxx(cxxflags = ['-Wno-error'], uselib_store='LOSSYWAV_WARNING', mandatory=False) - - - if conf.env['CXXFLAGS_LOSSYWAV_WARNING']: - conf.env.append_value('CXXFLAGS', conf.env['CXXFLAGS_LOSSYWAV_WARNING']) - else: - conf.fatal('None of the warning CXXFLAGS are supported by the compiler!') - -@conf -def check_debug_cxxflags(conf): - print('Checking for debug CXXFLAGS support:') - - debug_flags = [ - ['-Og'], - ['-ggdb'], - ['-fvar-tracking-assignments'], - ['-fno-omit-frame-pointer'], - ['-fstack-protector-strong'], - ['-fstack-check'] - ] - - for d in debug_flags: - conf.check_cxx(cxxflags = d, uselib_store='LOSSYWAV_DEBUG', mandatory=False) - - if conf.env['CXXFLAGS_LOSSYWAV_DEBUG']: - conf.env.append_value('CXXFLAGS', conf.env['CXXFLAGS_LOSSYWAV_DEBUG']) - else: - conf.fatal('None of the debug CXXFLAGS are supported by the compiler!') - -@conf -def check_opt_cxxflags(conf): - print('Checking for optimized CXXFLAGS support:') - - conf.check_cxx(cxxflags = '-Ofast', uselib_store='LOSSYWAV_OPT', mandatory=False) - if not conf.env['CXXFLAGS_LOSSYWAV_OPT']: - conf.check_cxx(cxxflags = '-O3', uselib_store='LOSSYWAV_OPT', mandatory=False) - conf.check_cxx(cxxflags = '-ffast-math', uselib_store='LOSSYWAV_OPT', mandatory=False) - - if conf.env['CXXFLAGS_LOSSYWAV_OPT']: - if '-O2' in conf.env['CXXFLAGS']: - conf.env['CXXFLAGS'].remove('-O2') - conf.env.append_value('CXXFLAGS', conf.env['CXXFLAGS_LOSSYWAV_OPT']) - -@conf -def check_link_flags(conf): - print('Checking for optimized LINKFLAGS support:') - - linkflags = [ - ['-Wl,-O1'], - ['-Wl,--sort-common'], - ['-Wl,--as-needed'], - ['-Wl,-z,relro'], - ['-Wl,-z,now'], - ] - - for l in linkflags: - conf.check_cxx(linkflags = l, uselib_store='LOSSYWAV', mandatory=False) - - if conf.env['LINKFLAGS_LOSSYWAV']: - conf.env.append_value('LINKFLAGS', conf.env['LINKFLAGS_LOSSYWAV']) - -@conf -def check_lto_flags(conf): - print('Checking for LTO CXXFLAGS/LINKFLAGS support:') - conf.check_cxx(cxxflags = '-flto', uselib_store='LOSSYWAV_LTO', mandatory=False) - conf.check_cxx(linkflags = '-flto', uselib_store='LOSSYWAV_LTO', mandatory=False) - - if conf.env['CXXFLAGS_LOSSYWAV_LTO'] or conf.env['LINKFLAGS_LOSSYWAV_LTO']: - if conf.env['CXXFLAGS_LOSSYWAV_LTO']: - conf.env.append_value('CXXFLAGS', conf.env['CXXFLAGS_LOSSYWAV_LTO']) - - if conf.env['LINKFLAGS_LOSSYWAV_LTO']: - conf.env.append_value('LINKFLAGS', conf.env['LINKFLAGS_LOSSYWAV_LTO']) - else: - print('lto flags not supported by the compiler!') - - -@conf -def check_pkg_deps(conf): - print('Check dependencies:') - - # Make sure these exist exist - for v in ['INCLUDES', 'RPATH', 'CXXFLAGS', 'LDFLAGS' 'LIB' 'LIBPATH']: - if not v in conf.env: - conf.env[v] = [] - - if conf.options.ENABLE_FFTW3: - check_fftw3(conf) - -@conf -def check_fftw3(conf): - pkg_name = 'fftw3' - check_args = ['--cflags', '--libs'] - min_ver = '3.3.0' - check_pkg(conf, pkg_name, check_args, min_ver) - -@conf -def check_pkg(conf, pkg_name, check_args, min_ver): - - conf_opts_dict = eval( str(conf.options) ) - - opt_cxxflags_var = pkg_name.upper() + '_CXXFLAGS' - opt_libs_var = pkg_name.upper() + '_LIBS' - - opt_cxxflags = (opt_cxxflags_var in conf_opts_dict) and conf_opts_dict[opt_cxxflags_var] != None - opt_libs = (opt_libs_var in conf_opts_dict) and conf_opts_dict[opt_libs_var] != None - - conf.start_msg('Checking %s:' % pkg_name) - - if opt_cxxflags and opt_libs: - conf.end_msg('user-provided') - conf.env['CXXFLAGS'] += conf_opts_dict[opt_cxxflags_var].split(' ') - conf.env['LDFLAGS'] += conf_opts_dict[opt_libs_var].split(' ') - elif opt_cxxflags or opt_libs: - conf.fatal('Either set both %s and %s or let pkg-config do the checking.' % (opt_cxxflags_var, opt_libs_var)) - else: - conf.end_msg('pkg-config') - conf.check_cfg(package = pkg_name, variables = ['includedir', 'prefix']) - # Store without version - conf.check_cfg(package = pkg_name + ' >= ' + min_ver, args = check_args, uselib_store=pkg_name.upper()) - - defines_var = 'DEFINES_' + pkg_name.upper() - if conf.env[defines_var]: - conf.env.DEFINES += conf.env[defines_var] - - includes_var = 'INCLUDES_' + pkg_name.upper() - if conf.env[includes_var]: - conf.env.INCLUDES += conf.env[includes_var] - - if conf.env[pkg_name.upper() + '_includedir']: - conf.env.INCLUDES += [ conf.env[pkg_name.upper() + '_includedir'] ] - - # NetBSD relies on RPATH instead of ldconfig - # This would only be set if -Wl,-R (or -Wl,-rpath) is a part of Libs - rpath_var = 'RPATH_' + pkg_name.upper() - if conf.env[rpath_var]: - conf.env.RPATH += conf.env[rpath_var] - - libpath_var = 'LIBPATH_' + pkg_name.upper() - if conf.env[libpath_var]: - conf.env.LIBPATH += conf.env[libpath_var] - - cxxflags_var = 'CXXFLAGS_' + pkg_name.upper() - if conf.env[cxxflags_var]: - conf.env.CXXFLAGS += conf.env[cxxflags_var] - - lib_var = 'LIB_' + pkg_name.upper() - if conf.env[lib_var]: - conf.env.LIB += conf.env[lib_var] - -#------------------------------------------------------------------------------ - -def configure(conf): - check_flags(conf) - check_api(conf) - check_pkg_deps(conf) - -#------------------------------------------------------------------------------ - -def build(bld): - - bld.objects( - source = [ - 'units/fftw_interface.cpp', - 'units/nCore.cpp', - 'units/nFFT.cpp', - 'units/nFillFFT.cpp', - 'units/nInitialise.cpp', - 'units/nOutput.cpp', - 'units/nParameter.cpp', - 'units/nProcess.cpp', - 'units/nRemoveBits.cpp', - 'units/nSGNS.cpp', - 'units/nShiftBlocks.cpp', - 'units/nSpreading.cpp', - 'units/nWav.cpp', - ], - target = ['lossywav-objs'] - ) - - bld.program( - use = ['lossywav-objs'], - source = ['lossyWAV.cpp'], - target = 'lossywav' - ) - -#------------------------------------------------------------------------------